图解密码技术_笔记
一、密码
0x01 环游密码世界
发送者(sender) 接受者(receiver) 窃听者(eavesdropper)
加密(encrypt) 解密(decrypt) 明文(plaintext) 密文(ciphertext)
破译者(cryptanalyst) 密码破译(cryptanalysis)
算法(algorithm) 密钥(key) 对称密码(symmetric cryptography)=私钥密码(secret-key cryptography)
公钥密码(public-key cryptography)=非对称密码(asymmetric cryptography)
混合密码系统(hybrid cryptosystem)
单向散列函数(one-way hash function)
散列值(hash)=哈希值=密码校验和(cryptographic checksum)=指纹(fingerprint)=消息摘要(message digest)
消息认证码(message authentication code)
0x02 历史上的密码
- 凯撒密码—>平移位数—>暴力破解
- 简单替换密码—>替换字母—>频率分析
- Enigma—>使用轮子旋转,加密密钥—>加密两次输出、密码人为选定
0x03 对称密码—保密性
-
XOR(exclusive or):将明文A用密钥B进行加密,得到密文A异或B;将密文A异或B用密钥B进行解密,得到明文A
-
一次性密码:将明文与一串随机的比特序列进行XOR运算。因为暴力破解结果并不能判断是否得到真正明文,所以无法破解。在保存、同步、生成、配送上都有问题,难以应用。
-
DES
64bit明文加密成64bit密文,密钥长56bit(规格64,每7位有1纠错bit) DES是一种16轮循环的Feistel网络,一轮步骤如下,每轮左右侧互换 1.将输人的数据等分为左右32bit两部分。 2.将输人的右侧直接发送到输出的右侧。 3.将输入的右侧发送到轮函数。 4.轮函数根据右侧数据和子密钥(),计算出一串看上去是随机的比特序列。 5.将上一步得到的比特序列与左侧数据进行XOR运算,并将结果作为加密后的左侧。
-
三重DESTDEA(Triple Date Encryption Algorithm)
三个密钥,分别对明文进行加密,解密,加密;所以3DES若3个密钥相同,则等于DES
-
AES(Advanced Encryption Standard)
2000年从多个候选算法中选中Rijndael()的对称密码算法;要求代码公开,无条件免费供给全世界使用。 分组长度固定128bit...32...256 ,密钥长度有128/192/256bit三种
-
Rijindael(即AES)
比利时密码学家Joan Daemen与Vincent Rijmen 分组长度和密钥长度支持以32bit为单位在128-256bit范围选择。 Rijindael使用SPN结构多轮运算,每轮有SubBytes,ShiftRows,MixColumns,AddRoundKey共4个步骤。 1.输入分组为128bit(16byte),逐byte对16byte进行SbubBytes(简单替换密码256个值)处理; 2.ShiftRows处理,将4byte为单位行向左平移,每行移动字节不同,即凯撒密码; 3.MixColumns处理,对任意行列的4byte值进行比特运算; 4.AddRoundKey处理,将轮密钥与3的输出进行XOR。
-
流密码(stream cipher):对数据流进行连续处理的一类密码算法。以1/8/32bit等为单位加密解密。一次性密码属于流密码。
-
国密|SM1:自主知识产权,硬件实现,分组和密钥长度都是128bit。调用该算法时,需要通过加密芯片的接口进行调用,未公开。
-
国密|SM4:密钥和分组长度为128bit。SM4算法加/解密算法是对合运算,只是使用轮密钥相反,其中解密轮密钥是加密轮密钥的逆序。加密算法与密钥扩展算法均采用32轮非线性迭代结构(Feistel),以字(32位)为单位进行加密运算,每一次迭代运算均为一轮变换函数F。目前主要用于无线局域网产品,已公开。
-
国密|SM7:密钥和分组长度为128bit。SM7适用于非接IC卡应用包括身份识别类应用(门禁卡、工作证、参赛证),票务类应用(大型赛事门票、展会门票),支付与通卡类应用(积分消费卡、校园一卡通、企业一卡通、公交一卡通),未公开。
-
国密|ZUC算法:ZUC算法,又称祖冲之算法,是3GPP(3rdGenerationPartnershipProject)机密性算法EEA3和完整性算法EIA3的核心,是由中国自主设计的加密算法。本质上是一种非线性序列产生器。由此,在种子密钥的作用下,可以产生足够长的安全密钥序列。把与密钥序列晓文数据模 2 相加,便完成了数据加密。同样,把密钥序列与密文数据模 2 相加,便完成了数据解密。
无法解决密钥配送问题
0x04 分组密码的模式
-
ECB:Electronic CodeBook mode(电子密码本模式)
相同的明文会被转换为相同的密文分组,最后一个小于分组长度时,使用特定数据填充。 明文分组与密文分组一一对应,导致可以在不知道密钥情况下对任意密文分组进行替换,这样明文也会被替换
-
CBC:Cipher Block Chaining mode(密码分组链接模式)
将明文分组与前一个密文分组进行XOR运算,然后再进行加密。 第一个明文分组需要初始化向量(Initialization Vector,缩写IV) 比特反转攻击(通过对IV进行比特反转来对明文分组攻击) 填充提示攻击(反复发送一段密文,对填充数据进行少许改变,通过返回错误消息获得明文信息) 应用:SSL/TLS
-
CFB:Cipher FeedBack mode(密文反馈模式)
前一个密文进行加密后与明文分组直接进行XOR运算得到密文分组(解密用相同的密钥流对密文XOR) 需要IV 前一个密文分组是后一个的随机比特序列,称为密钥流(key stream) 使用分组密码实现流密码 重放攻击
-
OFB:Output FeedBack mode(输出反馈模式)
IV经过4次加密后分别与4个明文分组进行XOR输出密文分组(解密用相同的密钥流对密文XOR)
-
CTR:CounTeR mode(计数器模式)
对计数器进行加密,得到比特序列,与明文分组进行XOR(解密用相同的密钥流对密文XOR)
0x05 公钥密码—密钥配送
加法与减法:加x取余可以达到与减y相同的效果
乘法:多次相加
除法:乘法逆运算,将右边结果化为1,则变成了找倒数;0没有倒数,1只有1,其他可以通过与模值最大公约数是否为1判断(与模互质)
乘方:n次方,此时可以在两数直接进行取模,此方法即RSA所采取方法
对数:乘方的逆运算,乘方取模取对数称为离散对数;n次方 mod x = y ,此时次方值为离散对数
缺点:无法抵御中间人攻击、处理速度慢
-
RSA
过程分解:密钥生成,公钥加密,私钥解密 1. 密钥生成:选大质数p、q, N=p*q,欧拉函数φ(n)=(p-1)(q-1),再选一个符合欧拉函数n的e,这样e必有倒数e^-1,可得私钥d=e^-1 mod(p-1)(q-1),公钥=(N,e),e大加密慢,e小不安全 2. 公钥加密:明文m,计算密文C=m^e(mod N) 3. 私钥解密:密文C,计算明文m=C^d(mod N)
-
ElGamal:利用mod N下求离散对数的困难度(与DH类似,但ElGamal主要用于公钥加密,它是单方面生成密钥发送,公钥是随机大整数,公钥是生成元幂次运算结果)
ElGamal Encryption Scheme 1. alice在范围2:p-2范围选d, 计算b=a^d,发送(p, a, b)给bob; 2. bob在范围2:p-2范围选i,计算ephemeral key为Ke=a^i, 计算masking key为Km=b^i, 密文c=m*Km mod p,发送(c, Ke)给alice 3. alice收到后计算masking key Km=Ke^d, 解密出密文m=c*Km^-1 mod p
-
Rabin:利用mod N下求平方根的困难度
-
椭圆曲线(Elliptic Curve Cryptography,ECC):通过将椭圆曲线上的特定点进行特殊的乘法运算实现,利用乘法逆运算非常困难特性。
三个问题:密钥交换、数字签名、离散对数 1. 定义:y^2 = x^3 + ax + b mod p,有限域上的计算,零元是O, 4a^3 +27b^2 !=0 mod p ;p不能等于E 2. **ECDLP**困难问题:P+P+...+P=dP=Q , 给P Q,计算d很困难,但是dP很简单 3. point addition点加法:沿曲线的P+Q两点画线,继续这条线直到第三次相交曲线,最后在第三点(x,y)沿y取反,即(x,-y),一个点的话就是切线找第二个点 4. **点的阶**:对于ecc上一点P,若存在一个最小的正整数n,使nP=0,则称n是P的阶 5. **椭圆曲线的阶**:有限域上ecc由有限点组成,多少点ecc就是多少阶 6. 估计曲线上点数:p+1-2根p <=#E <=p+1+2根p ,点数靠近素数p 7.
-
国密|SM2:GM/T 0003-2012。SM2 采用 ECC技术,具有较高的安全性和较小的密钥尺寸,适用于移动设备和物联网等资源受限环境下的数据加密和身份认证。SM2椭圆曲线公钥密码算法是我国自主设计的公钥密码算法,包括SM2-1椭圆曲线数字签名算法,SM2-2椭圆曲线密钥交换协议,SM2-3椭圆曲线公钥加密算法,分别用于实现数字签名密钥协商和数据加密等功能,长度为256bit,已公开。
SM2算法实现如下: (1) 选择Ep(a,b)的元素G,使得G的阶n是一个大素数 (2) G的阶是指满足nG=O的最小n值 (3) 秘密选择整数k,计算B=kG,然后公开(p,a,b,G,B),B为公钥,保密k,k为私钥 加密M:先把消息M变换成为Ep(a,b)中一个点Pm,然后,选择随机数r,计算密文Cm={rG,Pm+rP),如果r使得rG或者rP为O,则要重新选择r。 解密Cm: (Pm+rP)-k(rG)=Pm+rkG-krG=Pm
-
国密|SM9:可以实现基于身份的密码体制,也就是公钥与用户的身份信息即标识相关,从而比传统意义上的公钥密码体制有许多优点,省去了证书管理等。SM9可支持实现公钥加密、密钥交换、数字签名等安全功能。但无法实现不可否认性,已公开。
0x06 混合密码系统
加密者将伪随机数生成的密钥用公钥进行加密,然后配送;传输过程的长消息用伪随机密钥对称加密后进行传输;
解密者收到后用私钥解密出密钥,再用密钥解密长消息;
组成部分:
- 伪随机数生成器:生成器算法需要强,密钥空间足够大;
- 对称密码:高强度对称密码算法,并确保密钥足够长度,还有合适的分组密码模式;
- 公钥密码:高强度公钥密码算法,确保密钥长度;
应用:PGP、SSL/TLS
无法解决公钥是否合法问题