[密码学]DES

2023-12-13 03:06:12

先声明两个基本概念

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

abc-->def

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

abc-->bac

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

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

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

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

feistel结构的可逆性:

F函数内部:

依次经过:

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

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

  3. S盒替换(Substitution Box):将48位数据分为8个6位的块,然后对每个块进行非线性替换,输出8个4位的块。DES使用了8个S盒,每个S盒都是一个4x16的代换表,且存在多个值映射到一个相同值的情况,使得逆向分析更加困难。S盒的作用是混淆数据,增加密码算法的复杂性和非线性性。S盒是DES中唯一的非线性元件,也是算法强度核心。其设计准则考虑了对抗差分攻击,线性攻击。

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

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

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

子密钥K的生成方法:

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

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

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

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

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

文章来源:https://blog.csdn.net/amber_o0k/article/details/134699883
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。