西西河

主题:【原创】密码传奇(一):1、西线屠刀背后的五字幽灵 -- 1001n

共:💬15 🌺66 新:
全看分页树展 · 主题
家园 【原创】密码传奇(一):1、西线屠刀背后的五字幽灵

这个篇外系列越写越长了,而每篇末尾的前文链接也越来越长了……为了简洁起见,我想来想去,还是重新命名今后的原ENIGMA篇外系列吧。考虑到前几篇已经把密码的大概历史交代了一遍,从这篇起,这个系列的主要侧重点就将是和军事、政治以及外交等直接相关的密码故事了。

而一些前文还没来得及交代的密码方法和原理,在后文中会陆续随着经典故事的介绍而一一带出。这样,密码故事给我们所展现的,就不再仅仅是一些牛人的聪明和智慧,更是直接影响整个世界进程的传奇了。

真实的事件最好看,真实的历史最动人。而那么多的密码故事因为大家可以理解的原因湮没在保险柜、图书馆、当事人的记忆中,没有让更多的人了解。

这里面曾经有过那么缤纷的世界,那么凄惨的杀戮,那么致命的攻击,那么危险的拯救――而这些,又有哪本编撰的故事集能比的上呢?我说不上有什么本事,但是我可以把我看到的历史进行整理,以尽量清晰的线条,尽量自以为明白的叙述,向大家转述这些惊心动魄的历史。做的到做不到,只有让今后一段时间检验了:)

在这里要强调一下,本系列大量参考了David Kahn所著的Cracker一书,1982年由公安部的群众出版社以《破译者》书名出版。一定要为他这本书做一下广告,因为他写的实在是太……好了,可以说,我翻阅过不下几十种密码学著作,以他这本为最牛,以至经典到了这个程度――颇有一些密码著作,大量引用甚至大段大段直接复制Cracker里的内容(还好,我个人绝不做这种事――最起码也会换个表达方式吧,呵呵)。他大概是看不到我写的这些了,但是我还是要感谢他,谢谢他写了如此一本好书!大家如果对密码真的有兴趣,那就千万不要错过这本书。

最后就是,从本篇开始,为了增加感性印象,我尽量在不侵犯版权的基础上,适当引用一些图片。

再次感谢大家的支持!“没有你们的支持,我早就没有写下去的动力了”――这段日子,它都是我的心里话!

---------------------------------------------------------------------------

1918年4月1日那天,对法国29岁的陆军中尉Georges Painvin来说,可不是什么快乐日子。

点看全图

年轻时代的Georges Painvin

一战爆发以前,这个聪明的小伙子被调进Bureau du Chiffre(法国陆军部密码局)工作。刚来的时候,他根本就不喜欢自己这差使――密码分析。但是不喜欢归不喜欢,他还是做的不错。而开战以后,随着战争态势的不断变化,Painvin先生也渐渐成为了密码局里面可以独当一面的高手了。很多截获来的德军电报被送到他这里,而他要做的事情操作起来很复杂,说起来却很简单:破掉这些该死的德文密电,让法军也知道德军在说什么……

而这天,法军截获了18封德国电报,却一无所破。这样的日子已经26天了,从3月5日起,法军就发现,他们截收的德军电文跟以前的不一样了。为了解决这个问题,Painvin已经有点精疲力竭了,面对敌人的新密码,他也是一筹莫展。

说了半天,德军的密文到底是个什么样子的呢?下面,就让我们一起来看看吧:

ADXDA XGFXG DAXXGX GDADFF GXDAG AGFFFD XGDDGA DFADG AAFFSX DDDXD DGXAXA DXFFD DXFAG XGGAGA GFGFF AGXXDD AGGFD AADXFX ADFGXD AAXAG

稍微仔细观察一下这份密文,我们可以发现有一个极为特殊的现象:整份密文居然只靠A、D、F、G、X五个字母来回排列,就完成了信息的编码。。。

法军按截收顺序给这些电报编了号,上面看见的这份,编号是CHI-110。

Painvin很清楚,这次绝对是碰上硬茬儿了:德国人仅仅用五个字母,就能用来传递信息,这个加密手段之厉害可见一斑。

德军使用的这套加密体制,就被称为ADFGX战地密码体制。这个ADFGX,在密码学的历史上是个戏剧性极强的故事。而要说清楚它的由来和特征,我们还必须先暂时把西线战役放放,而把目光投向两千年以前的希腊。。。

前文提到过,在久远的公元前2世纪,希腊人Polybius发明了以他名字命名的Polybius方表(Polybius Square,或称checkerboard,棋盘密)。

