密码学之分组密码算法

密码学之分组密码算法

简介

​ 分组密码算法(Block Cipher Algorithm)是将输入数据划分成固定长度的组进行加密和解密的一类对称密码算法。其安全性主要以来于密钥,通信双方使用相同的密钥加密和解密。其优势有速度快,易于标准化和便于软硬件实现等特点。

​ 下标集:

₀ ₁ ₂ ₃ ₄ ₅ ₆ ₇ ₈ ₉ ⁻ ¹ ₋ ₖ

DES加密算法

DES简介

​ 于1977年公布的第一个被广泛应用的商用数据加密算法,在抵抗了二十余年的密码分析后,其安全性已无法得到保障。所以在1998年12月以后就不再使用DES加密算法。但是其衍生的三重DES加密算法目前还有其应用场景。

加密过程

算法总览

​ DES加密算法就如下图所示。

​ 其输入为64位(bit)的明文,使用56位(bit)的密钥,但是附加了8位奇偶校验位(位于8,16,...,64位)组合成64位密钥。在64位密钥的控制下,最终产生了64(bit)的密文

​ 在下图中X=X₁X₂X₃...X₆₄即为输入明文,在经过初始转换IP的换位处理后,得到一个乱序的明文组,并将其分为L₀R₀两部分,每部分各32位。而K₁K₂...K₁₆则是生成由初始密钥生成的轮密钥,长度有48位

​ 其次进行如下图所示与密钥有关的16轮迭代变换对R₀在进行子密钥K₁控制下的f变换,其得到的结果与L₀作逐位异或后,作为下一轮的R₁,而R₀则作为下一轮的L₁。在经过16轮如上步骤,最后经过逆初始置换P⁻¹处理后得到密文Y=Y₁Y₂Y₃...Y₆₄

初始置换IP与逆初始置换IP⁻¹

​ IP操作是对原明文的位次顺序进行打乱,而逆初始置换IP⁻¹是IP操作的一个逆操作,其目的是为了撤销之前的初始置换操作。其实这两种操作对密码方面的作用并不大。

​ 其具体操作正如表格中所示,在如下表格中依次填入该顺序位次下的bit位,最终组成新的位次顺序。如第一位的的内容即为原明文中第58位处的内容。

轮密钥的产生

​ 初始密钥K在经过选择置换PC_1后同样分为两个部分C₀D₀,每部分各28位(bit),该选择置换实际是在除去了奇偶校验位的置换。随后分别对C₀D₀进行循坏移位操作LSᵢ而LSᵢ到底循坏左移几位,取决于i的值,i=1,2,9和16时移动一个位置,否则移动两位。

Kᵢ = PC_2(CᵢDᵢ),而子密钥Kᵢ则是对CᵢDᵢ进行固定置换PC_2后得到,置换PC_2就是真正的选择函数了。只会选出其中的48位,所以得到的子密钥是48位的。

​ 在经过16轮的迭代,就可以生成16组子密钥。至i=16时,刚好左旋了28比特,所以C₀=C₁₆且D₀=D₁₆。

⭐⭐⭐加密函数f

​ 加密函数f是整个DES算法的核心,是其中最重要的部分,也是其安全性的主要体现。

​ 其过程如下所示,第一个输入是长度为32位的比特串Rᵢ₋₁,在经过位选择函数E的次序置换后,与第二个输入48位的比特串Kᵢ按模2加运算得到P,即P=Kᵢ+Rᵢ₋₁,将得到的结果写成连续的8个6比特串,再对每个6比特串使用S盒输出,经S盒输出后6比特串变为4比特串,组合为32位比特串再经过置换运算P,就是得到的结果。

​ 8个6比特串,每个比特串都会对应一个S盒,一共有八个S盒,S盒是整个DES算法中唯一的非线性部件,当然也是整个算法的安全性所在。

​ 那么这个s盒是如何使用的呢,我们举个例子,加入S₁输入的6比特串为011001,设为b₀b₁b₂b₃b₄b₅,所以行选为01(第一个和第六个字符b₀b₅),也就是1,列选为1100(第二三四五个字符b₁b₂b₃b₄),也就是12。查找S盒中的S₁

​ 结果为9,转换为二进制1001,也就得到了我们的结果。

也就是说,对于输入b₀b₁b₂b₃b₄b₅,b₀b₅作为行值,b₁b₂b₃b₄作为列值

解密过程

​ DES的解密过程和加密过程大致相同,只不过在16次迭代中使用子密钥的次序正好相反。第一次就是使用子密钥K₁₆

三重DES

​ 当DES的密钥长度已被证明已经不能满足当前安全的要求,但为了充分利用DES软硬件资源,人们开始对DES提出各种改进措施。一种简单方案就是使用多重DES。

​ 多重DES就是使用多个密钥利用DES对明文进行多次加密。采纳较多的是三重DES。

​ 假设k₁k₂k₃是3个长度为56bit的密钥,明文给定为x,则密文y为


y = DESₖ₃(DESₖ₂⁻¹(DESₖ₁(x)))

​ 加入密文为y,解密出x为


x = DESₖ₁⁻¹(DESₖ₂(DESₖ₃⁻¹(y)))

posted @ 2022-02-08 17:16  三木森林  阅读(1160)  评论(0编辑  收藏  举报