密码学
前段时间上映了一部电影叫,悬崖之上,不知道大家有没有看,它主要讲的是一群特工,在执行一项秘密行动的故事,在执行任务的过程中,需要传递情报,经常会用密码,俗话说,君不密,则失臣,臣不密,则失身,已事不密则害成,换句话说,如果没有机密,就会有危险,孙子兵法里也说,知己知彼,百战不殆,说明在战争中,没有比刺探别人的情报,我们回顾历史,有多少权力争权和战争,背后就有多少秘密,密码学,就是这样诞生的,我们也经常在电影电视上看到过很多加密方法,但我估计你可能不知道它背后的原理,今天我们就聊一聊,密码的前世今生。
什么是密码
虽然现在我们这么称呼,其实在古代,人们是先研究了密,然后再去研究码,密码的历史非常久远,刚开始是从秘密书信开始,人们的想法就是,先把信里的内容给藏起来,据文献记载,在公元前5世纪,希腊和波斯之间正在打仗,希腊这边呢,为了去送信,会把信写在木板上,然后在上面涂上一层腊,收信人拿到之后,把腊刮掉,就能看到信上的字,还有一种方法,是把信史的头发剃光,把信写在头皮上,等信史的头发长出来之后,然后再去送信,到了之后再把头发给剃了,这种直接掩盖信息的方法,叫做隐匿法,这种方法很常见,现在还有在使用,比如,在电影上经常看到的,用隐形墨水写信,或者把信放在胶囊吞到肚子里等等,这种方法能被用了这么久,说明这个方法很管用,但是,这个方法它也有很大的缺点,就是如果敌人非常认真找的话,情报就容易暴露,于是,人们就在研究,就是说,有没有另外一种可能,就算敌人找到了信,但还是看不懂写的是什么,顺着这个思路,各种密码就出现了,密码刚开始呢,出现了很多种方法,但是原理只有两个,一种是移位法,另一种是替代法,什么是移位法,就是把想要说的那个字母,向后移动一位,比如,你想要写A,你就写成B,想写B,你就写成C,依次类推,就敌人看到信之后,也看不懂上面的意思,但是如果说能找到这里的规律,也就被破译了,这种方法,最早是由凯撒大帝发明的,所以移位式加密,也叫凯撒加密法,另一种替代法,就是先将字母随意搭配,再用配好的字母替代原来的字母,比如我们可以指定用A代表V,B代表T等等,就是说替代的规则是人提前定好的,所以更加灵活,也更难破解。
凯撒密码
这两种方法虽然很好用,但是它都有本质上的弱点,就是这些拼出来的字母,每一个出现的频率是不一样的,比如在英文里头,字母A和E会经常出现,所以不管哪个方法,只要是用一套加密方案,那么只要统计字母出现的频率。就能找到破解的方向,于是人们又在这两个方法的基础上,发明了一套新的加密方法,这个方法是由一个叫维吉尼亚的法国外交官发明的,所以叫做维吉尼亚加密法,这个方法最大的特点,是它给每个字母都设了一套加密方法,一个字母有26套方案,通讯的双方需要提前约定好一组数字,这样就知道哪个字母用哪一套方案了,维吉尼亚加密法确实提高的密码的安全性,但是用起来有点麻烦,在手工计算的时代,并没有被广泛的应用。
二战德国恩尼格玛密码机
恩尼格玛密码机
直到机械时代才算真正使用上,在两次世界大战中,对加密的技术需求非常强烈,一方面因为机械的出现,提高了效率,另一方面因为战争的需要,也让加密的场合就越来越多,比如,在战争中,会使用大量的无线电通讯,但是,因为双方都能截获这些信号,所以就需要加密,在第二次世界大战中,德国发明了一种叫恩尼格玛的密码机,因此出现了密码学历史上最著名的密码攻防战,就是英国的密码专家,攻破德国恩尼格玛密码机,恩尼格玛是一种机械电子加密机,也是第一个量产的加密机器,它的样子有点像打字机,有键盘有显示装置,内部是机械和电子零件,操作员每敲一下字母,经过电子和机械的转换,就会出现一个对应的字母,这就是加密之后的密码,听起来似乎没什么特别,但是它最牛的是,它的核心叫编码器,编码器的核心是齿轮,每敲一次,齿轮就旋转一格,齿轮只要一转,内部的线路连接就会发生变化,加密的结果就会不一样,早期的恩尼格玛齿轮只有6格,也就是只有6套加密方法,后来,齿轮增加到26格,但是感觉还不够用,就又增加了一个同样的齿轮,就是26乘26,也就是676套算法,这样的密码机也是仅仅够商业使用,德国军方的密码机是8个齿轮,这8个齿轮有多少套加密方案呢,这个数字可能你都想象不到,它有2000多亿套加密算法,这是什么概念呢,我们知道,最新的大英百科全书,也只有6000多万个单词,咱们就算它每个单词平均有10字母,也就是说我们把每个单词打上300遍,也用不完全部的加密方法。
恩尼格玛密码机内部结构
从理论上讲,这样的机器几乎是无法攻破的,所以,在战争中德军大约装备了三万台这样的机器,可见德国人对它的信任,恩尼格玛密码机它的原理,其实用的还是传统的方法,移位法和替代法,只是大大提高了数量级,那英国的情报部门又是怎么破解的呢,其实它是由波兰,法国和英国,这个三个国家合作完成的,先是通过间谍活动和军事袭击,搞到军方的恩尼格玛密码机,法国又弄来了它的使用说明书,但是有了说明书,也不能直接破译,因为有2000多亿套方案,你根本不知道到底用的哪一套,当初德军就是假设如果敌人弄到了一模一样的机器,也不能破解,这才批准使用恩尼格玛密码机,波兰的密码学家,做了一些尝试,能在一定程度上破解密码,这给了英国很大的希望,于是开始大量招募语言学家,科学家,还有数学家,组成了一支7000人的密码破译队伍,这些学者每天24小时不停的做解密工作,最终破译成功是,著名的数学家艾伦图灵,也是计算机科学的奠基人,电脑用的英伟达显卡的那个图灵架构,就是以他的名字命名的,图灵发现截获的德国密码里,有大量的规律,比如,像希特勒万岁这样的句子就经常出现,还有每天早上六点,德军要发一份当天的天气预报,而且格式非常固定,比如,仅仅凭着经验就判断出天气这个单词,然后图灵用出现频率高的单词,来进行反推,但是我们前面说过,这个机器它有2000多亿种加密方式,最后图灵也仅仅将范围缩小到105万种,但是如果用手来算,它也是个天文数字,图灵也专门为它设计了一种破译的机器,这就是计算机最早的原型,它的代号叫做炸弹,炸弹的数量越多,破解的速度也就越快,最终他们制造了49个机器,最快只需要1个小时,就能破译德军的密码,从这之后,英国扭转了德国在欧洲的局势。
纳瓦霍密码
纳瓦霍人
当然战争是一场博弈,你能截获对方的情报,对方也能破解你的情报,在太平洋的战场上,美军就想,找到一种没有规律可言的加密方法,于是就想到了用少数民族的语言直接当作密码,我们国家当时在抗战的时候,也用温州话做过通讯,最早提出这种想法,是一位叫约翰斯顿的工程师,约翰斯顿是父亲是一名传教士,为了传教,他生活在纳瓦霍人的保留区,纳瓦霍人是美国原住民其中的一个部落,本来数量就很少,约翰斯顿最极少的同时掌握英语的纳瓦霍语的人,他明白纳瓦霍语很少有人知道,别人根本就听不懂,军方为了检验它的保密性,美军将纳瓦霍语的信息交给了情报部门,让他们当成密码来破译,结果这些专家们,没日没夜地忙了三个星期,连一点头绪都没有,专家们甚至无法用文字来记录,更不用说破译了,纳瓦霍密码成功通过了检验,其实美国还有很多的原住民和语言,纳瓦霍人因为是有和外面的人接触过,所以说,他的语言,很少有人会知道,它就是天然的加密语言,于是美军招募了29名纳瓦霍人,他们为战争做出了巨大的贡献,而且还创造了一个历史记录,就是纳瓦霍密码是世界从没有被破译的密码之一,美国为了纪念纳瓦霍人为二战作出的贡献,还将每年的8月14日定为,纳瓦霍密语通话员国定纪念日
现代计算机时候密码
到了现代,由于计算机的出现,密码的加密方案,不管是从质还是量,都达到质的飞越,我们都知道计算机是二进制,一切的信息都可以有O和1来表示,每个字母在计算机都是0和1的代码,目前通用的代码叫做美国标准信息交换码,每个字母都是由7个0.1,0.1的代码组成,我们用计算机加密的时候,其实就是不同的0和1,计算机的出现,把语言数字化了,打破了语言规律的底层结构,数字化让密码学进入了新的时代,还有一个非常重要的变化就是,就是加密的过程不用再保密了,以前的加密方法,它都有要保密,不能让别人知道加密规则,可是现在,我们完全公开技术细节,这里加密最核心的原理叫分解制因数,这个技术很关键,什么意思呢,我们在学校都学过质数,所谓质数就是不能被其它数字整除的数字,举个例子,12能够被2.3.4.6整除,它就不是质数,13不能被整除,它就是质数,同样,23也是质数,如果我们将两个质数相乘,比如13乘23,得出299,这个很容易计算,但是如果问299是哪两个质数相乘的,这个就计算起来很困难,只能用笨方法一遍一遍地试,这个方法就叫分解制因数,结果只有我知道,这就是保密的钥匙,这套加密算法是由美国麻省理工的三位科学家发明,这三位科学家的首字母为RSA,所以这套算法被命名为RSA加密算法,可能有人觉得,这样的算法,麻烦是麻烦,但也不是太困难啊,其实一般在用RSA加密的时候,用的这个数字会非常的大,数字越大,分解它所需要的时间就越长,1977年,为了验证这个算法有多可靠,这三个科学家给杂志上投了一篇文章,解释了RSA加密算法的工作原理,还下一个挑战书,写了一串密码,然后给了一个129位的数字,这串数字就是公开的那把锁,悬赏100美元,邀请大家来破解,最终这个密码还是被破解了,但是它是怎么破解的呢,它是由600人组成的团队,他们借助了全球各地计算机,还动用了超级计算机,即使是这样,也花了整整17年的时间,成功破解了密码,这也证明了它的可靠性,如果是在战场上,17年后得到的情报,破解了也没啥用。
今天我们在用RSA算法的时候,使用的数一般都是300位以上,想分解这样一个数,需要把全球的计算机集中起来,一块工作上亿年才能破解,目前看来啊,RSA加密算法,是非常可靠的加密方式,所以它也被广泛应用在各种场合,比如我们使用的网银支付,网络和手机支付等等,背后都有使用这种算法。
其实讲到这,故事也就讲完了,虽然说现代社会,我们的加密方式非常可靠,但我们回顾密码学的历史,每一个时代都是加密和被破译的过程,魔高一尺,道高一丈,你会发现,这是一场永远都没有终结的拉锯战,现在已经有科学家,用量子计算机来破译RSA算法,所以并没有一劳永逸的加密手段,这将是一场没有终点的战争。