[密码学]DES

先声明两个基本概念

代换(substitution),用别的元素代替当前元素。des的s-box遵循这一设计。

abc-->def

置换(permutation),只改变元素的排列顺序。des的p-box遵循这一设计。

abc-->bac

**本文并未介绍初始置换(Initial Permutation)和初始置换的逆置换。这两个置换并不提供任何密码学意义。

DES最核心的算法就是feistel结构的16轮加密 。

[密码学]DES_第1张图片

该结构以工作在IBM的德国密码研究员Horst Feistel的名字命名。其中涉及轮函数F,和每一轮的子密钥K。

明文数据分成左右各32bit,记为LE,RE。

feistel结构的可逆性:

[密码学]DES_第2张图片

F函数内部:

[密码学]DES_第3张图片

依次经过:

  1. 扩展置换(Expansion Permutation):将输入的32位数据扩展为48位。这个步骤的目的是引入更多的比特位,并增加数据的混淆性。

  2. 子密钥混合(Key Mixing):将48位的扩展数据与轮密钥进行异或运算。每一轮DES使用的子密钥都是从主密钥生成的。通过将扩展数据与轮密钥混合,增加了密钥的影响力,增强了密码算法的安全性。

  3. S盒替换(Substitution Box):8个不同的s盒(s1-s8),每个盒将6bit数据进行非线性替换,输出4位bit数据。S盒的作用是混淆数据,增加密码算法的复杂性和非线性性。S盒是DES中唯一的非线性元件,也是算法强度核心。其设计准则考虑了对抗差分攻击,线性攻击。

**线性:F(x1 xor x2)=F(x1) xor F(x2),xor为异或。

**此处以s1为例,盒内每一行是对0-15的一种置换。

[密码学]DES_第4张图片

        4.P盒置换(Permutation Box):对经过S盒替换的数据进行固定的置换操作。这个步骤的目的是重新排列数据位,加强密码算法的混淆性和扩散性。

子密钥K的生成方法:

标准的DES要求密钥为64bit,但是每8位中最后一位为奇偶校验位,不参与真正的加密。

[密码学]DES_第5张图片

pc--permutation choice,也是带<压缩属性>的p-box

经过pc1盒----舍弃奇偶校验位(共8bit,剩下56bit)并置换。

记56bit的左28bit为C0,右28bit为D0。C0,D0两部分独立进行循环左移,左移的位数根据当前的加密轮次不同。

[密码学]DES_第6张图片

合并为56bit再经过pc2盒,压缩置换(舍弃第9,18,22,25,35,38,43,54位),即可生成当前轮次的48bit子密钥。

你可能感兴趣的:(密码学,des)