一次性密码本
一次性密码本即Vernam Cipher,是由Gilbert Vernam在1917年,开发的一种加密算法。是一种通过在文本的二进制级别上进行工作来对纯文本进行加密的密码技术。之所以叫做一次性密码本,是因为加密所用的密钥是一次性的,即密钥只会使用一次,不会出现因为密钥泄露导致之前的加密内容被解密。即使密钥不小心被泄露,也只会影响一次通信过程。
加密
众所周知,任何信息在计算机内部都是由0,1两个数字保存,在进行传输时需要将传输的信息转化为对应二进制码传输,例如,传输文本消息,就需要利用特定的编码方式编码,比如常用的ASCII,Unicode等。
一次性密码本的加密方式非常简单,就是将明文(待传信息的编码)和一串随机生成的二进制码进行XOR(异或)运算。
1、将明文编码,即转换为二进制。
2、随机生成和明文二进制位数相同的密钥。
3、将明文和密钥的二进制进行XOR操作,生成密文。
解密
解密过程依靠的是XOR操作的自反性,先简单介绍一下异或操作,如果异或的两个bit相同结果为0,异或的两个bit不同结果为1。例如:
0 XOR 0 = 0
0 XOR 1 = 1
1 XOR 0 = 1
1 XOR 1 = 0
异或还有一个非常重要的性质:自反性,a XOR b = c,c XOR b = a即对同一数进行两次异或结果将回到最初的状态。
由此,通过明文和密钥异或得到的密文,再通过将密文和密钥再次异或操作得到明文。以此实现一次性密码本的解密过程。
绝对无法破译
虽然一次性密码本非常简单,但是一次性密码本是绝对无法破解的,这个破解并不是指现有的计算能力不够,而是指即使拥有无穷大的计算能力也无法破解。
假设我们拿到了密文并进行暴力破解,也就是将所有顺序的密钥尝试一遍,假设密文长度是32bit,那么我们将得到232数量的明文,那么我们怎么判断哪一个明文是正确的呢?显然我们无法判断哪一个是正确的明文,因为在所有的组合排列中可能生成多个有意义的文字。所以这种解密是无意义的,就像是我知道了原文的长度,然后自己构造这个长度的原文。因此一次性密码本是无法破译的。
缺点
既然一次性密码本无法破解,那为什么现实中一次性密码本没有被使用呢?
1、密钥配送问题
密钥和原文以及密文都是等长的,目标端如果想解密就必须拿到密钥,如果能有一种方法将密钥安全地发送出去,那么岂不是也可以用同样的方法来安全发送明文吗?
2、密钥保存问题
如果有办法安全保存与明文一样长的密钥,那不是也有办法安全保存明文本身吗?也就是说,从一开始我们根本就不需要密码。
3、密钥的重用
在一次性密码本中绝对不能重用过去用过的随机比特序列,一次性密码本中的“一次性”也正是由此而来。这是因为作为密钥的比特序列一旦泄密,过去所有的机密通信内容将全部被解密。每个密钥只用一次,这即是缺点也是优点。意味着我们每次都要不停的更换密钥,增加了复杂性。
4、密钥的同步
当明文很长时,一次性密码本也会跟着变长。如果明文是一个大小为100MB的文件,则密钥的大小也一定是100MB。而且在通信过程中,发送者和接收者的密钥的比特序列不允许任何错位,否则错位的比特后的所有信息将无法解密。
5、密钥的生成
在一次性密码本中,需要生成大量的随机数。这里的随机数并不是通过计算机程序生成的伪随机数,而必须是无重复性的真正随机数。
最后,虽然一次性密码本无法在现实中使用,但是它为很多其他的加密算法以启发,由此产生了很多个变种。
————————————————
版权声明:本文为CSDN博主「Acx7」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。