非常好的密码学系列视频导论 自行扶梯
本文介绍DES 、3DES 、AES算法,发现密码学这东西的套路是一环一环的,粗略的回顾一下费斯特(feistel cipher)加密公式,加密过程:
m=(L0,R0)
For each round : i=1,2,3,4…..n
Li=Ri-1
Ri=Li-1⊕Functions(Ri-1,Ki )
进过n轮迭代之后,得出
c=(Ln,Rn)
k指的是subkey ,解密过程:
i=n,n-1,n-2….1
Ri-1 = Li
Li-1 = Ri ⊕ Functions (Ri-1,Ki )
把上一篇密码学后面三个小章节回顾一下,好了,开始写一篇关于对称密码学的
stream cipher
block cipher
feistel cipher
对称加密简介
一句话,加密解密使用同一把密钥,其他百度。
#### DES加密 Data Encryption Standard,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准,至今暴力破解仍然是对 DES 最有效的攻击手法。 > 有一段撕逼情节,主角是美国国家标准局(National Bureau of standards )和美国国家安全局(National Security Agency)。DES 雏形是 IBM 提出,经过 NSA 的修改后成为如今的 DES 。DES 属于block cipher
区块大小是 64 bit
key 的长度是 56 bit
加密轮数 16轮
每轮的 key 长度是 48 bit
DES 的核心安全保障在于 Substitution-box 操作,也就是常说的 S 盒。IBM 的提案里面的 key 是128 bit ,经过 NSA 修改了 S 盒之后,就变成了 56 bit 。
是的,Key 变短了,那么安全性会变化么?还有就是 NSA 改了之后,会不会有后门?密码学中规定,算法的流程和算法过程需要对全部人公开。
DES 类似 Feistel cipher 架构,算法操作流程大概是这样的:
DES 属于block cipher,先把数据等分成左边和右边,这里先假设数据不需要填充,刚刚好是 64 bit 的大小,那么会有:
64 bit = 32 bit + 32 bit = L0 + R0
先看看简单的左半边,直接就是 : Li = Ri-1,
右半边是:
Ri = Li-1 ⊕ Functions (Ri-1,Ki ) ,简单说明就是先经过从32 bit 扩充到 48 bit,然后做一个⊕的运算,得出的结果依然是 48 bit,此时有八组的S-box,完成之后进入P-box,最终出来的是32 bit的数据。
刚刚需要异或运算的情况,是这样:
key 先做简单的切割转换,压缩之后的结果参与运算,同时,key 会继续参加一下次的迭代运算。
好的,以上S-box、P-box、key的压缩等等所有的流程都是公开的,S-box 和 P-box 其实只是做重新排列,S-box的表在网上可以查到。原本 6X8=48bit 的数据,经过 S-box 之前变成了 4X8=32 bit ,令人佩服的是,S-box的设计真的很巧妙,下面是八组 S-box 中的 S1 :
标准一点的图示就是这样的:
Triple DES
Triple DES 也叫做 3DES,由于计算机性能的发展,DES原本56 bit 的 key 总不能一直用下去,虽然至今没有出现什么大问题。
Q1 :
Triple DES的Key长度是 112 bit 还是 168 bit ? 没错,Triple DES 只需要两把Key做运算,也就是112 bit
我们来做一次高中的数学证明题,已知:
对称加密算法中,加密和解密的Key是一样,则存在推论一:
m = Dk (Ek(m))
c = Ek (Dk(c))
根据对称加密算法的性质,可知推论二:
m ≠ Dk2 (Ek1(m))
c ≠ Ek2 (Dk1(c))
假设Triple DES 使用了三把不同的Key,就会有:
由推论二得知,把Ek3替换成Ek1,并不影响加密效果
所以Triple DES 完全可以只用两把Key就可实现加密,好处在于减少计算量,降低协商密钥的难度,而且向下兼容原本的 DES,当一端使用 DES,另一端使用 Triple DES 的时候,只需要这样:
Q2 :
既然只用了两把key,为什么不叫 Double DES
假设我们就用了Double DES ,那么就会存在下面两个公式:
c = Ek2 (Ek1(m))
m = Dk1 (Dk2(c))
如果上面两个公式,采用暴力破解的话,需要尝试 2112次,基于对称加密算法的性质,我们的公式可以变成这样:
Dk2(c) = Ek1(m)
转换之后的公式,暴力破解就变成了需要尝试256次,和 DES 没有区别。
Q3 :
Triple DES 怎么就解决了 Double DES 的问题?
同样的,左边的两条公式可以转换成右边的两条公式,且上文 Q1 已经证明,key3 可以当作是 Key1,所以转换之后,等式依然成立。此时暴力破解需要尝试的次数为2112次
时代在发展,AES 不再使用 Feistel cipher 架构,不再是仅对分区后的半边做运算,AES 的 key 可以是 128 、 192 、256 bit ,block size 是 128 bit ,迭代会执行 10-14 次,这个取决于 key 的长度是多少。 AES 的每一轮会有四个动作:SubBytes、ShiftRows、MixColumns、AddRoundKey。
SubBytes
类似DES的S-box,代替法,非线性的,但是内在数学基础让它可以反推算出原本的值,这一步是整个AES算法里面最核心的技术保证。把128 bit 的 block 变成了 4*4 字节大小。ShiftRows、MixColumns
做扩散(Diffusion)和混淆(Confusion)的操作。扩散保证了明文和密文之间强联系性,密文小小的变化,都会导致明文结果出现很大的不同,就是下一篇文章会提到Hash函数的雪崩性;混淆提供的是密文和密钥的弱关联性,使得无法通过分析大量密文得出明文。
3.AddRoundKey
把上三轮的操作加在一起。
2018年4月29日修改:
“混淆提供的是密文和明文的弱关联性”中存在错误,应该是密文和密钥的弱关联性。