论文部分内容阅读
要說历史上最精彩的密码故事,那必须得看风起云涌的两次世界大战了。虽然对很多人来说那是人生中最痛苦的回忆,恨不得永远不要回想起来。
为啥两次世界大战有那么多料可以挖呢?道理很简单,什么时候最需要保密呢?那还用说,当然是打仗的时候啦。正所谓“知己知彼,百战不殆”,一方面自己的事儿不想让对方知道,另一方面又要千方百计地知道对方的事儿,这正是密码发挥威力的绝佳舞台。另一个重要原因是,两次世界大战的时候,也正是人类文明开始加速发展的时候。于是,密码就更加有用武之地了。
为什么这么说呢?这是因为经过两次工业革命的折腾,仅仅100年的时间,人类的科技就噌噌地突飞猛进,尤其是电报的发明,对信息传递的影响那绝对是划时代的。有了电报和摩尔斯码,滴滴滴几下,就能把一条消息瞬间传到几千公里之外。既然这么方便,那必须得大力推广呀。于是,两次世界大战期间,电报就成了传递军事消息的最重要手段,也正是因为有了电报,军事消息的数量才出现了爆发式增长,毕竟比以前人肉送信的效率高多了嘛。传递的消息多了,自然也就需要各种各样的密码,而另一方面,消息多了,留给破译者的材料也就跟着多了。这一来一去,一攻一防之间,就上演了一段又一段的暗战传奇。
东线收官
说到第一次世界大战,咱们“密码风云”的开篇讲的就是英国人如何通过破译德国外长齐默尔曼的一封密电,成功地把一直坐山观虎斗的美国拉下水帮自己跟德国人开打的故事。由于德国人大搞毫无节操的无限制潜艇战,美国的船和乘客也因此遭了不少罪。更让美国生气的是,德国人居然给墨西哥发了封密电,也就是我们之前说的那个“齐默尔曼密电”,妄图煽动墨西哥在美国后院放火。这件事儿实在太扎心了,忍无可忍呐,怪不得百年之后,特朗普想起来要修长城了。于是,1917年4月6日,时任美国总统威尔逊向德国宣战,一票美国大兵开赴欧洲战场,准备把德国佬打回老家。
德国那边怎么样呢?捅了那么大一个娄子,必须是吓尿了。我们之前也提过,德国在欧洲大陆的位置比较居中,西边有英法,东边有沙俄,“一战”对于德国来说是两面开战,但就算这样还打得风生水起,那是真猛啊。不过,两面开战时间长了还是太伤元气,尤其是后勤补给这一块,这么拖下去可吃不消,到了1917年,德意志钢铁战车也开始显露疲态了。偏偏就在这个最焦灼的时候,美国还宣战了!你说德国人能不吓尿么?好在德国还有大名鼎鼎的铁血宰相俾斯麦和鲁登道夫将军坐镇,这才稳住了军心。然而局面都这样了,还有机会翻盘么?你别说,还真有,因为这时候发生了一系列值得让德国人弹冠相庆的事儿,这就是被历史老师翻来覆去讲了好几遍的俄国“二月革命”和“十月革命”。
按照我们历史书上的讲法,当时的俄国还是落后的农奴制,而其他欧洲列强早已实行先进的资本主义制度啦。经济制度落后,一打仗当然吃不消,于是1917年3月,俄国爆发了“二月革命”,大伙把皇帝给推翻了。原本德国人觉得,你俄国都变天了,还打啥呢,讲和算了,结果新成立的临时政府不死心,还想要跟德国决一死战。4月美国宣战,但是美国毕竟离得远,调兵过来也得折腾个一年半载的,于是德国决定趁这个机会先把俄国干掉算了,东边的事情不解决,没办法专心对付美国啊。
说干就干,德国跟他的小伙伴奥匈帝国一路猛攻,把新成立的俄国草台班子打得满地找牙。这时候一个叫列宁的人看不下去了,在1917年11月领导了一场“十月革命”,接着就率领新成立的苏俄退出了第一次世界大战。德国人当然开心得不得了,毕竟这样一来,就等于东线的战事全都搞定啦,可以专心回来收拾西边这个烂摊子啦。
孤注一掷
美国调兵过来需要花时间,德国自己从东线调兵回来也得花时间,就看谁快了。1918年开春,德国总算在西线码够了人,而这时候美国的兵力和物资只到了一部分,英法的兵力也实在不够看,这么一比,德国人觉得还是可以干他一票。他们的如意算盘是这样的,趁着美国人还没摆开阵势,先把索姆河沿线的英国人灭了,切断英国从水路支援法国的通道,然后举兵直逼巴黎,迫使法国求和,一旦法国没了,英国也就蹦跶不了多久了。
这个计划可以说是“孤注一掷”了,因为计划一旦失败,法国打不下来,等美国兵力和物资源源不断地送过来,就该轮到德国吃不了兜着走了。因此,这场战役对德国来说太重要了,以德国人的强迫症传统,必须得花大力气在各个方面都做好万全的准备,其中当然也包括密码这一块。
我们在《德国外长的一封密电》中提到过,德国海军和外交部那时候主要用的还是字典式密码,也就是一个像字典一样的本子,里面把每个单词都用数字编了个码。说实在的,只要了解一点密码学的发展历史,就能看出这种东西其实是几百年前的古董技术了,当时就连更先进的维热纳尔方表都已经被巴贝奇和卡西斯基破解了,你们却还在用老套的字典密码,这怎么行呢?更何况,我们还提到过,电报的普及让密电越发越多,留给破译者的线索也就越来越多,如果密码方式本身也不靠谱,那不是雪上加霜吗?
于是,德国人觉得,为了这么重要的一场战役,必须得开发出一种最高端大气上档次的新密码,而且这种密码只能专门用于这场战役。最终,德军采用了由弗里茨·内贝尔(Fritz Nebel)上校开发的一种密码,它的名字叫“ADFGX密码”。因为这种密码的密文只有ADFGX这5个字母,所以我给它起了个仙气十足的外号叫“五字真言”,一听就特别厉害有没有?
波利比乌斯方格
那么这个“五字真言”到底是个什么鬼?其实,“五字真言”也是由一种非常古老的密码发展而来的,并不是内贝尔上校重新发明了一个轮子。这种古老的密码叫作“波利比乌斯方格”(Polybius checkerboard),相传是由古希腊历史学家波利比乌斯发明的,我们先来瞅瞅这是一种什么玩意儿。
波利比乌斯方格是一种5行×5列的方表,里面一共有25个格子,如果我们把拉丁字母填进去,就类似这个效果: 这里面有个小问题,拉丁字母一共有26个,有一个塞不进去,我们这里就把I和J塞到一个格子里吧。其实波利比乌斯也没有规定它必须只有5行5列,你做几行几列都没关系。好了,那么这个表怎么用呢?很简单,要加密一个字母,只要用行号和列号替代它就可以了,比如说A就是11、D就是14、S就是43这样。当然了,实际运用的时候,这张表里面的字母排列顺序是可以任意打乱的,只要传递信息的双方都持有相同的表就行了。
这种古老的密码很厉害吗?别过于迷信古人的智慧,其实这玩意儿一点都不厉害。为什么呢?因为它很明显就相当于一種单表置换密码,只不过是把一个字母置换成两个数字而已,换汤不换药。那么内贝尔上校难道就是用了这么个玩意儿来忽悠人吗?当然不是,要不然不是成猪队友了么?波利比乌斯方格本身只是一种非常弱的单表密码,通过频率分析大法就可以轻易破解,但它的价值在于,它的行数列数可以任意变化,也就是说置换表的大小是可扩展的,这个特性使得它可以被集成到其他密码方式中当作前级编码器来使用。
五字真言
上面这句没看懂?没事,一上来都能看懂,那多没意思啊。下面我们就来具体研究一下这个“五字真言”到底是怎么玩的吧。
首先,“五字真言”需要做一张置换表,这张置换表跟波利比乌斯方格长得一模一样,区别只有一个,那就是把数字1、2、3、4、5换成了字母A、D、F、G、X,也就是这样:
为了看着方便,我们就不把里面的字母顺序打乱了。接下来开始加密咯,假设我们要加密的明文是“Angriff bei Nacht”(德语:晚上发动攻击)。第一步,按照波利比乌斯方格的方法,把每个明文字母置换成两个密文字母:
这一步当然没完,因为光是这一步的话,其实就是一个单纯的波利比乌斯方格而已,我们之前说了,这种东西用频率分析可以分分钟搞定。那么接下来怎么搞呢?这一步有点复杂,大家看仔细了哦。首先,我们需要规定一个“口令”,比如“Frühling”(德语:春天)。接下来,我们把口令写成一行,然后把密文依次写在口令的下面并换行,也就是按照口令的长度把密文做了一个分组:
这是要干啥呢?别急,后面还有呢。现在,我们要把口令里的字母按照字母表的顺序重新排列,比如FRUHLING,按照字母表的顺序重排之后就变成了FGHILNRU。注意,口令重排之后,每一个字母下面对应的那一列密文字母也要跟着重排,像这样:
最后一步,我们按照从左到右的顺序,逐列写出所有的字母并拼在一起。注意,是“逐列”,不是“逐行”,比如在上面这个例子里,我们要先写F列下面的ADAA,然后再写G列下面的DDA,以此类推。最终密文就是这样的啦:
唔,感觉已经完全看不出任何痕迹了呢,好厉害!至于解密的方法是怎样的,留给大家自己琢磨一下吧,应该不难的哦。还剩一个小问题,这种密码为什么要用ADFGX这五个字母呢?还记得我们讲过电报的事么,当时的军事消息大部分都是用电报传送,因此这种密码也专门为电报进行了特殊的设计。发送电报的时候要使用摩尔斯码,摩尔斯码基本上是用长码(“嗒——”)和短码(“滴”)的组合来代表不同的字母。ADFGX这几个字母的摩尔斯码的区别比较明显,不太容易混淆,这样就可以减少收发电报的过程中产生的误码了。另外,摩尔斯码里面,每个数字都需要5个码来表示,但每个字母只需要1~4个码就够了,而且摩尔斯码的设计是越常用的字母码长越短,比如E和T都只需要1个码,因此,用字母发报就比用数字(比如传统的数字密码本)发报的效率高出一大截。
(那么,“五字真言”真的如德军期望的那样牢不可破吗?协约国又将如何对付这种新的密码呢?我们下期继续讲。)
为啥两次世界大战有那么多料可以挖呢?道理很简单,什么时候最需要保密呢?那还用说,当然是打仗的时候啦。正所谓“知己知彼,百战不殆”,一方面自己的事儿不想让对方知道,另一方面又要千方百计地知道对方的事儿,这正是密码发挥威力的绝佳舞台。另一个重要原因是,两次世界大战的时候,也正是人类文明开始加速发展的时候。于是,密码就更加有用武之地了。
为什么这么说呢?这是因为经过两次工业革命的折腾,仅仅100年的时间,人类的科技就噌噌地突飞猛进,尤其是电报的发明,对信息传递的影响那绝对是划时代的。有了电报和摩尔斯码,滴滴滴几下,就能把一条消息瞬间传到几千公里之外。既然这么方便,那必须得大力推广呀。于是,两次世界大战期间,电报就成了传递军事消息的最重要手段,也正是因为有了电报,军事消息的数量才出现了爆发式增长,毕竟比以前人肉送信的效率高多了嘛。传递的消息多了,自然也就需要各种各样的密码,而另一方面,消息多了,留给破译者的材料也就跟着多了。这一来一去,一攻一防之间,就上演了一段又一段的暗战传奇。
东线收官
说到第一次世界大战,咱们“密码风云”的开篇讲的就是英国人如何通过破译德国外长齐默尔曼的一封密电,成功地把一直坐山观虎斗的美国拉下水帮自己跟德国人开打的故事。由于德国人大搞毫无节操的无限制潜艇战,美国的船和乘客也因此遭了不少罪。更让美国生气的是,德国人居然给墨西哥发了封密电,也就是我们之前说的那个“齐默尔曼密电”,妄图煽动墨西哥在美国后院放火。这件事儿实在太扎心了,忍无可忍呐,怪不得百年之后,特朗普想起来要修长城了。于是,1917年4月6日,时任美国总统威尔逊向德国宣战,一票美国大兵开赴欧洲战场,准备把德国佬打回老家。
德国那边怎么样呢?捅了那么大一个娄子,必须是吓尿了。我们之前也提过,德国在欧洲大陆的位置比较居中,西边有英法,东边有沙俄,“一战”对于德国来说是两面开战,但就算这样还打得风生水起,那是真猛啊。不过,两面开战时间长了还是太伤元气,尤其是后勤补给这一块,这么拖下去可吃不消,到了1917年,德意志钢铁战车也开始显露疲态了。偏偏就在这个最焦灼的时候,美国还宣战了!你说德国人能不吓尿么?好在德国还有大名鼎鼎的铁血宰相俾斯麦和鲁登道夫将军坐镇,这才稳住了军心。然而局面都这样了,还有机会翻盘么?你别说,还真有,因为这时候发生了一系列值得让德国人弹冠相庆的事儿,这就是被历史老师翻来覆去讲了好几遍的俄国“二月革命”和“十月革命”。
按照我们历史书上的讲法,当时的俄国还是落后的农奴制,而其他欧洲列强早已实行先进的资本主义制度啦。经济制度落后,一打仗当然吃不消,于是1917年3月,俄国爆发了“二月革命”,大伙把皇帝给推翻了。原本德国人觉得,你俄国都变天了,还打啥呢,讲和算了,结果新成立的临时政府不死心,还想要跟德国决一死战。4月美国宣战,但是美国毕竟离得远,调兵过来也得折腾个一年半载的,于是德国决定趁这个机会先把俄国干掉算了,东边的事情不解决,没办法专心对付美国啊。
说干就干,德国跟他的小伙伴奥匈帝国一路猛攻,把新成立的俄国草台班子打得满地找牙。这时候一个叫列宁的人看不下去了,在1917年11月领导了一场“十月革命”,接着就率领新成立的苏俄退出了第一次世界大战。德国人当然开心得不得了,毕竟这样一来,就等于东线的战事全都搞定啦,可以专心回来收拾西边这个烂摊子啦。
孤注一掷
美国调兵过来需要花时间,德国自己从东线调兵回来也得花时间,就看谁快了。1918年开春,德国总算在西线码够了人,而这时候美国的兵力和物资只到了一部分,英法的兵力也实在不够看,这么一比,德国人觉得还是可以干他一票。他们的如意算盘是这样的,趁着美国人还没摆开阵势,先把索姆河沿线的英国人灭了,切断英国从水路支援法国的通道,然后举兵直逼巴黎,迫使法国求和,一旦法国没了,英国也就蹦跶不了多久了。
这个计划可以说是“孤注一掷”了,因为计划一旦失败,法国打不下来,等美国兵力和物资源源不断地送过来,就该轮到德国吃不了兜着走了。因此,这场战役对德国来说太重要了,以德国人的强迫症传统,必须得花大力气在各个方面都做好万全的准备,其中当然也包括密码这一块。
我们在《德国外长的一封密电》中提到过,德国海军和外交部那时候主要用的还是字典式密码,也就是一个像字典一样的本子,里面把每个单词都用数字编了个码。说实在的,只要了解一点密码学的发展历史,就能看出这种东西其实是几百年前的古董技术了,当时就连更先进的维热纳尔方表都已经被巴贝奇和卡西斯基破解了,你们却还在用老套的字典密码,这怎么行呢?更何况,我们还提到过,电报的普及让密电越发越多,留给破译者的线索也就越来越多,如果密码方式本身也不靠谱,那不是雪上加霜吗?
于是,德国人觉得,为了这么重要的一场战役,必须得开发出一种最高端大气上档次的新密码,而且这种密码只能专门用于这场战役。最终,德军采用了由弗里茨·内贝尔(Fritz Nebel)上校开发的一种密码,它的名字叫“ADFGX密码”。因为这种密码的密文只有ADFGX这5个字母,所以我给它起了个仙气十足的外号叫“五字真言”,一听就特别厉害有没有?
波利比乌斯方格
那么这个“五字真言”到底是个什么鬼?其实,“五字真言”也是由一种非常古老的密码发展而来的,并不是内贝尔上校重新发明了一个轮子。这种古老的密码叫作“波利比乌斯方格”(Polybius checkerboard),相传是由古希腊历史学家波利比乌斯发明的,我们先来瞅瞅这是一种什么玩意儿。
波利比乌斯方格是一种5行×5列的方表,里面一共有25个格子,如果我们把拉丁字母填进去,就类似这个效果: 这里面有个小问题,拉丁字母一共有26个,有一个塞不进去,我们这里就把I和J塞到一个格子里吧。其实波利比乌斯也没有规定它必须只有5行5列,你做几行几列都没关系。好了,那么这个表怎么用呢?很简单,要加密一个字母,只要用行号和列号替代它就可以了,比如说A就是11、D就是14、S就是43这样。当然了,实际运用的时候,这张表里面的字母排列顺序是可以任意打乱的,只要传递信息的双方都持有相同的表就行了。
这种古老的密码很厉害吗?别过于迷信古人的智慧,其实这玩意儿一点都不厉害。为什么呢?因为它很明显就相当于一種单表置换密码,只不过是把一个字母置换成两个数字而已,换汤不换药。那么内贝尔上校难道就是用了这么个玩意儿来忽悠人吗?当然不是,要不然不是成猪队友了么?波利比乌斯方格本身只是一种非常弱的单表密码,通过频率分析大法就可以轻易破解,但它的价值在于,它的行数列数可以任意变化,也就是说置换表的大小是可扩展的,这个特性使得它可以被集成到其他密码方式中当作前级编码器来使用。
五字真言
上面这句没看懂?没事,一上来都能看懂,那多没意思啊。下面我们就来具体研究一下这个“五字真言”到底是怎么玩的吧。
首先,“五字真言”需要做一张置换表,这张置换表跟波利比乌斯方格长得一模一样,区别只有一个,那就是把数字1、2、3、4、5换成了字母A、D、F、G、X,也就是这样:
为了看着方便,我们就不把里面的字母顺序打乱了。接下来开始加密咯,假设我们要加密的明文是“Angriff bei Nacht”(德语:晚上发动攻击)。第一步,按照波利比乌斯方格的方法,把每个明文字母置换成两个密文字母:
这一步当然没完,因为光是这一步的话,其实就是一个单纯的波利比乌斯方格而已,我们之前说了,这种东西用频率分析可以分分钟搞定。那么接下来怎么搞呢?这一步有点复杂,大家看仔细了哦。首先,我们需要规定一个“口令”,比如“Frühling”(德语:春天)。接下来,我们把口令写成一行,然后把密文依次写在口令的下面并换行,也就是按照口令的长度把密文做了一个分组:
这是要干啥呢?别急,后面还有呢。现在,我们要把口令里的字母按照字母表的顺序重新排列,比如FRUHLING,按照字母表的顺序重排之后就变成了FGHILNRU。注意,口令重排之后,每一个字母下面对应的那一列密文字母也要跟着重排,像这样:
最后一步,我们按照从左到右的顺序,逐列写出所有的字母并拼在一起。注意,是“逐列”,不是“逐行”,比如在上面这个例子里,我们要先写F列下面的ADAA,然后再写G列下面的DDA,以此类推。最终密文就是这样的啦:
唔,感觉已经完全看不出任何痕迹了呢,好厉害!至于解密的方法是怎样的,留给大家自己琢磨一下吧,应该不难的哦。还剩一个小问题,这种密码为什么要用ADFGX这五个字母呢?还记得我们讲过电报的事么,当时的军事消息大部分都是用电报传送,因此这种密码也专门为电报进行了特殊的设计。发送电报的时候要使用摩尔斯码,摩尔斯码基本上是用长码(“嗒——”)和短码(“滴”)的组合来代表不同的字母。ADFGX这几个字母的摩尔斯码的区别比较明显,不太容易混淆,这样就可以减少收发电报的过程中产生的误码了。另外,摩尔斯码里面,每个数字都需要5个码来表示,但每个字母只需要1~4个码就够了,而且摩尔斯码的设计是越常用的字母码长越短,比如E和T都只需要1个码,因此,用字母发报就比用数字(比如传统的数字密码本)发报的效率高出一大截。
(那么,“五字真言”真的如德军期望的那样牢不可破吗?协约国又将如何对付这种新的密码呢?我们下期继续讲。)