略
数据加密标准(Data Encryption Standard,DES):是使用最广泛的对称密码,尽管注定要被高级加密标准(Advanced Encryption Standard,AES)取代,但仍为极其重要的算法。
我们先讨论对称分组密码原理,然后介绍DES。
分组密码原理
事实上,现在使用的大多数对称分组加密算法基于Feistel 分组密码结构。
1.1 流密码与分组密码
1.2 分组密码
加密是可逆的,一个明文对应唯一一个密文,称为为可逆变换或非奇异变换。在这种情况下,对于有n组的密文,共有2^n种情况(n=2时,00,01,10,11),不同变换数为(2^n)!。
这个密文本身就是密钥,且规模问题,Feistel提出对理想分组密码体制的一种近似体制。
xi是明文分组中的4位二进制数,yi是密文分组中的4位二进制数。kij是“密钥“。
1.3 Feistel密码
使用乘积密码的概念来逼近理想分组密码。
-乘积密码:依次使用两个或两个以上的基本密码,所得结果的密码强度强于所有单个密码的强度。
Feistel建议使用交替使用代替和置换的密码。
-代替:每个明文元素(组)被唯一的替换为相应的密文元素(组) 。
-置换:明文元素的序列被替换为该序列的一个置换(改变顺序)。
两个概念:混淆和扩散。
扩散是使明文与密文之间的统计关系变得复杂,使攻击者难以通过统计知识来得到密钥。
混淆是使密文和密钥之间的统计关系变得复杂,使攻击者难以通过统计知识来得到密钥。
Feistel密码结构
数据加密标准(Data Encryption Standard,DES)
采用64位分组长度,56位密钥长度(其余8位用于奇偶校验或其它)。
除去首位置换,其它与Feistel密码结构相同。
剩余部分建议看书,我还没太理解。。。
1)首先利用初始置换表进行初始置换;
2)然后将64位组分为L,R两部分;
3)因为轮密钥Ki长为48位而R长为32位,所以要利用扩展置换表对R进行扩展;
4)与Ki异或;
5)所得48位结果通过替代函数转换为32位输出;
6)利用置换函数表进行最后置换,输出。
这里说一下替换函数。
DES中S盒有自己的定义,如Sk的i行j列是什么。
S盒的作用是实现非线性。
-密钥产生
64位密钥,前56位分为两个28位C,D,C,D分别左移,移位后的值通过置换选择产生48位输出。