棋盘密――顺便说一句,这个“某某密”的说法也算是一个直译的结果了。比如,二战时期日本人用的紫密,对应的英文并不是Purple Secret,而就是PURPLE;德军用过的UBCHI,就被翻译成UBCHI密(U上有两点儿,打不出来啊……);日本用过的Tsu,就被翻译成津密。至于跟日本有关的密码战情况,后文会提及,现在也就是拎出来做个例子用:)

而这个方表和上文提过的多表替代的方表有什么关系呢?答案很简单:事实上,除了都有字母以外,根本就没有任何关系……而且稍微细心一点不难注意到,此方表是Square,而彼方表是Tableau。

下面,我们就来罗列个Polybius方表吧:

* 1 2 3 4 5

1 a b c d e

2 f g h i k

3 l m n o p

4 q r s t u

5 v w x y z

其中,i和j占据同一个位置,为了列表清晰起见,没有打出j。

这个方表,妙就妙在它有横纵两行数字上。为了帮助理解,我们不妨把它们理解为横坐标和纵坐标,用来标示每个字母的位置。比如,字母m,先横后纵,我们就可以记录为23。以此类推,全部的字母都可以用这个办法来表示为一个两位数。

Polybius先生在发明这个方表的时候,目的当然不是仅仅为字母们找个数学位置而已。他最具革命性的观念是,把横坐标和纵坐标分开考虑――就这一点,Polybius先生已经遥遥领先于他的时代了。。。

他提出,信息可以用这个办法传递:找个人,找些火把来――之后,比如说,让他左手举3个火把,右手举1个,那么他要传递的信息就是31,也就是字母C。

不难体会这里的妙处。在这之前,肯定有人想过,靠举火把来在黑夜里传递信息。但是,那些方法要么太费劲,要么不可能。比如,简单用火把的数量来表示字母在字母表中的位置的话,就是个很难完成的任务。比如,我想告诉两公里外的同伴一个字母,比如W,那我就需要举起23个火把――且不说烧不烧的到自己,也且不说能不能举的动,关键是,同伴眼睛再尖,怕也是分辨不清两公里外举在一起的二十多个火把吧……

最妙的是,请注意,他只用了1、2、3、4、5五个数字,就完成了全部字母的表示――而ADFGX密码么,呵呵,别急,咱们接着慢慢说。。。

Polybius先生发明的这个看似简单的方表,至少有两个划时代的意义:

一是,把字母序列数字化;

二是,允许把这些数字分别进行处理,而不是面对无从拆起的字母进行分解。

后来,这个绝顶聪明的方法被用在了Polybius先生死也想不到的方向上――在监狱里,关押在不同牢房的犯人之间,一般是不许说话的。但是不许说话不代表不允许小声敲墙,如果正好能不让看守听见的话。于是,“敲墙密码”应运而生。比如犯人甲要向犯人乙传达信息,他可以这样做:

敲敲敲敲-敲敲

敲敲-敲敲敲敲敲

敲敲敲敲-敲敲

敲-敲敲敲

敲-敲敲敲

敲敲敲敲敲-敲

敲敲敲-敲敲敲敲

敲敲敲-敲

敲-敲

敲敲敲敲敲-敲敲敲

敲敲敲敲敲-敲

顺序是按先横坐标后纵坐标进行的,即“-”之前是横坐标,之后是纵坐标。以上是我构造的一句话,有兴趣的兄弟不妨解个码,看看到底犯人甲要说什么:)

再扯远一点,苏联时代著名的持不同政见者,索尔仁尼琴先生,所著的《古拉格群岛》一书里,也描述了监狱里变形的“敲墙密码”。与Polybius方表稍稍有点区别的是,犯人所用的方表从5*5变成了6*6,来容纳俄文里的33个字母。再后来,据说这个办法流传到了西欧。至于如今欧美监狱里有没有人用这个办法,呵呵,资料太少,没法说了。不过按监狱的具体环境来说,这么简单的编码形式应该还是有用武之地的吧:)

从Polybius方表诞生算起,嗖的一声,时间就过去了一千九百多年。1854年1月,英国科学家Charles Wheatstone先生公布了他的发现。这个发现实际上是对Polybius方表的进一步开发,只不过他要更酷一些。他直接取消了代表横纵坐标的数字,变成了下面的形式:

a b c d e

f g h i k

l m n o p

q r s t u

v w x y z

同Polybius方表一样,i和j在这里还是共享一个位置。

Wheatstone先生发现,其实这张表本身就够用了,只要加密的时候,把明文里的字母两两分为一组,一起加密就成了。而这,是个非常有创意的发现。

比如,cheating这个词,就可以拆成ch、ea、ti、ng四组。顺便说一句,找到这个词cheating还是费了我一些时间的,原因是什么,马上就能看出来了:)

之后对字母组的加密方法很简单,分为三步:

1、按上表的排列,分别确定每一组的两个字母的位置关系。无非三种情况:同在一个横行;同在一个纵列;既不在同一横行也不在同一纵列;

