一次性密码本是有维纳(G.S.Vernam)于1917年提出的,并获得专利,因此又称为密码(Vernam cipher)(该专利已经过有效期)。一次密码本无法破译这一特性是由香农(C.E.Shannon)于1949年通过数学方法加以证明的。一次性密码本是无条件安全的,在理论上是无法破译的。
之所以叫做一次性密码本,是因为加密所用的密钥是一次性的,即密钥只会使用一次,不会出现因为密钥泄露导致之前的加密内容被解密。
即使密钥被泄露了,也只会影响一次通信过程。
为什么没有被普遍使用
密钥配送 最大的问题在于密钥的配送。
我们来设想一下使用一次性密码本进行通信的场景,发送者Alice使用一次性密码本生成密文发送出去。发送的密文即便被窃听者Eve截获也没关系,因为一次性密码本是绝对无法破译的。
接收者Bob收到了Alice发来的密文。Bob要想进行节目,就必须使用和Alice进行加密时相同的密钥,因此Alice必须将密钥发送给Bob,且该密钥的长度和密文是相等的。但这样就产生了一个矛盾,如果能够有一种方法将密钥安全送出去,那么岂不是也可以用同样的方法来安全地发送明文了么?
密钥保存 一次性密文本中,密钥的长度必须和明文的长度相等,而且由于密钥保护着明文的机密性,因此必须妥善保存,不能被窃听者窃取。不过,如果能够有办法安全保护与明文一样长的密钥,那岂不是就有办法安全保存明文本身了么?
无法破译
虽然一次性密码本非常简单,但是一次性密码本是无法破译的,这个破译并不是指现有的计算能力不够,而是指即使拥有无穷大的计算能力也无法破译。
为什么呢?
假如你拿到了加密的结果,然后遍历等长的密钥进行暴力破J,最后你会生成原文,假设这个原文长度是128bit,那么就可以生成2的128次方个原文,即128bit长度的原文的所有组合排列。
即使这些组合里面出现了一些有意义的文字,但是你不能确定这些文字是不是就是原文,因为在所有的组合排列中可能生成多个有意义的文字。
所以这种解密是无意义的,就像是我知道了原文的长度,然后自己构造这个长度的原文。
缺陷
既然一次性密码本这么好,那么为什么我们在实际的工作中很少用到呢?
密钥太长
一次性密码本是用与原文等长的密钥做异或得到的,如果原文很大,那么相应的密钥也非常大。
无法重用密钥
每个密钥只用一次,即是缺点也是优点。意味着我们每次都要不停的更换密钥,增加了复杂性。
密钥的配送
因为密钥和原文以及密文都是等长的,目标端如果想解密就必须拿到密钥,如果能够机密的传输密钥给目标端,那为什么不直接将原文机密的传送给目标端呢?
密钥的保存
每次加密都需要换一个密钥,这意味着每一个明文都需要保存一个同样长度的密钥,如果明文已经可以很好的保存了,那何必多做一步加密呢?
虽然一次性密码本有这么多缺点,但是他给其他的加密算法以启发,于是产生了很多个变种,后面我们会介绍更多的加密算法
一次性密码系统在某些特定场景下可能是有效的,但在大多数实际应用中,更常见的是使用其他加密算法,如对称加密算法(如AES)或非对称加密算法(如RSA),以提供更高的安全性和更方便的消息传输