今天的越写悦快乐之系列文章为大家带来《码书》之读后感,副标题《解码与编码的战争》,看看密码学在近代历史上的应用,如何从手工时代,到机械时代,再到智能时代。
密码决定了战争的胜败,也影响了历史的走向。
前言
在人类历史上,不管是君王还是将军,都需要一套高效的通信手段来治理国家和指挥军队。但是他们还有另一个需求,那就是不能让敌人获得关键的信息,必须尽量保持机密。
连中国古代的《易经》中都有这样的话:「君不密则失臣,臣不密则失身,几事不密则害成。」换句话说,如果没有机密,就会有危险。
《孙子兵法》里更是说得直接「三军之亲,莫亲于间,赏莫厚于间,事莫密于间。」也就是说,战争中,没有比刺探他人情报和保护自己的情报更加重要的事情了。
所以纵观历史,有多少权力的争夺,有多少战火和硝烟,背后就有多少秘密。
历史上无数人发挥自己的聪明才智,努力建造更强的保密系统,也努力攻破别人的保密系统。密码学,就在这场旷日持久的攻防拉锯战中应运而生。
甚至有人说,历史的标点符号,就是密码打上去的。密码决定了战争的胜败,也影响了历史的走向。
密码的三个阶段
手工时代
虽然我们把「密码」两个字放在一起说,但是实际上,人类是先花了很多时间研究「密」,之后才转而研究「码」。
秘密书信的历史其实非常悠远,不过,人们最早的思路,是想方设法把书信的内容直接隐藏起来。
有文献记载,公元前5世纪,希腊和波斯之间正在打仗。一位希腊人为了传递秘密信息,会把信息写在木板上,然后用一层蜡把木头盖住。收信人拿到木板之后,把蜡刮掉,就能看到秘密的信息。
希腊这边还用过更绝的方法,他们会把信使的头发剃光,把秘密信息写在信使的头皮上,等信使头发长出来之后再派他去送信,到地方再把头发剃了,收信人就能看到密信了。
这种直接掩盖信息的方法,被称为「隐匿法」。这是最早的加密手段,直到近现代还一直在使用。今天我们在看谍战片的时候,还会经常看到间谍们用隐匿法传递情报,像什么用隐形墨水写信,或者把信息塞进胶囊里再让特工吞下去,都是隐匿法。
隐匿法的寿命这么长,表示这种方法确实很安全。不过,隐匿法有一个根本弱点,一旦敌人更加谨慎地搜查,情报就会曝光。这就像是在玩捉迷藏的游戏,只要对方认认真真地去找,总是能找到一些蛛丝马迹。
于是,人们开始思考另一种方法,有没有可能,就算敌人找到了白纸黑字的信息,但是依然不明白我想说的是什么呢?
顺着这个思路,各种密码应运而生。
在密码的手工时代,诞生了花样繁多的密码,不过从原理上,基本可以分成两类,一类用的是「移位法」,另一类用的是「替代法」。
最简单的移位法,就是把每个字母都用后边一位的字母表示,这样,A就变成了B,B就变成了C,像是「得到」的拼音DEDAO就变成了EFEBP。别人如果看到,就会认为是毫无意义的单词,没法理解其中的含义。传说这样的方法,最早是由恺撒发明的,所以用移位法加密又被称为「恺撒式密码」。
另一种方法是替代法。先将字母随意配对,再用配对字母取代信息里的原始字母。比如我们可以指定用V代表A,用T代表B,因为替代的规则是人指定的,所以更加灵活,更难被破解。
不过,不管是移位法还是替代法,都有一个本质上的弱点。那就是这些用字母组成的拼音文字,每个字母出现的频繁程度是不一样的。比如在英文里边,字母A、字母E出现的频率,就远远高于字母X和字母Z。所以,不管用什么样的方式移位或者替代,只要是用一套加密方案进行加密,那么拿到密文之后,只要统计其中字母的频率,就能找到破解的方向。
于是人们在移位法和替代法的基础上,发明了新一代的加密方法,这种方法是由一位名叫维吉尼亚的法国外交官发明的,所以被称为「维吉尼亚加密法」。
维吉尼亚加密法的创新之处,在于给每个字母都设置一套加密算法。
字母A可以替换成A也可以替换成Z,一共26个字母,这就是26套加密方案。通信的双方需要约定一组数字,这样就知道每一位字母要用哪套加密方案了。
咱们还是拿得到的拼音DEDAO举例子,咱们约定一组数字,比如10086吧。这样,第一个字母D就替换成后一位的E,第二个字母E还是E,第三个字母D还是D,第四个字母A替换成后八位I,最后一位字母O替换成后六位的字母U,在10086这个方案下,DEDAO就被加密成EEDIU。
这个10086就叫作「钥匙」,拿到了钥匙,才能知道具体要如何解密。
维吉尼亚加密法确实提升了密码的安全性。不过,安全和方便往往是一对矛盾,维吉尼亚加密法提升了安全性,也提高了使用的门槛,比如咱们刚才是5个字母,所以钥匙也只需要5位数就够了。如果是一封几百个单词的长信呢?钥匙也要变得很长,那如何把钥匙顺利地交到别人的手上呢?这就出现了新的问题。
而且,在手工书写的时代,要记忆26套加密算法,不仅费时费力,而且容易出错。所以,维吉尼亚加密法虽然更加安全可靠,但是在手工加密的时代,并没有被广泛应用,直到机械时代来临,这种方法才开始大放异彩。
机械时代
进入20世纪,战争中对于加密和解密的需求就更加强烈了。一方面,各种机械的出现,可以提升我们的效率,像是前边说到的维吉尼亚加密法,就不用靠手算了,可以用专门的机械来辅助加密了。另一方面,科技的进步也使得需要加密的场合越来越多,比如战争中大量使用无线电来通信,战争双方都可以接收到无线电信号,如果没有强有力的加密手段,那自己就相当于完完全全暴露在对方的眼皮底下了。
有人说,第一次世界大战可以称为是化学家的战争,因为战场上第一次出现了芥子毒气;第二次世界大战可以称为是物理学家的战争,因为原子弹的出现终结了战局;如果有第三次世界大战的话,一定是数学家的战争,数学家将掌控大战中最关键的武器,那就是信息。
其实第二次世界大战,就已经是数学家的战争了,加密和解谜的拉锯战直接影响战争的走向。这其中最精彩的案例,当属英国密码专家破解德国的「恩尼格玛密码机」。这也是密码学历史上最著名的攻防战,可以说直接影响了人类历史的进程。
恩尼格玛
是一种机械电子式的加密机,由一堆齿轮、电线、灯泡、转盘、摇杆组成。使用机器做繁琐的加密工作在之前也有过,只是因为它们都没有量产,所以也没有流行。恩尼格玛机,是第一个大规模量产的加密机。从它开始,密码学不再依赖纸和笔的运算,使用机械和电子加密的时代正式到来。
恩尼格玛密码机的样子有点像打字机,有键盘,有显示装置,内部是一大堆机械和电子的零件。
操作员每敲下一个字母,经过机械和电子的转换,显示装置那里就会显示一个对应的字母,这就是经过加密之后的编码了。这听起来好像没什么,恩尼格玛最厉害的地方在于,核心的加密零件叫编码器,编码器的核心是齿轮,每敲下一个字母之后,齿轮就旋转一格,齿轮的转动会使得密码机内部的线路连接发生变化,加密结果就不一样了。
恩尼格玛就是延续维吉尼亚加密法的思路,加密的时候,每个字母都换一套加密算法。不过恩尼格玛的加密方式更加复杂,早期的恩尼格玛,齿轮只有六个格,也就是有六套加密算法。后一代的恩尼格玛,齿轮增加到了26个格,还是感觉不够用,于是又增加了第二个齿轮,上边也是26个格,这就代表加密算法增加到26乘以26,也就是676套算法,这样的恩尼格玛密码机,还只能供商业使用。德国军方的密码机是8个齿轮,换句话说,一台机器中包含了2000多亿套加密算法。
这是什么概念呢?你要知道,一套最新的大英百科全书包含6000多万个单词,咱们就算一个单词有10个字母,那把大英百科全书打上300遍,也用不完这2000多亿套加密算法。
恩尼格玛密码机使用的加密方式,实际上还是传统的方法,也就是替代和移位。虽然从「质」的角度来说,恩尼格玛密码机并没有太大的突破,但是在机械和电子的加持之下,在「量」的角度上,恩尼格玛密码机拥有了前所未有的优势。
单从理论上讲,这样的机器几乎是无法攻破的。
那英国的情报部门又是如何破解恩尼格玛的呢?
首先是波兰、法国和英国的接力合作,通过间谍活动和军事袭击,搞到了真正的恩尼格玛密码机,后来,法国人甚至弄到了军用版恩尼格玛机的使用说明书和操作指南,但是说明书只能帮他们弄清楚恩尼格玛的工作原理,并不代表就能破译密码。因为2000多亿套密码,你根本不知道德军用的是哪一套。当初德军就是假设敌人也有一模一样的机器,还是不能破解的情况下,才批准使用恩尼格玛机的。
波兰密码学家曾经做过一些尝试,可以一定程度地破解密码。这给了盟军很大的希望,英国开始招募大量的语言学家、人文学者、科学家和数学家,组成了一支7000人密码破译队伍,每天都有军方截获的各种德军通讯代码,被源源不断地送到这里,这些学者夜以继日地工作,希望从杂乱无章的信息中找到规律。
最终找到这把钥匙的,是艾伦·图灵,他是著名的数学家,也是公认的计算机科学的奠基人。
在研究过之前被破解的信息之后,图灵注意到,截获的德军信息里,其实大有规律可循。比如「希特勒万岁」这样的句子就经常出现。还有,每天早上六点,德军都会发一份当天的天气报告,而且格式非常固定,甚至单凭经验,就能确定哪个单词是德语里的天气那个单词WETTER。这样,知道了这个单词是WETTER,也知道加密之后的密文是什么,图灵就可以找方法去反推恩尼格玛的加密算法。
最笨的方法,当然是试着改一改手里这台恩尼格玛的设置,然后把WETTER这个词输进去,看看什么情况下,结果和加密之后的代码是一样的。但是咱们说过,加密算法以亿计算,一个一个试根本是天方夜谭。
图灵找到了一种思路,前边咱们说过,恩尼格玛密码机是靠齿轮的转动调整加密方案,这个方案的调整肯定也是按顺序的,在加密WETTER这个单词的时候,如果加密W用的是方案一,那么加密后边的E的时候用的必然是方案二。这样,图灵他们要找到的,就是连续的6套方案。而且他们发现,德军设计恩尼格玛的时候,还坚持一个原理,那就是加密后的代码不能和加密前一样,也就是说,字母E加密之后的代码,绝不可能还是字母E,这就又缩小了他们要搜索的范围。
总之,经过一番艰苦的努力之后,图灵把加密的可能性从上千亿种,缩小到了105万种。
当然,如果是靠人手工计算,105万仍然是个天文数字。为此,图灵专门设计了一种用于破解的机器,可以理解为早期专用的计算机,代号叫「炸弹」。「炸弹」的数量越多,破解的速度就越快。为了让这些「炸弹」发挥出极致的效果,图灵需要更多的人手和经费,为此,他和其他科学家甚至联名给首相丘吉尔写信求助,丘吉尔很快给英军的参谋首长下命令,让军方务必以最高的优先级,满足图灵他们的所有要求。
图灵和他的同事一共建造了49台「炸弹」,最快的时候,只要花上1个小时,就能破解出德军当天使用的密码。
这边,英国专家破解了恩尼格玛密码机,扭转了欧洲战场的局势。另一边,美军也破解了日本最厉害的密码机「紫色」,让美军在太平洋战场上获得了巨大的优势。
比如,1942年的6月,美军破解了一则日军信息,日本海军打算使用声东击西的战术,攻占美军中途岛海军基地。于是美军将计就计,军舰离开了中途岛,但是没有走远,日军原本打算进行一场偷袭,结果反过来被美军偷袭了。中途岛海战也成了太平洋战场上的转折点,自此以后,日本海军走上了下坡路。
美国太平洋舰队的总司令尼米兹上将说,美国在中途岛的胜利,其实就是情报的胜利。
一年之后,美国又破译了日军的一则信息,直接掌握了日本联合舰队总司令山本五十六的行程。尼米兹上将派遣了18架战斗机,直接击落了山本五十六的座机。山本之死给日军的士气造成了沉重的打击。
但是,打人家一拳,就要防人家一脚,美国知道,也一定有一大批来自日本的天才,在绞尽脑汁破解美军的密码。于是,美军决定另辟蹊径,选择了一条完全不同的道路,就是把少数民族的语言当作密码。
最早提出这个想法的,是一位叫作约翰斯顿的工程师。约翰斯顿的父亲是一名传教士,为了传教,他定居在纳瓦霍人的保留区。纳瓦霍人是美国原住民其中的一个部落,约翰斯顿在那里出生长大,完全沉浸在纳瓦霍人的文化中。纳瓦霍人本身数量就不多,约翰斯顿更是少有的同时掌握英语和纳瓦霍语的人才。
当美国参加第二次世界大战时,约翰斯顿因为年纪太大已经没法参军,但是他仍然想为国家尽一份力。
他就想到,对于外人来说,纳瓦霍语极其复杂难懂,如果每一处战地都用纳瓦霍人来当通讯员,用纳瓦霍语来通信,那可以说是无敌了。
于是约翰斯顿跑到了附近的军营,找到了这个营区的通讯官琼斯中校,向他提出了自己的构想。琼斯中校意识到,这个想法确实不错。于是他让约翰斯顿做一次示范,并且邀请了海军陆战队的高级军官来观摩。
约翰斯顿带来了两位懂英语的纳瓦霍人,两个人被安置在两个地方,军队指定了6条英文信息,由一位纳瓦霍人翻译成纳瓦霍语,再通过无线电传送给另一位纳瓦霍人,由他转译回英文。实验证明,6条信息都准确无误。用纳瓦霍语来通讯,看来是可行的。那接下来的问题是,使用纳瓦霍语真的可以万无一失吗?
为了检测纳瓦霍语的保密性有多强,海军陆战队把纳瓦霍语的录音交给海军情报部,请他们当作密码来破译。你要知道,就是海军情报部的专家们,破解了日军最难缠的密码系统「紫色」。但是这些解码专家,不眠不休地忙了三个星期,还是对纳瓦霍语束手无策。用他们的原话说,纳瓦霍语就是「一连串奇怪的喉音、鼻音、饶舌的声音」,专家们甚至无法用普通的文字做记录,更不要说破解了。纳瓦霍密码成功通过检验。
其实当时在美国境内,还有很多原住民的部落,但是在二战之前,有很多德国的人类学者来美国研究原住民,换句话说,很多原住民的语言已经不再是秘密。只有纳瓦霍族没有被国外的人类学家研究过,除了二三十个像约翰斯通这样的美国人以外,这个世界上,只有纳瓦霍人才能听得懂纳瓦霍语。
种种证据都表明,纳瓦霍语天然就是一套强力的密码系统。
于是美国海军陆战队招募了29名纳瓦霍人,组建了一只特殊的通讯队伍。
唯一遇到的问题,就是有些英文单词,像是「侦察机」、「驱逐舰」,这些在纳瓦霍语里边都没有,于是海军陆战队编了一套小词典,给这些英文单词都确定了对应的纳瓦霍说法。他们用各种鸟的名字来代表飞机,比如「侦察机」就是「猫头鹰」,用各种鱼的名字来代表战舰,比如「驱逐舰」就是「鲨鱼」。
他们还给26个字母都指定了纳瓦霍代码,这样,遇到生僻的人名或者地名,可以直接用拼写的方式来传递信息。对于那些常用的英文字母,比如字母E,他们会用三种代码代指同一个字母,这样,在拼写的时候,三种代码可以轮换使用,就避免了日军通过频率分析法来破译信息。
第二次世界大战期间,一共有420名纳瓦霍通讯员走进战场。他们为战争做出了巨大的贡献,而且还创造了一个历史记录。战争结束后,日军的情报首脑在接受审判时供认,他们曾经破解了美军使用的不少密码,但是对纳瓦霍密码始终是束手无策。也就是说,纳瓦霍密码是人类历史上少数从来没被攻破过的密码之一。
为了感谢纳瓦霍人对二战的贡献,美国政府将每年8月14日定为「纳瓦霍密语通话员国定纪念日」。
智能时代
前边咱们说到恩尼格玛密码机的时候,说恩尼格玛其实对于密码学,只有「量」的提升,没有「质」的飞跃。而计算机的出现,把密码学推进了智能时代。在质和量的层面上,都让密码学变得不一样了。
咱们先来说「量」的提升。用计算机程序就可以百分百模拟一个恩尼格玛密码机,而且,恩尼格玛受限于它的机械结构,在制作的时候,总是有这样那样的限制,计算机程序可以不受这样的限制,比如,计算机模拟的恩尼格玛机,可以不只有8个齿轮,100个齿轮都是可以实现的;每个齿轮上也不只是26格,可以是50格甚至100格。这些放在一起,可以形成的加密方案就是天文数字了。
而且,在计算机模拟中,还可以让齿轮完成不可思议的动作。比如有的齿轮顺时针转,有的齿轮逆时针转,有的齿轮越转越快,有的齿轮转十格之后就让它消失。这些规则在现实环境中,用机械是根本没法造出来的,但是用计算机却能仿真出来,这就使得安全度大大提升。而且计算机的运算速度比机械的加密仪器要快得多,能用更短的时间执行更复杂的加密任务。
前边说的这些还是「量」的提升,密码进入智能时代之后,还有质的飞跃,最开始的飞跃,就是字母不再是加密的最小单位了。
前边咱们说到的各种加密方式,不论是手工的还是机械的,都是用字母来替换字母。但是计算机是二进制的,一切的信息都可以用0和1来表示。每个字母在计算机里边其实也是一串0和1组成的代码。目前通用的代码叫「美国标准信息交换码」,每个字母都是用7位0101的代码来表示。比如小写的a是1100001,大写的A是1000001。我们用计算机加密的时候,面对的就不再是一个个字母,而是一个个的0和1,这7位数的代码,我们可以只加密前3位,或者只加密奇数位。加密的方法就更加五花八门了。
你看,计算机的出现,把信息数字化了,打破了语言规律的底层结构,所以说,数字化使得密码学进入了新的时代。
除此之外,在智能时代,密码学还有一个更大的颠覆,那就是加密的过程可以不再保密了。前边咱们提到那么多加密方法,都有一个特点,那就是千万不能让别人知道我们是用什么规则加密的,到了恩尼格玛密码机的时代,德军还要想方设法保密,不让敌人搞到机器的内部结构和使用说明。
可是进入智能时代之后,今天的加密手段,可以完全把自己的技术细节公开。打个比方来说,我给我认识的所有朋友都发了一把锁,跟他们说,你们以后给我写信呢,就寄个盒子过来,用这个锁把盒子锁上。
锁有无数把,但是钥匙只在我手里。而且我有自信,别的人不管怎么研究我的锁,也没法配出开锁的钥匙。
原理我们是搞明白了,但是这中间有一个关键的问题:你要怎么做,才能保证别人看到了你的锁,却还是配不出你的钥匙呢?
这其中最核心的原理,叫做「分解质因数」,什么意思呢?所谓质数,就是除了1和自己以外,没法被别的自然数整除的数。举个例子,12可以表示为3乘以4,那它就不是质数。13只能表示为1乘以13,所以13是个质数。同样,22不是个质数,23是个质数。
那如果我们用13乘以23,可以得到299,这个很容易计算。但是如果反过来,我问你说,你知道299是哪两个数的乘积吗?这个计算就非常麻烦,甚至只能用笨办法一遍遍地试。这个过程就是分解质因数。
数学家就发现,把两个质数乘起来,这个计算很容易,但是拿着结果反推,这个过程要难得多。新一代的加密手段,就利用了这个原理,两个质数相乘得到的那个大数,就是公开的「锁」,具体是哪两个数的乘积,这就是那个保密的钥匙。
这套加密算法,是由美国麻省理工学院的三位科学家罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)发明的,因为他们三个人的姓氏首字母分别是R、S、A,这套算法就被命名为RSA加密算法。
你可能会觉得,这么听下来,想要找到答案,麻烦虽然是麻烦,但是似乎也不太困难啊?用RSA算法进行加密的时候,用的那个数其实要大得多,数字越大,分解它要花的时间就会长得多。
1977年,为了验证这个算法到底有多可靠,三位科学家给一份科学杂志投稿了一篇文章,解释了RSA系统的工作原理,还给读者提出了一项挑战,在文章里发布了一串密码文,还给了一个129位的大数,也就是公开的那把锁,他们公开悬赏100美金,邀请大家来破解。
他们的密码最终有人破解了吗?其实是有的。但是,最终成功破解的,是一个600人组成的团队,他们借助了全球各地的计算机,甚至还动用了超级计算机,就这样,他们还花了17年的时间,才成功破解了这个密码。
你想,如果真的是在战场上,17年后才破解的军事情报,早就已经失去了效果。更何况,今天人们在使用RSA算法时,使用的那个数,远远不止129位,往往会使用300位以上的大数。想要分解这样一个数,大约需要把全球所有的计算机都集中起来,一块工作上亿年才能得到答案。
目前看来,RSA
是一种非常可靠的加密算法,所以被广泛应用在各种场合,像我们使用网银支付、手机支付,背后都有RSA算法在给我们保驾护航。
结语
编码与解码的战争
,是一场永远没有终结的拉锯战
,RSA算法
固然已经非常安全,但是已经有科学家在研究如何用量子计算机攻破RSA算法。想要找到一劳永逸无比安全的加密方式,几乎是不可能的。人类只能在这场战争中继续向前。
而在这场战争中,有很多因素起到过关键作用,比如数学
,比如物理学
,比如机械学
,比如计算机科学
,可是最关键的因素,还是人。攻破密码,靠的是己方的勤劳和智慧,也靠的是敌方露出的破绽,在这本书里,有一句话让我印象深刻:「尽管我们发明了窃贼打不开的锁,这不代表你就可以乱放钥匙。」不论技术如何向前演变,这场战争永远是人和人之间的战争,每一次的失败暴露的都是人性的弱点,而每一次的胜利,本质也是人类的胜利。
个人收获及总结
密码作为一种消息传递的方式,在人类历史的进程中发挥了巨大的作用,我相信关于密码学的相关知识也会被大家熟知,我更相信人类的智慧会推动社会的巨大进步,我们在享受成果的同时也不要忘记祖辈们付出的巨大贡献,让我们一起脱帽致敬我们的前辈。若是我的文章对你有所启发,那将是我莫大的荣幸。希望和您一起精进,成为更好的自己。
网友评论