密码学(3)SPN与DES

0 阅读5分钟

分组密码与流密码

image.png

SPN 代换-置换网络

image.png 异或操作在两个相同长度的二进制位串之间逐位进行。对于单个位来说:

  • 如果两个位相同,结果为 0
  • 如果两个位不同,结果为 1

image.png

image.png

z0123456789ABCDEF
πS(z)E4D12FB83A6C5907

再令 πP定义如下:

z12345678910111213141516
πP(z)15913261014371115481216

image.png

image.png

image.png

image.png

image.png

DES

image.png

image.png

DES 参数与初始置换

原文翻译:

image.png

image.png

DES 的 f 函数

原文翻译:

image.png

image.png

对DES的理解(BV1KQ4y127AT)

DES(Data Encryption Standard)属于对称密码算法中的分组加密算法,分组加密它和流密码加密算法是相对应的。那顾名思义,流密码是指逐字节进行加密,也就是一个字节,一个字节进行加密。

而分组加密算法呢,它也叫快加密。它是将明文分成固定的一个字节块,然后对每个字节块分别进行加密,最后拼接在一起得到一个密文的过程。

DES加密算法就是将明文分为许多个64位的字节块 然后密钥是56比特的密钥,但其实它的这个种子密钥是64比特, 因为其中有八位是作为检验位不参与运算的。因此参与运算的只有56比特。

image.png 它的加密过程如图所示,主要是分为三步吧: 第一步是进行初始的ip置换,然后进行16轮的迭代的加密过程 最后进行最终的一个逆置换。初始置换和逆置换的原理是相同的,只是它使用的表不同。

image.png 比较复杂的过程就在于这个16轮的迭代,我们是将64比特的明文的数据分成了两部分l0 和r0 ,它就是单纯的左右两部分。 然后每部分都是32比特。 r0 是直接赋给了l1,而r1呢他则是需要将r0 和k1进行轮函数的运算之后 再和l0 异或 然后才能得到这个r1的值。之后每轮都是如此,以此类推 ——然后再进行一个逆置换,最后得到了这个64比特的一个密文。

这个密钥的生成呢,它其实是有k1到k16,16个子密钥参与这16轮的迭代运算。这个密钥的生成过程我们在最后一部分讲 。然后我们先看轮函数这边吧 ,因为我们刚才讲了r0 和l0 它都是32比特嘛,而我们的k1到k16都是48比特,我们刚才有说,虽然他参与有效运算的是56比特,但如何到这个48比特 我们之后在密钥生成的过程中再讲。我们现在只需要知道k1到k16,它都是16个48比特的子密钥 。

image.png r0本身是32比特,那如何和这个48比特的这个密钥进行一个运算 那就是在这个轮函数中 我们首先还是需要将r0 经过一个E扩展,将它32比特的数据变成48比特 然后48比特的数据再和48比特的这个子密钥k1 ,进行一个异或,这个结果呢再通过s盒进行压缩,将这48比特的数据再变为32比特的数据,这32比特的数据在经过一个P置换,这时候他还是32比特,它的数据位没有变。这个输出的结果就是这个轮函数的输出结果。他在和l0异或它就变成了r1

IP置换(初始置换)

Inital Permutation 这是初始置换和最终置换的逆置换的表,它们两个的原理相通 比如说我们看初始置换 他第一个数字是58 它就是表示将原始数据中的第58位数据换到现在的第一位 就是这样一个打乱的过程 这个50就是代表将原始数据第50位的数据放在现在的第二位 如右图所示

image.png

轮函数——e扩展置换

刚才没有说,他是为了将32位的输入变成48位的输出嘛. 那这个扩展呢 我们可以直接按照这个表来进行扩展 原理和那个置换的表其实是一样的 我们可以看一下这个图啊

image.png

image.png

我们这个扩展之后 我们不是说是生成了48比特嘛 然后就和我们的那个密钥进行一个异或.异或之后的结果 我们要再经过一个s盒的一个压缩的处理

轮函数——S盒压缩处理

首先是将48比特分成了八块六比特的数据 然后我们这个是需要根据一个八个六进四出的s盒进行压缩

p盒置换

和那个初始置换是一样的

逆置换我们就不讲了 就和我们的初始置换一样

密钥生成

image.png

image.png