先声明两个基本概念
代换 或 替换(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函数内部:
依次经过:
-
扩展置换(Expansion Permutation):将输入的32位数据扩展为48位。这个步骤的目的是引入更多的比特位,并增加数据的混淆性。
-
子密钥混合(Key Mixing):将48位的扩展数据与轮密钥进行异或运算。每一轮DES使用的子密钥都是从主密钥生成的。通过将扩展数据与轮密钥混合,增加了密钥的影响力,增强了密码算法的安全性。
-
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的一种置换。
4.P盒置换(Permutation Box):对经过S盒替换的数据进行固定的置换操作。这个步骤的目的是重新排列数据位,加强密码算法的混淆性和扩散性。
Key Schedule
子密钥K的生成方法:
标准的DES要求密钥为64bit,但是每8位中最后一位为奇偶校验位,不参与真正的加密。
pc--permutation choice,也是带<压缩属性>的p-box
经过pc1盒----舍弃奇偶校验位(共8bit,剩下56bit)并置换。
记56bit的左28bit为C0,右28bit为D0。C0,D0两部分独立进行循环左移,左移的位数根据当前的加密轮次不同。
文章来源:https://www.toymoban.com/news/detail-755915.html
合并为56bit再经过pc2盒,压缩置换(舍弃第9,18,22,25,35,38,43,54位),即可生成当前轮次的48bit子密钥。文章来源地址https://www.toymoban.com/news/detail-755915.html
到了这里,关于[密码学]DES的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!