密码学中有一种加密方法叫做 One Time Pad ,翻译过来叫做“一次性密码本”。因为这种密码最早就是真的写在一个本子上传递的,所以有了这个名字。这是一种安全度最高的加密方法,需要通信双方事先去沟通一个一次性的和被加密信息长度相等或者更长的秘钥。
先来仔细看看什么是 One Time Pad 。
使用凯撒密文进行加密的时候,我们把信息的每一个字母都按照字母表移动相同的位数。移位数量可以取1到26的任意一个数。比如,我们想加密的信息是 ALICE ,这样其实总的密文的可能性也没有多少种,所以可以很容易用暴力搜索的形式找到信息。
但是使用 One Time Pad 的时候,每一个字母移动的位数是不同的,每一个字母的取值就有26种可能,这样可能生成的密文种类就是26的五次方,有一千多万种可能。这几个移动的位数组成的字符串,就是本次加密的秘钥,长度是跟密文一致的,或者说,它就是一个 One Time Pad 。
可以看到 One Time Pad 是非常安全的。
但是在互联网时代,人们看待信息不再是以字母为单位了,而是用0和1。下面看看如何用 One Time Pad 处理二进制形式的信息。
具体步骤是这样的。有一个若干二进制位的信息,我们需要一个跟它长度一样的秘钥。加密的时候,我们会认为信息就是一连串的二进制数,秘钥也是。加密的结果–密文,也是一样的,每一位都是对应的信息位和对应的秘钥位进行异或运算得到的结果。
异或是一种常见的逻辑运算。
One Time Pad 虽然是最强的加密方法,但是也有自己的局限性。
使用 One Time Pad 有两个最佳实践。第一,一个 One Time Pad 只用一次。第二,每个 One Time Pad 中的数据要保证真正的随机。
这意味着真正使用的时候,每次加密都需要重新生成并且再次发布给通信双方。互联网是一个不安全的环境,安全的发布 One Time Pad 其实是非常困难的,这就使得在很多的应用情形下是不能使用 One Time Pad 的。
最后总结一下,One Time Pad 是一种最强的加密方式。通信双方需要事先共享一个一次性的,和信息长度相同或者更长的秘钥。
Ref: