据说国家之间的热线电话用的就是一次性密码本,但是是如何避免上述 5 点缺点的呢?国家会派专门的特工,用人肉的方式进行押送密钥的任务,直接把密钥交到对方的手中 。
可见一次性密码本虽然无法破译,但是想要用它进行加密,“成本”非常高 。如此可见一次性密码本在日常使用中基本没有任何使用价值 。不过一次性密码本的思路孕育了 流密码(stream cipher) 。流密码使用的不是真正的随机比特序列,而是伪随机数生成器产生的二进制比特序列 。流密码虽然不是无法破译的,但只要使用高性能的伪随机数生成器就能够构建出强度较高的密码系统 。流密码在下面章节会详细分析 。
三、对称加密算法 DES
DES (Data Encryption Standard) 是 1977 年美国联邦信息处理标准(FIPS)中所采用的一种对称密码(FIPS 46-3) 。DES 一直以来被美国以及其他国家的政府和银行所使用 。
1997 年 DES Challenge I 比赛中用了 96 天破解了 DES 密钥,1998 年的 DES Challenge II-1 比赛中用了 41 天就破解了密钥 。1998 年的 DES Challenge II-2 比赛中用了 56 个小时,1999 年的 DES Challenge III 比赛中只用了 22 小时 15 分钟 。目前来说,DES 已经不再安全了 。除了用来解密以前老的 DES 密文以外,不再使用 DES 进行加密了 。
(一) 加密
DES 是一种把 64 位明文加密成 64 位密文的对称加密算法 。它的密钥长度为 64 比特,但是除去每 7 个二进制位会设置一个用于错误检测的位以外,实际上密钥为 56 比特 。DES 会以 64 个二进制为一个 分组 进行加密 。以分组为单位进行处理的密码算法成为 分组密码 ,DES 为分组密码的一种 。

文章插图
DES 只能一次性加密 64 位明文,如果明文超过了 64 位,就要进行分组加密 。反复迭代,迭代的方式成为 模式 。关于模式更加具体的讨论见下一章节 。
DES 加密的基本结构是 Feistel 网络、Feistel 结构、Feistel 密码 ,这个结构不仅仅用在 DES 中,还用在其他的加密算法中 。
在 Feistel 网络中,加密的各个步骤称为 轮(round) ,整个加密过程就是若干次轮的循环 。DES 是一种 16 轮循环的 Feistel 网络 。

文章插图
上图展示的是一次加密 64 位明文的过程 。每次加密所用的密钥都不同,由于它只在本轮使用,是一个局部密钥,所以也被称为子密钥 。
每轮的操作步骤如下:
- 将输入的 64 位分为左右两个 32 位 。
- 将输入右侧的 32 位直接向下落到输出的右侧 32 位 。
- 将输入右侧作为轮函数的入参输入 。
- 轮函数根据输入右侧的 32 位和 子密钥两个入参,生成一串看上去随机的比特序列输出 。
- 将轮函数的输出和输入左侧 32 位进行异或运算,结果向下落到输出的左侧 32 位 。

文章插图
上图是一个 3 轮的 Feistel 网络 。3 轮网络有 3 个子密钥和 3 个轮函数,中间有 2 次左右对调的过程 。注意:n 轮 Feistel 网络只交换 n-1 次,最后一次不用交换。
(二) 解密
DES 的解密过程和加密过程是相反的 。解密也是 64 位分组解密 。解密密钥实质也是 56 位 。

文章插图
再来聊聊 Feistel 网络的解密过程 。
由于 XOR 具有交换律的特性,只要再次做一次异或运算,就能还原明文 。

文章插图
从上面这个图中,可以看出 Feistel 网络的加密和解密步骤完全相同 。
同样也以 3 轮 Feistel 网络的解密过程来举例 。

文章插图
解密步骤也和加密步骤完全相同的,只不过子密钥的顺序是逆序的 。因为要和之前加密的顺序配合在一起 。假设是 n 轮网络,子密钥 1 - n,要想还原成明文,异或的顺序要逆序反过来,这样才能利用 a ⊕ a = 0,异或的结合律,还原明文 。
(三) 优点
Feistel 网络的特点
- 加密的时候无论使用任何函数作为轮函数都可以正确的解密,无须担心无法解密 。就算轮函数输出的结果无法逆向计算出输入的值也无须担心 。Feistel 网络把加密算法中核心的加密本质封装成了这个轮函数,设计算法的人把所有的心思放在把轮函数设计的尽量负责即可 。
推荐阅读
- 华为WLAN无线漫游配置
- 对称密码——DES加密算法
- RSA加密原理&密码学&HASH
- 简述对称加密和非对称加密
- 周杰伦|周杰伦300多万NFT被黑客盗走 上链加密艺术就这?
- 在电脑上直接生成MD5值
- 接口数据使用了RSA加密和签名?
- shell脚本明文不安全,这样做,两步安全加密
- 对称加密算法之王 AES
- 通信安全:哈希、加密、证书、签名、密钥协商、ECDH、TLS、DTLS
