单钥加密体制
DES算法
DES属于对称密码算法中的分组加密(块加密),和流密码相对应。DES算法将明文分为若干个64位块(不足补充),秘钥为56位(8位校验位)。DES算法流程图如下
接下来,进行DES算法关键步骤的逐步解析:
IP置换
IP置换和IP逆置换,还有后面提到的P置换逻辑都是一样的。例如下图IP置换矩阵的第一行第一列为58,含义即为将第58个元素位置换为第一个。置换完后密文长度不变,仍为64位。
E扩展
64位字段可以分为前32位和后32位,前32位不变,后32位进行E扩展置48位,具体扩展方法如下:
例如图中原本的32位字段为,将32位字段分为8组,每组前后各加两个比特,组成新的6×8=48位字段。新加的两位分别是前一组字段的最后一位和后一组字段的第一位,见下所示。
11010001 0011 0100原文本
011010 100010 100110 101001 E扩展文本
S盒压缩
S盒是精心设计的8个矩阵,是DES算法中混淆的关键部分,他的质量(随机性)很大程度影响DES的加密效果。
之后,我们要再将E扩展后的48位后半字段,通过S盒压缩为32位,具体压缩方法如下:
先将48位分为8组,每组6位。6位取出前两位和中间四位,拼成2进制数,再将2进制转化为十进制,即经过一系列操作,将6位数变为2个十进制数。将这两个十进制数当作横纵坐标,寻找S盒中对应的十进制数,再将这个十进制数用4位2进制表示。至此,我们将48位文本压缩为了32位。
(3,15)在S盒中对应的元素为13(查表得),之后转换为二进制1011,所以通过S盒我们将111111压缩为了1011。
P盒置换
P盒压缩和IP置换思路大致相似,例如第一行第一列元素为16,即将第16位置换到第一位,剩余以此类推。
秘钥生成
秘钥生成思路流程图如下:
如图中的流程,首先需要进行一次PC-1的选择置换,即去掉密钥中的校验位(8,16,...,64)。去掉8位校验位还剩下56位密钥,将56位分为C_0(前28位)和D_0(后28位),根据下表进行密钥的循环左移(如图中密钥表的计算逻辑)。得到的C_iD_i进行合并后,再进行一次PC-2的选择置换,将密钥流变为48位。
Feistel结构及证明
如图可见,只要密钥倒置就可以解密密文。数学证明如下:
加密过程是:明文m=LEol|REo,进行n轮迭代。
按下列规则计算LEn|REn,1sisn,轮函数为F
LE;=RE;-1
RE;=LE;-1F(RE;-1,K)
进行n轮迭代运算后,得LE_n和RE_n,输出密文C=REn||LEn
解密过程与加密过程采用相同的算法:密文分组C=RE,||LEn=LDol|RDo。
按下述规则计算LD,||RDn,1sisn,轮函数为F
LD;=RD;-1
RD;=LD;-1+F(RD;-1,Kn-i+1)进行n轮迭代运算后,得LD,|RD,,输出明文m=RDn LDn
下面即需要证明
m=LEol REo=RD, LDn,显然:LD;=RD;-1=LEn+1-i=REn-iRD; = LD;-1 F(RD;-1,Kn+1-i) 二
REn+1-i F(LEn+1-i,Kn+1-i)=LEn-i当i=0可得LEol|REo=RDn LDn,所以Feistel结构是可逆的。