主题:【原创】密码传奇(三)、11:纯技术篇之活拆了ENIGMA (2) -- 1001n
晚上有点事情,耽搁到了快0点才动笔。这东西又费脑子,搞到现在也只写到这里,比预想的进度要慢多了。下一篇,我想会长一些吧。在这里,也祝大家周末快乐了——顺便借机休息两天,呵呵。。。
-----------------------------------------------
上面,我们介绍了ENIGMA转轮的构造。在实际使用的时候,每个转轮都能通过自身的旋转,不断地改变电路,从而使输入的电信号不断地改变着走向。
这样,当输入某个字母的时候,它可以被旋转的转轮替代为26个字母中的任何一个。比方说,输入的是T,出来的既可能是M,也可能是Z,如此等等。
因此,以密码学的角度分析,单个转轮对字母的加密,它的实质就是所谓单表加密。这里面的单表,指的是单张的换字表。而换字表,通俗地说就是一张表单,它上面记录着所有可能被用于替换明文字符的密文字符。
比如说,某张换字表上统共记录着A、B、C、D、E、F、G、H这八个字母,那么在使用这张换字表进行替代的时候,无论怎么操作,得到的加密结果仍然应该只由这八个字母构成。这样的一张换字表,我们就说它的长度是8。
以前介绍过的恺撒密码,实际上也是通过换字表进行替代的一种形式,只不过特殊了一些。具体来说,恺撒密码的替换规则是连续而有序的,比如说如下这样
明文 A B C D E F G H I J K ……
-----------------------------经过换字表操作
密文 B C D E F G H I J K L ……
很明显,这张恺撒换字表,就是把字母序列往“后”错了1位而生成的。如此一来,如果把明文字符X所在字母表中的位置记为P,那么替换规则就是密文字符C = ( P + 1 )
这是加1的情况。既然能加1,自然也能加2、加3;能加,自然也能减。如果把密文字符相对于明文字符错动的长度记为S,规则就成为
C = ( P + S )
这里,S可以为正数,也可以为负数。而符合这种替换规则的换字表,我们就称为恺撒换字表。
显而易见,恺撒换字表有两个明显的特点:第一,它的长度就是字母表的长度,也就是26;第二,它的替换方式相当规则,如果猜破很少几个具体的替换对应关系,比如已知A对F,B对G,C对H——那么,D对什么?
稍微掐指头一算就知道,A、B、C分别对应F、G、H,那么,显然D对I。同样的办法,整张换字表就会很快地被整理出来——这就意味着,恺撒密码实际上已经被攻破了。
在已知若干对应关系后,即便S大一些,或者是个负数,纸笔稍微操作一番,一样可以很快得到整张换字表。总的来说,恺撒密码并不安全,不说是开门揖盗,也跟防君子不防小人差不多。
而单个ENIGMA的转轮,实际上也是单表替代。而它的核心,也就是它的换字表,与恺撒换字表有一同一异:这一同,就同在换字表长度也是26上;异则是它的替换方式完全不规则——正是这个异,才让ENIGMA的转轮明显拥有了更强的安全强度。
具体来说,转轮的换字表是不连续、无序的,只要换字表内部的字符替换关系是一对一,并且互不重复就可以。比如,A对Q,B对F,C对L……反正,随便指配即可。如此一来,即便你知道了有限几个具体的替换对应关系,依然无法整理出整张换字表来——比如说,刚才说到的A-Q,B-F,C-L你都知道,这时候我问你:D对应什么?E对应什么?
还是无法回答。而想要猜出转轮的换字表的全部对应关系,至少应该知道 26 - 1 = 25组对应关系,才可能解决。
转轮上的这张换字表,其实是被转轮内部的导线连接的方式决定的。转轮一被造出来,这个关系就被固定了;因此,同号型的转轮,它们的换字表应该是一致的——这个是1001n的估计,如果有误,也希望大家指正。
也顺便说一句,个别型号的ENIGMA上的转轮,由于有了另外的设置,可以在出厂后再调节内部连线的连接关系——比如说,出厂的时候,左3触点连接右9触针;在经过某个附件的调节下,可以让左3触点改成对应右16触针,等等。当然到了这时候,换字表就不再是一张,而是很多张了。这个理解起来比较麻烦,就简单说这么多吧。
总体来说,单个转轮普遍是单表加密,而且是根据字母表形成的单表加密。这样一来,统共只有26个字母的换字表,无论如何不可能非常坚强。
而且,在应用的时候,有一个因素是无论如何不能不考虑到的;那就是在战争条件下,密码机是随时可能被缴获的。一个转轮落入敌手,就意味着同样结构的所有转轮的内部连线关系,也同时曝光了。由此,换字表大白于天下,ENIGMA也就完蛋了。
所以,单个转轮尽管是加密的基石,但也实在是太单薄、太脆弱了,原因就在于它的原理是单表加密。那么,如果不是只用一张单表,而是同时使用几张单表,对明文一次又一次地连续加密,情况又如何呢?
当然就有改变;而为了实现这个目的,就有必要把转轮们组合起来。说起来,这个操作却很简单:三个转轮并排放一起,中间用根小棍儿(学名叫杆,shaft[英])一穿,稍加收拾,一个转轮组就诞生了。
下图以前贴过,这次再端上来,主要是强调那根不起眼的杆:
把杆依次穿过转轮轴心的孔洞,三个转轮就串起来了
串好了。
好像肉熟了就要出锅一样,这转轮组装好了以后,就可以塞进ENIGMA机器了
这就是转轮组能够出现最强有力的动因了——虽然几个转轮分开看,都是单表加密;但是把它们有机地组合起来以后,却可以生成全新类型的多表加密。至于这个多表加密,1001n在以前的【多表替代的六人行(上、下)】里已经做了比较详细的介绍,这里就不再重复了。
从安全强度上看,多表加密的强度与单表加密根本就不在一个层次上,因此,拿它们相互比较也就失去了意义。
这张转轮组示意图还是那位Wapcaplet做的,清晰直观
每次输入字母,转轮们都会旋转,从而改变电路结构,导致输出不同的字母。
粗粗看起来,由于转轮组的存在,字母被加密的变化可能(学名叫周期长度,即出现完全重复的加密现象之前,所有的变化可能)应该是这样计算的:
(每个转轮的变化数量) ∧ (转轮的数量) = 26 ∧ 3 = 26 * 26 * 26 = 17576 种
通行的各种书刊上,一般都是以此为结论的,也即三个转轮,可以提供17576种变化。说实在的,这样的想法很自然,以至于1001n在之前的【波兰篇】里,没看出什么破绽,也就引用了这个数字。它出自三思科学网站上,原文又节选自密码史作家Simon Singh的名著The Code Book中的一段。除此以外,还有不少相关著作,也是用的这个数字。
——但是,它竟然是错的!
唉,1001n出现如此硬伤,实在是没面子啊——也因此引以为戒,不放过任何疑点,要仔细、仔细再仔细……也说句题外话,就是:这个密码系列对人真是个锻炼,逼得你不严谨不行啊。。
错了没关系,关键是要知道错在哪里。现在再看这个数字,1001n甚至可以知道当初各位究竟是怎么错的——那就是,他们或许看到过ENIGMA的转轮,也见过转轮组(不管是不是照片)——但是,他们肯定不知道这个转轮组是怎么运行的。
问题,就出在这里!
由于不知道具体的运行方式,凭“想当然”就会很顺理成章地认为,这三个刻着26个字母的转轮,其组合变化必然是26的立方。可惜,ENIGMA是个电-机械结构的密码机,而不是一个理论上的产物;它的机制就决定了,所有的变化可能,是达不到这个理想值的。
下面,我们就来认真分析一下,到底是什么导致了计算值的失真吧。
本帖一共被 2 帖 引用 (帖内工具实现)
比方说如果转轮一运动到位置“5”时,转轮二只能是6到26,而不能卡1到4?
这样一来只能是26x25x24=15600种变化...
技术太强,略过。。。
如果是单个字母,假设每输入一次转轮进一,感觉不管串联多少个,26 次之后一定回归起始状态?
还是 n 个字母的字符串?但这样周期肯定依赖于 n。
3个轮子之间不是完全独立,
这也太复杂了!兄弟看了头大了!
可能是: 一号每100格,二号10格, 三号1格之类的.