Part 1 密码
第三章 对称密码(共享密钥密码)
一、比特的XOR运算
对“1”和“0”作用的运算,两数相同XOR结果是“0”,两数不同XOR结果是“1”.
二、一次性密码本
它的原理是,将明文与一串随机的比特序列进行XOR运算。注意:一次性密码本是无法破译的。
三、DES
首先,DES是一种16轮循环的Feistel网络
Feistel网络中的一轮:大概是这样式儿的
注意一轮的具体计算步骤为:
1)将输入的数据等分为左右两部分
2)将输入左侧的数据直接发送到输出左侧
3)将输入右侧数据发送到轮函数
4)轮函数根据左侧数据和子密钥(就是每一轮的密钥),计算出一串比特序列。
5)将上一步的比特序列与右侧数据进行XOR运算,并将结果作为加密后的右侧。
注意:因为这样运算,左侧并没有加密,因此在每两轮处理之间交换左右侧数据。
四、三重DES
三重DES是为了增强DES强度,将DES重复3次得到的一种密码算法:大概是这样式儿的
Plus:if 所有密钥一样,那结果与普通的DES等价。
if 密钥1 ,3 相同,而密钥2不同,这个三重DES 就称为 DES-EDE2。
if 密钥1,2,3 都不同,三重DES 称为 DES-EDE3。
五、AES的选定
end:Rijndael 的对称密码算法
它是一个多轮算法,每一轮分为SubBytes、ShiftRows、MixColumns 和 AddRoundKey 四步。DES使用 Feistel 网络作为其基础结构,而 Rijndael 使用了 SPN 结构。
首先,Rijndael 的分组长度和密钥长度可以分别以32比特为单位在128比特到256比特的范围内进行选择。不过在AES中,分组长度固定为128比特,密钥长度只有128、192、256比特。
SubBytes:
Rijndael 的输入分组为128比特,也就是16字节。SubBytes就是将16个字节的值 按照一张拥有256个值的替换表 逐个替换为另外字节的值。
ShiftRows:
将以4字节为单位的行按照一定的规则向左平移,且每一行平移的字节数是不同的。
MixColumns:
对一个4字节的值进行比特运算,将变为另外一个4字节值。
AddRoundKey:
最后将MixColumns的输出与轮密钥进行XOR(文章的第一大点)。