对称密码 (共享密钥密码)
——用相同的密钥进行加密和解密
此次主要介绍比特序列运算和XOR(异或)运算。这两种运算在计算机数据处理中经常出现,因此大家应该在此属性他们。
- 一次性密码本 (绝对无法破解的密码,这一点已经得到证明)
- DES
- 三重DES
- AES
- 其他一些密码算法
一次性密码本
一次性密码本是一种非常简单,它的原理是“将明文与一串随机的比特序列进行XOR运算”。如果将硬币的证明设为0,反面设为1,则通过不断掷硬币就能产生这样一串随机的比特序列。
-
加密
-
解密
正如上面所讲到的那样,一次性密码本是一种非常简单的密码,如此简单的密码居然无法破译,这真是让人匪夷所思。这里说的无法破译,并不是指在现实的时间内难以破译,而是指即便拥有一种运算能力无穷大的计算机,可以在一瞬间遍历任意大小的密钥空间,也依然无法破解。
我们假设对一次性密码本的密文进行尝试进行暴力破解,那么总有一天我们会尝试到和加密时相同的密钥,也就能解密出明文midnight,这是毋庸置疑的事实,然而,即便我们解密出midnight这个字符串,我们也无法判断它是否是正确的明文。
这是因为在对一次性密码本尝试解密的过程中,所有的64比特的排列组合都会出现,这其中包含像aaaaaaaa,ZZZZZZZZ这样的规则字符串,也会包含midnight,onenight等英文单词,还会包含其他看不懂的组合,所以,我们无法判断出其中哪一个才是正确的明文。
所谓玻璃破解,就是按顺序将所有的密钥都尝试一遍,并判断得到的是不是正确的明文的方法。然后在一次性密码本中,由于我们无法判断得到明文是不是正确的明文,因此一次性密码本是无法破译的。
发明人
一次性密码本是有维纳(G.S.Vernam)于1917年提出的,并获得专利,因此又称为密码(Vernam cipher)(该专利已经过有效期)。一次密码本无法破译这一特性是由香农(C.E.Shannon)于1949年通过数学方法加以证明的。一次性密码本是无条件安全的,在理论上是无法破译的。
为什么没有被普遍使用
密钥配送
最大的问题在于密钥的配送。
我们来设想一下使用一次性密码本进行通信的场景,发送者Alice使用一次性密码本生成密文发送出去。发送的密文即便被窃听者Eve截获也没关系,因为一次性密码本是绝对无法破译的。
接收者Bob收到了Alice发来的密文。Bob要想进行节目,就必须使用和Alice进行加密时相同的密钥,因此Alice必须将密钥发送给Bob,且该密钥的长度和密文是相等的。但这样就产生了一个矛盾,如果能够有一种方法将密钥安全送出去,那么岂不是也可以用同样的方法来安全地发送明文了么?
密钥保存
一次性密文本中,密钥的长度必须和明文的长度相等,而且由于密钥保护着明文的机密性,因此必须妥善保存,不能被窃听者窃取。不过,如果能够有办法安全保护与明文一样长的密钥,那岂不是就有办法安全保存明文本身了么?
密钥的重用
在一次性密码本中绝对补鞥呢用重用过去用过的随机比特序列,一次性密码本中的“一次性”由此而来。这是因为作为密钥的比特序列一旦泄露,过去所有的机密通信内容将全部被解密。
密钥的同步
一次性密码本中还会产生发送者与接收者之间的密钥同步问题。当明文很长时,一次性密码本的密钥也会跟着变长。如果明文是一个大小为100MB的文件,则密钥的大小也一定是100MB。而且在通信过程中,发送者和接收者的密钥的比特序列不允许有任何错位,否则错位后的所有信息都无法解密。
密钥的生成
一次性密码本中,需要生成大量的随机数。这里的随机数并不是通过计算机程序生成的伪随机数,而必须是无重现性的真正随机数。
综上所述,一次性密码本是一种几乎没有实用的密码。但是,一次性密码本的思路却孕育出了流密码 。流密码使用的不是真正的随机比特序列,而是伪随机数生成器产生的比特序列。流密码虽然不是无法破译的,但只要使用高性能的伪随机数生成器,就能够构建出较高强度的密码系统,后续会继续介绍。
该系列的主要内容来自《图解密码技术第三版》
我只是知识的搬运工
文章中的插图来源于原著