第三章——对称加密算法
DES——S-DES
https://www.cnblogs.com/cx-ajun/p/7512395.html
分组加密与流加密
流密码每次加密数据流的一位或者一个字节
分组密码是将一个明文分组作为整体加密并且通常得到的是与明文等长的密文分组。
流密码用时间变化的加密变换,其转换速度快,传播错误低,硬件完成电路简单。缺点是低扩散和插入修改不敏感
分组密码是固定变换,其扩散性好及插入敏感,缺点是加解密处理慢,及存在错误传播。
分组加密原理
Feistel 结构
假设加密过程的输入为分组长2w的明文和一个密钥K(K在运算过程中将分成多个子密钥Ki),将明文分为两部分,左边记为L0,右边记为R0.以下是加密过程图:
第一轮:R0与子密钥k0进行运算,记为F(R0,k0),得到的结果与L0进行异或运算。
最终得到的结果将作为第二轮运算的右半部分记为R1,而R0直接作为第二轮的左半部分记为L1。
第二轮:L1和F(R1,K1)(R1和K1运算的结果)进行异或运算,产生的结果为第三轮的R2,R1直接变为L2
第三轮以后一次类推,n轮迭代之后,左右两边再合并到一起为最后的密文分组
每轮的置换可以由以下函数表示:
Li = Ri-1
Ri = Li-1⊕F(Ri-1,Ki)
Feistel设计元素
block size
分组越多安全性越高,加密速度越慢,分组密码中普遍使用的分组大小为64bit。
key size
密钥越长安全性越高,加密速度越慢,一般使用128bit的密钥或者更长。
number of rounds
轮数越多安全性越高,一般为16轮。
subkey generation
该算法越复杂安全性越高。
round function
轮函数越复杂安全性越高。
fast software en/decryption & ease of analysis
许多情况下,加密算法被嵌入到应用程序中,以避免硬件实现的麻烦,因此算法的执行速度很重要
Claude-Shannon与置换密码
混淆(confusion)和扩散(diffusion)
扩散是指明文的统计特征消散在密文中,这可以通过让每个明文数字尽可能地影响多个密文数字获得。
混淆则是尽可能使密文和加密密钥之间的统计关系变得更加复杂,以阻止攻击者发现密钥
数据加密标准——DES
雪崩效应
明文或者密钥的微小反应对结果产生巨大的影响
ECB
内容
将加密的数据分成若干组,每组的大小跟加密密钥长度相同;
然后每组都用相同的密钥加密
示意图
优势和不足
每次Key、明文、密文的长度都必须是64位;
数据块重复排序不需要检测;
相同的明文块(使用相同的密钥)产生相同的密文块,容易遭受字典攻击;
一个错误仅仅会对一个密文块产生影响
CBC
内容
加密算法的输入是上一个密文组和下一个明文组的异或,有初始向量
示意图
优势和不足
每次加密的密文长度为64位(8个字节);
当相同的明文使用相同的密钥和初始向量的时候CBC模式总是产生相同的密文;
密文块要依赖以前的操作结果,所以,密文块不能进行重新排列;
可以使用不同的初始化向量来避免相同的明文产生相同的密文,一定程度上抵抗字典攻击;
一个错误发生以后,当前和以后的密文都会被影响;
PCBC
内容
示意图
优势和不足
CFB
内容
加密函数的输入是b 位的移位寄存器,它的值为初始向量IV,加密函数输出最左边的s 位与明文的第一个分段P1 异或得到密文的第一个单元C1,然后将C1 发出去,接着移位寄存器左移s位,C1填入移位寄存器的最右边s 位。就这样,直到所有明文单元加密完。
示意图
优势和不足
每次加密的Pi和Ci不大于64位;
加密算法和解密算法相同,不能适用于公钥算法;
使用相同的密钥和初始向量的时候,相同明文使用CFB模式加密输出相同的密文;
可以使用不同的初始化变量使相同的明文产生不同的密文,防止字典攻击;
加密强度依赖于密钥长度;
加密块长度过小时,会增加循环的数量,导致开销增加;
加密块长度应时8位的整数倍(即字节为单位);
一旦某位数据出错,会影响目前和其后8个块的数据;
OFB
内容
用加密函数的输出填充移位寄存器,而CFB 使用密文填充移位寄存器。
示意图
优势和不足
与CFB类似,以下都是不同之处;
因为密文没有参与链操作,所以使得OFB模式更容易受到攻击;
不会进行错误传播,某位密文发生错误,只会影响该位对应的明文,而不会影响别的位;
不是自同步的,如果加密和解密两个操作失去同步,那么系统需要重新初始化;
每次重新同步时,应使用不同的初始向量。可以避免产生相同的比特流,避免”已知明文”攻击 ;