2、分别确定所替代的字母;

3、抄录下替代后的字母,做为密文。

还以刚才用cheating拆出来的ch、ea、ti、ng四组为例子,简单说明一下它的加密方法吧:

1、首先观察这几组,发现ch在同一个纵列,ea在同一个横行,ti又在同一个纵列,而ng既不在同一横行也不在同一纵列(三个情况都有了,这就是选中cheating的原因,呵呵);

2、按Wheatstone先生的规则,

位于同一纵列的字母分别用位于它下方的字母进行替换;如果它位于纵列的最后,那么就用该列第一个字母予以替换。于是ch就被分别换为hn,而ti被换成yo;

位于同一横行的字母分别用位于它右方的字母进行替换;如果它位于横行的最后,那么就用该行第一个字母予以替换。于是ea就被替换为ab;

既不在同一横行也不在同一纵列的两个字母,则分别用第一个字母的横坐标和第二个字母的纵坐标所定位的那个字母,和第一个字母的纵坐标和第二个字母的横坐标所定位的那个字母予以替换。――说起来麻烦,其实就是在方表里找出一个正方形,让这两个字母分别成为正方形的对角的两个端点,之后把正方形另两个端点的字母先上后下地记录下来就可以了。于是,ng就被替换成了hm。

3、把替换完的字母连在一起。于是,cheating就成了hnabyohm。

当然,Wheatstone先生还是留了一手,没有照抄Polybius先生那种严格按abcd排列而成的方表。在应用的时候,他把字母顺序通通打乱,在通信时具体使用哪种排列,则由双方事先约定好。于是,这个方表就更加强悍了。

如此麻烦去加密,必定有它的好处。

首先,不难看出,在密文中,过去单个字母的特征现在消失了。比如英文中出现频率最高的字母e,现在就无法识别了:因为e必定与它或前面,或后面的字母一起被改换了门庭,变的无法按出现频率的统计结果,被密码分析人员简单识破了。

其次,由于是两个字母作为一个整体同时变换,要破译这样的密文,分析单元就必须从单个字母变成两个字母。相应地,可供分析的单元数量就只剩下明文的一半了。换言之,过去300字的明文,本来应该有300个分析单元;而经过两两替换,现在只剩下150个分析单元,从减少敌人可以获得的分析单元样本量的角度来说,无疑明显提高了安全性。

第三,由于每个单元是由两个字母构成的,这样的选取方式会明显扯平各种极端和不均匀的字母组合的频率分布现象。例如,刚才说到的最高频字母e,它在文本里出现的频率约为12%,t则是9%。一般来讲,the这个词应该是英文中出现频率极高的,但是按我们上面讲的方法,它可能会被分解为Xt(X代表t前的那个字母,后面的Y意思类似)和he,或th和eY。而在统计中,he出现的频率为2.5%,th的频率为3.3%。如此一来,再也无法通过出现频率猜出the本身来了――它已经被分解到两种字母组合里去了,进而消失在同样有类似组合的词的总样本中了。可以看出,经过两字一组合的选取方式,的确不仅把字母,甚至把分析单元之间的差异都给“磨平”了,进而为密码分析设置了更大的障碍。

Wheatstone先生的朋友,Lyon Playfair先生在了解这个加密方案的优秀之处后,便尽力向英国政府和军队推荐这种崭新的密码体系。而它的优点也非常明显:不需要什么麻烦的设施,一纸一笔就够了,又比较容易理解和使用,――确实适合战场环境,于是最终被英国军队采用了。

造化弄人的是,Wheatstone先生所发明的这个方表,并不叫Wheatstone方表,而叫Playfair方表,而且这个称呼一直沿用到了今天……不过,确有推广之功的Playfair先生从来也没有声称这是自己发明的,但是英国陆军从一开始就管它叫Playfair方表,后来也就一直这么沿用下来了。

只不过对于Wheatstone先生而言,这个play确实有点不那么fair,呵呵。。。

有报道说在1853-1856年的克里米亚战争期间,英军已经开始使用Playfair方表加密了。现在公认的记录则表明大约四十多年后的布尔战争期间,英军使用了Playfair方表。而在第一次世界大战中的1915年,它终于还是被德国人给破掉了……

在Playfair方表诞生五年后的1859年,又一个业余爱好者,美国人Pliny Earle Chase,进一步对Polybius方表进行了改革。这位在铸造厂就职的Chase先生采用了三个步骤:

先是把5*5的Polybius方表扩展成了10*3;

打乱26个字母的排列次序;

加入&,以及三个希腊字母φ、ψ和λ,以填满整张表;其中3个希腊字母统一填在最后一个纵列里。

这样,方表就成了下面这个样子:

