数据加密算法标准(Data Encryption Standard, DES)
1.设计思想
(1)初始和逆初始置换、置换P16次:把数据彻底打乱重排。
(2)选择置换E:数据彻底打乱重排;把32位输入扩展为48位。
(3)S盒:非线性变换(数据压缩),其他都是线性变换。所以保密的关键性是选择S盒。
解释:线性变换意味着可以将空间中的向量围绕零点进行旋转伸缩,但不能将其弯曲;非线性变换将空间进行了扭曲。
线性:满足齐次性,可加性( f(a+b)=f(a)+f(b),f(ka)=kf(a) ),反之非线性。
S盒的设计标准:
(1)非线性;
(2)任一输入位可以影响的输出位越多越好;
(3)当固定某一个位的输入时,我们希望S盒的4个输出位之间,其“0”和“1”个数之差越小越好。
缺点和不足:
A. 存在弱密钥和半弱密钥。
使子密钥全相同的密钥称为弱密钥,使子密钥中有部分相同的密钥成为半弱密钥。
B. 存在互补对称性。
2. 算法描述
分组长度:64bit
密钥长度:64bit,其中每8bit有一位奇偶校验位,因此有效密钥长度为56bit
(1)初始置换/逆置换(根据表中数据变换64bit明文的位置)
两个置换互逆!
(2)迭代变换
右半部分原封不动作为本轮输出的64bit数据的左半部分
轮函数F(E,S,P,XOR)作用于右半部分
首先经过选择扩展运算E,32bit–>48bit,记为E(A),之后和子密钥Kj(j表示第几轮)进行异或运算。将所得数据分为8组,每组6bit,记为B1到B8,之后利用S盒进行代换。
8个S盒如下:
对每个盒Si,6bit输入中第1bit和第6bit组成的二进制数确定Si的行,中间4位确定列。Si中行列位置的十进制数的二进制表示即为输出。
最后是置换运算P:
(3)子密钥的生成
首先64bit的密钥K用置换选择(P-1)去掉第8,16,24,32,40,48,56,64位作为校验位,之后重新排列。将得到的数据分为两部分(28bit)C0,D0。Ci=LSi(Ci-1), Di=LSi(Di-1), 将每轮56bit数据用置换选择(PC-2)去掉第9,18,22,25,35,38,43,54位,同时重排剩下的48bit数据,输出作为Ki。
LSi:循环左移1位(i=1,2,9,16时)或2位(其他情况)。
3.解密
解密使用和加密相同的算法,只是子密钥的使用次序相反。