改进钥匙:你以为的“随机”都是“伪随机”Improved keys: pseudorandom
如果以密码学的视角,我们怎么划分年代呢?
其实可以这样分。比如,我们现在生活在一个加密法胜于解密法的年代;而1860年到1920年的人,可就没有那么幸运了,因为他们生活在一个解密法胜于加密法的年代。
那时候加密法顶多是给解密专家设置很多麻烦,把工作量变大,但解密者知道,理论上来说它们都是可以破解的。
到了1920年,加密法终于翻身了。
虽然并不是什么横空出世的全新方法,只是继续在第三代的维吉尼亚加密法1.0版本上做了一些小改进,就让它变得极为难破,或者压根就没法破。
之前我们讲破解维吉尼亚密码的时候就知道,它的缺陷在于钥匙的循环。
假如一个钥匙有5个字母,那对应的密文,每逢5个字母就会用到同一套密码加密。所以只要知道钥匙的长度,再分别对5套密码用频率分析法,维吉尼亚加密法就破解了。
处于下风的加密一方自然不甘心,怎么才能补上这个缺陷呢?
答案可能你也想到了——增加钥匙的长度。
比如说一篇文章有1000个字母,如果钥匙的长度是5,也就是说用了5套加密法,那么每套加密法会匀到200个字母。
对于频率分析法来说,要想把字母出现的频率统计准确,有一个必要条件——字母足够多才行。
200个字母还是可供分析的,但一个ok、no这样的短消息,什么频率特征都体现不出来。而这,正是加密者希望出现的局面。
那么现在,还是那篇1000个字母的文章,我们的钥匙长度从5增加到50的话,每套加密法匀到的字母只有20个了,连26个字母每个出现一次的量都没到,这样的量几乎就不会表现出字母的频率特征。
如果再继续增加钥匙长度呢?比如说钥匙文和原文等长,也是1000个字母,那之前破解维吉尼亚加密法的所有方法都会失效了。
这时候钥匙又要怎么设计呢?一般是用一首诗或者一篇其他文章当做钥匙,这样方便大家约定规则。
这种加密法,我们可以把它当做维吉尼亚加密法的2.0版本。
不过2.0版,还是有破解方法。
之所以能破解,就是因为钥匙和原文等长时,为了方便,人们往往会使用一首诗或者一篇文章当钥匙。而一首诗、一篇文章是有意义的单词组成的,它们的字母排列一定是符合拼读规律的。
有规律可循,就可能被破解。
破解的方法,是先假设原文中一定会出现常用的单词,然后拿它去和密文对照,倒推钥匙的单词是什么。
原文中短小的词假设它是个什么呢?最好的选择就是定冠词the,或者at、in,这些总会用到的单词。
比如,假设原文中任何三个相连的字母都可能是the,在我们已经知道密文是什么,又假设了原文是the的情况下,我们去对照维吉尼亚的字母表,对应的钥匙是哪三个字母也就确定了。
不断的把the放在所有位置上,然后去观察钥匙的样子,有时候钥匙就会呈现出一些符合单词拼写规律的样子。
反正这个方法就是先假设原文里一定有the这样的词,然后还有一个前提,就是假设钥匙是像一篇文章或者一首诗那样有规律的单词拼写成的。
在假设原文有the,手中又有密文的基础上,求出the对应的钥匙字母就不难了。
看看这部分算出的字母,是不是也符合单词拼写规律。如果符合,很可能这部分钥匙字段你就猜对了;如果不符合,就说明猜得还不对。
这种方法完全避开使用频率分析法,不需要有足够大量的字母出现,都可以分析出原文。只是除了规定步骤外,还要有很好的猜字谜的功底,总体来说属于体力活。
到此为止,维吉尼亚加密法的第一个改进版2.0版,也就是把钥匙长度增加到和原文一样长的方法,也被破解了。
加密法不服,继续改进,这次的改进其实是修补了2.0版本的漏洞。
你还记得是什么漏洞吗?就是钥匙是一段完全符合拼写规律的文字。
如果钥匙根本不是一首诗、一篇文章,而是一大段完全随机的字母,那顺着上一版的方法,接下来的任务就是猜测随机字母是哪些,这实在是个不可能完成的任务。
而且不光是听着不能完成,之后有数学家分析了整个过程,证明了这种把钥匙编成随机字母的方法,在数学理论上就是不可破解的。
这个方法在第一次世界大战后出现,后来就被叫做“单次钥匙簿密码法”。我们可以把它定义为,维吉尼亚加密法的3.0版本。
这是我们目前说了这么多,第一个绝对安全的加密法。
但实际情况是,它几乎就从没在实战中规范使用过。原因你肯定也猜到了——
它的效率异常的低,根本就无法用在需要大量通信的领域。
当时的具体操作是这样,通讯部门人手一本厚厚的钥匙簿,大约几百页,每页都是密密麻麻的随机字母。加密第一页时就用钥匙簿第一页,凡是用过的那页就撕掉销毁,直到这本密码簿全部用完,再等总部发第二本。
假如像一战那个规模,一共有几万个发报机,每个人都要有一份钥匙簿,不方便携带先不提,就算是这几万人能协调一致,把该用哪页这件事搞明白就很不容易了。
这只是操作层面的障碍,更大的门槛在于 ——产生随机字母排序,是一件几乎不可能的事。
这一点是超过很多人日常经验的。你说平时听歌儿,播放顺序不就有随机播放的选项吗?但我要告诉你,其实那都是伪随机。
在真正的随机播放下,你听起来会明显感觉,“播过的歌儿怎么又播了一遍?”或者“本来就20首歌,为什么播了一下午我最爱的第三首歌从没出现过?”
苹果公司曾经就因为用户抱怨随机播放不合理,才修改的算法。原来是真的随机,后来就把随机播放改成了用户“感觉上的随机播放”。
其实苹果最后采用的这种播放顺序,应该叫做“循环同余随机”。也就是让人听起来感觉每首歌都不是我刚听过的,而且在比较合理的次数后,每首歌都能轮到播放一次。
可以这样说,凡是通过软件制造的随机都是伪随机。只有在大自然中,一些已经被证明是随机的量子物理过程,才是真的随机。
比如说一种半导体管叫齐纳管,它被电流击穿后产生的白噪音是真随机。或者有些放射线的原子,在衰变的时候会向外辐射α粒子,如果把α粒子一个个射出来的时间间隔记录下来,这些间隔的数字是真随机的。
对于人来说,真随机是一个很难获得的东西。
而我们脑中以为的随机,比如随机字母、或者我的双手在键盘上一通乱敲,那其实都不是真随机。
你信不信,只要敲的数量足够多,大数据是可以从中分析出来的。不同的人乱敲的“笔迹”,是不一样的。小明乱敲的模式和阿花乱敲的模式也是不一样的,于是就可以从中找出规律。
而这种规律,就可以当做是一种类似于一首诗、一篇文章那样的拼写规律,那么破解维吉尼亚加密法2.0的方法就还是可以用上。
所以,虽然理论上说单次钥匙簿密码法是不可破解的,安全性没有破绽,但真的随机是很难轻易获得的,而获得了以后又很难大规模使用,效率极为低下。所以这种方法,几乎没有在真正的战场上使用过。
讲了维吉尼亚加密法的2.0改进版和2.0改进版的破解法,还有3.0改进版——单次钥匙簿加密法。理论上说,3.0改进版是无法破解的,但实际上又是几乎没法用的。
回顾一下密码学的应用就会发现——
它其实是一种想方设法给别人读取信息制造更多麻烦,与此同时又不给自己读取信息增加太多麻烦的学问。
实际考量后的加密目标,并不是追求绝对的安全、无法破解,而是在尽可能增加安全性的基础上,保证使用上的效率,找到平衡点。
因为给别人增加麻烦的同时,也给自己成倍的增加麻烦,导致最终加密的算法虽然出现,但没能马上用起来的例子,咱们到现在已经遇到过两个了。
第一个,是维吉尼亚加密法1.0版。它是1580年出现的,但当时人们只能用纸和笔解读,加密解密的过程对自己人都太麻烦,所以实际要到19世纪末才开始使用。
第二个,就是讲的单次钥匙簿密码法。这个方法甚至还没有维吉尼亚加密法1.0那么幸运,因为在它尚未轮到好时机被人用上的时候,新一代的加密法就诞生了。
不过虽然早期命运不幸,但后来随着德国军事野心家的重视,这种单次钥匙簿密码法的改进版在二战中大放异彩,甚至一定程度上决定了二战最后的结局。
创文链接:
• 密码为什么要从俚语加密开始Why do passwords start with slang encryption
• 密码的两个时代变数Two epochal variations of the password
• 概率论:数学让密码学加速进化mathematics accelerated the evolution of cryptograph ...
• 维吉尼亚密码:加密强悍,却为何没人用?Vigenère cipher
网友评论