* 1 2 3 4 5 6 7 8 9 0

1 x u a c o n z l p φ

2 b y f m & e g j q ψ

3 d k s v h r w t I λ

他还举例说明使用方法。比如加密Philip,就先一个个查找这几个字母的位置,把它们的横坐标写在同一行里,下面一行则对应着写上它们的纵坐标,结果就是下面这个样子:

横坐标 9 5 9 8 9 9

纵坐标 1 3 3 1 3 1

关键是跟着的这步。Chase先生有了新的考虑,他要开始对分开的数字下手了――具体地说起来,就是把位于第一行的横坐标给乘了个9,于是9 5 9 8 9 9就变成了8 6 3 9 0 9 1。把这个结果写在刚才横坐标的位置,则有:

横坐标 8 6 3 9 0 9 1

纵坐标 1 3 3 1 3 1

这里,出现了上下不能对齐的现象,显然,必定是上边那行要长一位。Chase先生特意规定了这一位数从1到8变化时(显然地,这位数不可能是0或者9,呵呵)所分别要代表的字母。在上面这个例子里,长出的那一位数是8,而他规定,8可以代表L,或J,或T。

之后,按以上的横坐标和纵坐标,把字母还原回去。这样,第一位自然是8所代表的L/J/T,这次就选择L。之后,按坐标顺序,把61,33,93,01,93,11一个个代换回方表后得到:

LNSIφIX

于是,Chase加密完成。

Chase先生认为,加密的办法当然不仅仅限于乘以9,还可以加上一个特定的数列,也可以用它的对数,等等很多方式。不过他很明智,认为“但是(如果)比较简单的密码倘若确是行之有效,则是更好的体制”。

Chase加密规则的确简单,而且安全性比起以前的密码来说要好的多。可惜了,没人注意他的发明,也没有人用过他的发明。而这也是密码进化史上屡屡出现的一幕:优秀的加密方案得不到重视,渐渐湮没在故纸堆中;而总有一些名声在外,败絮其中的加密方法,倒是当仁不让地在历史上书写了一笔又一笔记录。

历史的残酷和历史让人回味不尽的地方也都在这里:没有什么是一定的,优未必胜,劣未必汰;胜者通吃,败者为寇;永远不要试图猜测今后会出现什么,也永远不要对过去出现的一切感到惊奇:所有这些,都是符合历史规则的必然……

――介绍完了方表加密,现在就让我们把目光投回到第一次世界大战时代,看看这些貌不惊人的数学游戏是怎么改变了大战的结局吧……

【原创】被征服的谜――ENIGMA的故事(一):密码的前世

http://www.cchere.net/article/371599

【原创】被征服的谜――ENIGMA的故事(二):ENIGMA横空出世(上)

http://www.cchere.net/article/372331

【原创】被征服的谜――ENIGMA的故事(二):ENIGMA横空出世(下)

http://www.cchere.net/article/372349

【原创】被征服的谜――ENIGMA的故事(三):丘吉尔托起的灿烂星座

http://www.cchere.net/article/374308

【原创】被征服的谜――ENIGMA的故事(四):波兰人的绝地反击(上)

http://www.cchere.net/article/375877

【原创】被征服的谜――ENIGMA的故事(四):波兰人的绝地反击(中上)

http://www.cchere.net/article/377011

【原创】被征服的谜――ENIGMA的故事(四):波兰人的绝地反击(中中)

http://www.cchere.net/article/378141

【原创】被征服的谜――ENIGMA的故事(四):波兰人的绝地反击(中下)

http://www.cchere.net/article/379376

【原创】被征服的谜――ENIGMA的故事(四)(篇外):最年轻的数学家

http://www.cchere.net/article/383181

【原创】被征服的谜――ENIGMA的故事(四):波兰人的绝地反击(下上)

http://www.cchere.net/article/384482

【原创】被征服的谜――ENIGMA的故事(四):波兰人的绝地反击(下中)

http://www.cchere.net/article/386464

【原创】被征服的谜――ENIGMA的故事(四):波兰人的绝地反击(下下)

http://www.cchere.net/article/388743

【原创】被征服的谜――ENIGMA的故事(篇外之二):密码的ABC

http://www.cchere.net/article/395281

【原创】被征服的谜――ENIGMA的故事(篇外之三):老密码,老故事

http://www.cchere.net/article/398801

【原创】被征服的谜――ENIGMA的故事(篇外之四A):多表替代的六人行

http://www.cchere.net/article/401057

【原创】被征服的谜――ENIGMA的故事(篇外之四B):多表替代的六人行

http://www.cchere.net/article/401063

元宝推荐:游识猷,抱朴仙人,不爱吱声, 通宝推:当生,

本帖一共被 6 帖 引用 (帖内工具实现)
全看分页树展 · 主题


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河