漫游对称加密算法


漫游对称加密算法

文章插图

一、引子
在引出对称加密之前,有必要先介绍一种位运算,XOR 。XOR 的全称是 exclusive or,中文翻译是异或 。
XOR 可以看成是“两个数相同,异或为 0,不同则异或为 1” 。
异或也叫半加运算,其运算法则相当于不带进位的二进制加法:二进制下用1表示真,0表示假,则异或的运算法则为:
这些法则与加法是相同的,只是不带进位,所以异或常被认作不进位加法 。由异或的这种特点,也就引出了它的一个常用特性, 两个相同的数进行 XOR 运算的结果一定为 0  。
对应的,我们也可以得到如下的运算法则:
上述这几条法则推导过程就不赘述了,相信读者都能明白 。
异或的结合律可以用来做简单的对称加密 。
试想,如果把异或数设置成一个完全随机的二进制序列,那么被异或数和它进行一次异或运算以后,结果如同“密文”一样 。如果窃听者不知道异或数是什么,很难短时间内解出原消息来 。
消息接收者拿到密文以后,把密文再和异或数进行一起异或运算,就能拿到原文了 。这个性质就是异或的结合律 。
二、一次性加密本
只要通过暴力破解,对密钥空间进行遍历,密文总有一天一定能被破译 。只不过看密钥空间有多大,需要花费的时间有多长 。但是有一种加密方法却是被证明永远都无法被破解的,即便是暴力遍历了所有密钥空间,依旧无法被破解 。
笔者第一次见到这个加密方法的时候,觉得非常神奇,还有这么强大的加密方法,那加密过程应该非常复杂,数学证明也应该非常完备吧 。结果看到它的原理以后,发现并非如此 。一次性密码本的加密方法非常简单,只用了上一章提到的 XOR 异或运算 。
(一) 加密
一次性密码本加密,举个例子,假设要加密的原文是 midnight 。
漫游对称加密算法

文章插图
 
密钥为一个随机的二进制流 。一次性密码本加密的过程,是把明文和密钥进行一次异或计算 。
漫游对称加密算法

文章插图
 
(二) 解密
一次性密码本的解密过程是把密文和密钥进行一次异或计算,得到原文明文 。
漫游对称加密算法

文章插图
 
看完这个加密解密过程,读者肯定质疑这种方式很容易被破解啊,64 位随机的二进制流暴力遍历它的密钥空间,一定能试出原文是什么 。
那么现在就可以解开谜底了 。确实用暴力破解能遍历所有密钥空间,假设有一个超级量子计算机可以一秒遍历完 2^64^ 这么大的密钥空间,但是依旧没法破译一次性密码本 。它的“神奇”之处在于,你在不断尝试的过程中,会尝试出很多种情况,比如可能得到 abcdefg、aaaaa、plus、mine 这些原文,但是你无法判断此时你是否破译正确了 。这也就是一次性密码本无法破译的原因,和密钥空间大小无关 。
一次性密码本无法破译这一特性是由香农(C.E.Shannon)于 1949 年通过数学方法加以证明的 。一次性密码本是 无条件安全的(unconditionally secure),理论上是无法破译的(theoretically unbreakable)。
(三) 缺点
一次性密码本虽然这么强大,但是现实中没有人用一次性密码本进行加密 。原因有一下几点:
1. 密钥如何发送给对方?
在一次性密码本中,密钥和原文是一样长度的,试想如果有办法能把密文安全的送达到对方,那么是否可以用这种方法把明文送达到对方呢?所以这是一个矛盾的问题 。
2. 密钥保存是一个问题
一次性密码本的密钥长度和原文一样长,密钥不能删除也不能丢弃 。丢弃了密钥相当于丢弃了明文 。所以“加密保护明文”的问题被转换成了“如何安全的保护和明文一样长度的密钥”的问题,实际上问题还是没有解决 。
3. 密钥无法重用
如果加密的原文很长,那么密钥也要相同长度,并且密钥每次还要不同,因为如果是相同的,密钥一旦泄露7以后,过去所有用这个密钥进行加密的原文全部都会被破译 。
4. 密钥同步难
如果密钥每次都变化,那么密钥如何同步也是一个问题 。密钥在传递过程中不能有任何错位,如果错位,从错位的那一位开始之后的每一位都无法解密 。
5. 密钥生成难
一次性密码本想要真正的永远无法破解,就需要生成大量的真正的随机数,不能是计算机生成的伪随机数 。


推荐阅读