S-DES
使用10位密钥处理8位明文和密文(块密码)
整体流程如下:
其中,密钥处理部分的具体情况为:
由一个主密钥生成出两个子密钥(真实场景会生成更大量的子密钥)
其中IP为初始置换,fk为依赖于密钥的复杂函数,SW为简单置换(12345678→56781234)
fk的具体结构如下:
其中E/P为展开置换,加号为异或
S0、S1为S盒,4位入2位出,算法为,输入P1P2P3P4,取出第(P1,P4)行、第(P2,P3)列的数作为输出两位二进制数,其中(P1,P4) (P2,P3)为两位二进制数
讨论 fk函数的关键:使用fk(K1)→SW→fk(K2)和fk(K2)→SW→fk(K1)是互逆的
事实上,这是因为fk本身是自逆的
Feistel密码结构
乘积密码:交替使用不同种类的加密方式,如置换和代换
这源于Shannon提出的这两个概念:
- 扩散:消除明文的统计特征
- 混淆:消除密文和密钥间的统计关系
Feistel密码结构:与S-DES类似,每个模块先将输入分为左右两部分,然后输出左部为输入右部,输出右部为输入左部和F(输入右部)的异或,即
F称为轮函数,依赖与密钥,每一轮使用一个由主密钥生成出的子密钥
S-DES使用首尾添加置换的2轮的Feistel密码结构
DES算法
DES是56位密钥(含奇偶校验为64位)、64位分组的Feistel密码结构