理解DES算法
首先 了解对称密码加密技术:采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。但是有时候密钥不用完全相同 只要相似也可以。因为用一个密钥可以推导出另一个。
传统密钥算法有:DES,IDEA,TDEA,RC5等
同时 DES还是分组加密。对称加密分为分组加密和序列密码。
分组密码,也叫块加密(block cyphers),一次加密明文中的一个块。是将明文按一定的位长分组,明文组经过加密运算得到密文组,密文组经过解密运算(加密运算的逆运算),还原成明文组。
序列密码,也叫流加密(stream cyphers),一次加密明文中的一个位。是指利用少量的密钥(制乱元素)通过某种复杂的运算(密码算法)产生大量的伪随机位流,用于对明文位流的加密。
解密是指用同样的密钥和密码算法及与加密相同的伪随机位流,用以还原明文位流。
下面来了解DES:
DES算法的主要过程:
那么首先 我们来看一下初始置换
这一部分 我们将密文按照固定的矩阵 进行位序的移动 这部分与密钥毫无关系
如上图 原本64位的58位 移动到了第一行第一列 原本的50位 移动到了一行二列
这一部分很明显是可逆的
之后我们把对来看一下密钥的操作
我们先去掉8个校验位(但是原本的序号肯定是不变的,从图中可以看出是去掉每个字节第八位)
然后再将56位换成两个28位
之后 这里的左移是二进制位运算的左移嗷
一共16轮 16轮不就生成了16个密钥嘛
两个28位左移比单纯56位左移 复杂性更高
之后
此时56位成为了48位 很多位数又没了
总的过程:
前边的这些操作都是移位 置换 没经过什么运算
现在乘机变换要真正进行加密了
经过扩展变换之后其实还有很多变换
乘积变换有点复杂 上边的可能看的有点晕 我就先大体说一下 我们首先是把初始置换(IP)的明文分成两部分 L0和R0
之后我们进行:
Li = Ri-1
Ri = Li-1 异或 f(Ri-1,Ki)
一共16次迭代变换 对应1<=n<=16 这里的f()函数 其中就包含了Rn-1先扩展变换(E盒变换)为48位 后与子密钥Ki异或运算 之后经过s盒压缩变换为32位 然后经过p盒32位的置换
这样应该就能懂了
那么现在讲讲扩展变换:
其实也就是变成了
扩展变换的结果与Ki进行二进制异或运算
得到的结果再经过s盒变换
大概的规则就是这个
我们举个例子 就能看懂了
之后就要经过P盒置换 从32位线性变换为32位 这就很简单了
这时候 f(Ri-1,Ki)的结果已经出来了 我们只需要把它和Li-1异或 就得到了Ri
经过16次运算 得到了L16和R16
好了 这时候我们再将L16和R16两部分 颠倒 合并为新的64位
也就是 新的64位 是R16和L16 这个能懂吧
然后对其执行一个最终的变换 IP-1 了
其实是IP的逆矩阵哦 要用到线性代数的知识
然后我们就得到了 明文M的加密形式C
现在再来讲讲解密 因为是对称密码 所以解密就简单多了 就是一个逆过程罢了
我们加密时16轮的迭代子密钥顺序是k1到k16
我们解密是从k16到k1
同时 产生子密钥的循环移位 是右移
之后我们就总结一下DES加密的数学模型吧:
解密的数学模型: