扫码打开虎嗅APP
本文来自微信公众号:差评X.PIN (ID:chaping321),作者:橙子,视频制作:B站差评君,美编:焕妍,题图来自:视觉中国
现在,在你的脑子里想一个五位数,那么如何悄无声息地把它传递给差评君呢?
来看一个好法子,假设你想的数字是66666或者12345等等。
请将它与差评君的幸运数字2359相乘,只取结果的后五位打在公屏,我就能知道你所想的数字是什么。准备好了么?
接下来就是debug的时刻,将你取到的五位数再乘12039,结果的后五位就是你所想的数字。看起来像个魔术对吧?
其实除了魔术,它还有个更牛的出处——现代密码学,甚至你的银行卡、邮件、聊天软件也和它有着千丝万缕的联系。
所以它和现代密码学有什么关系,它的原理又是什么?为什么要设计成这样呢?我们来扒一扒不一样的密码学!
天才数学家的现代化密码学构想
聊到密码学,就不得不提起那个男人!克劳德·艾尔伍德·香农。
他在1949年发表的《保密系统的通信理论》一书,用数学的方式将密码学划分为古典密码和现代密码。但因为现代密码学的理论听起来太二了,诞生后竟被晾了三十多年。
比如现代密码学中的柯克霍夫原则讲(Kerckhoffs):密码系统应该被所有人都知道加密方式是什么,这一听,不是神经病言论吗,加密方式都让人知道了,还研究个毛啊?
再比如Vernam提出的符合香农完善保密的一次一密理论,听起来更神经了,用一次密码换一次谁受得了。但如果看完古典密码踩过的坑,你就知道这些言论有多合理了!
古典密码
在古典密码的时代,密码学的概念是比较模糊的,尽管大量被用在军事领域,但加密方式更像是一种艺术行为。
反正就一个理念:瞎换乱转,你猜去吧。
这可不是我在开玩笑,期刊论文里就是这么写的。虽然维基百科中,古典密码被总结为替换式密码或移项式密码又或者两者混合。
但要注意,这里是总结为而不是定义为,这就说明古典密码仍是一个充满想象力的名词。
比如对外国人而言,其实中文本身就是个古典密码。
举个例子,what is your name这句话,我们逐一替换成汉语,再移项就变成了:你的名字是什么。这不是完美符合古典密码替换移向的要求嘛。
当然这种推理也确实很脑洞大开,但毕竟古典密码本就是在用脑洞创造一种,你懂我懂他不懂的新语言。
比如先秦兵书《六韬》中提到的阴符,这是由钓鱼佬姜太公姜子牙发明的,为了快速传递前方战报,而不被敌方知晓,他发明了一种用不同长度的鱼竿来传递战报的方法,这也是我国史料记载中最早的军事密码。
再比如公元前700年,古希腊军队用一种叫作Scytale的圆木棍来进行保密通信。其使用方法是:
把长带状羊皮纸缠绕在圆木棍上,然后在上面写字;解下羊皮后上面只有杂乱无章的字符,只有再次以同样的方式缠绕到同样粗细的棍子上,才能看出所写的内容。
柯南中的密码棒灵感就来源于此。
当然除此之外还有很多好玩的古典密码,比如凯撒密码,栅栏密码等等。
这里留给万能小伙伴补充,但古典密码存在一个致命的弱点,那就是太对称了。这是什么意思呢?
这个对称有两层含义,一是古典密码的加密是可逆的,一旦知道怎么加密,很容易就可以反推出怎么解密。所以古人他只是古他不傻啊,随便抓个活口不就知道这密码怎么玩的了吗?
另一个对称的意思则是,不管你如何对明文进行替换,总会形成一种明文和密文的一一对应关系,但这也存在一个很大的弊端,那就是语言的使用是有规律性的。
比如这张图表,这是一份来自皮特网对3.5万亿份文稿分析后得出的字母和单词使用频率分析报告,也就说明不管你怎么替换,经过多少层替换,只要被截获的密文一多,总会被频率分析法拿捏。
当然虽然问题找出来了,但显然古典密码学家们并没有很好地解决这个问题,甚至间接证明了古典密码是真不行。
比如二战时期,古典密码的巅峰之作——恩格码机(Enigma)。
在加密时,只要在机器的键盘上输入想要加密的明文(dianzan),亮起来的就是被加密好的密文。而且明文中相同的字母也会被加密成了不同密文,这就很好地防止了频率分析法。
另外即便知道其运作原理也是很难破解的。
这是怎么做到的呢?
我们来到恩格玛机的内部,转子装置,在这个装置的右端输入轮上,有26个触点,分别链接键盘上的26个字母。
装置的中部由同样带有26个触点的多个转轮组成,但与输入轮有些区别,在转轮的内部额外多了一些杂乱的交换机制,意味着输入板的字母每经过一个转轮时被替换1次。
而在装置的末端有一个叫做反射板的装置,它仍有26个触点,这里的触点两两组合组成同游泳比赛一样的折返点。
并且字母会在这里被再次交换后,仍要重返转轮,再次进行替换,最终才能回到起点。
这样就完成了一次加密流程,可以看出这是多次替换的叠加,但其实恩格玛机还有点睛之笔,在每次按下键盘时,一个特殊的杠杆装置会带动转轮转动一次,并且转轮上有一个特殊的轮纹,当前一个转轮转动一周后,后一个转轮也会转动一次。
这就使得按下每个字母时用到的加密线路都是不一样的,这样频率分析法也就失效了。
另外这样的设计,即便是知道其运作原理,逆向破解也是非常困难的。
以最初的恩尼格玛机为例,它的内部有三排刚刚提到的轮纹轮盘,每个轮盘上有26个字母,皆可转动,这样来看我们就有一万七千五百多种方式设置轮盘的初始位置。
除此之外,为了保险起见它的外侧还附加了一组交换机制,也就是说如果连通o和e,当按下o,其实相当于是按下了e。
假设我们每次任选6对进行交换,根据概率论的算法,我们又产生了一千多亿种可能,仅是这些初始位置的方案已经有1700万亿种可能了。
而后代的恩尼格玛机,甚至一度将轮盘数增加到了8个,要逆向推算的运算量更是指数级上升,在没计算机的时代,想通过逆向穷举的方式破解几乎是天方夜谭。
况且当时的恩尼格玛机每天都会更换一次初始方案。这也就说明,当天如果算不出,第二天就要重新计算。这给暴力破解又上了一层难度。
但了解二战的小伙伴都知道,恩格玛机最终还是被破解了,甚至没等到计算机诞生。
1940年,计算机之父,英国数学家阿兰·图灵,就破解了恩尼格玛机。
但刚刚不是说没计算机不可能破解嘛?这说法确实没错,但遭不住德国人太轴又太飘啊,不管发啥,都得来一句heil hitler。
哎,不仅如此,德国人还很喜欢汇报,时不时就要给长官发一句:报告长官,啥事没有!再附一句heil hitler。
按照礼节那长官也得回一句(heil hitler)表示啊收到了~照理来说,这屁大点事直接发就好了,不行,至少在德国人那里不行,要保守元首所有的秘密,包括这份愚忠!必须恩格玛一下!
这严谨又白给的操作很快就让图灵拿到很多明密对应的线索,依靠这些线索他和他的同事戈登·韦尔奇曼发明出一种叫做“炸弹机”的解密机,真的硬生生逆向破解了恩格玛机。
所以这又一次说明像古典密码这样,知道怎么加密就能知道怎么解密的对称加密方法,从根本上来说是肯定会被破解的,只不过是时间问题罢了。
现代密码学
那有没有一种加密方式,信息发出者只知道怎么加密不知道怎么解密,而信息接受者既知道怎么加密又知道怎么解密的方法呢?
其实这就是现代密码学的研究方向之一,也就是如何实现非对称加密。
这种加密方式,在古典密码的基础上,引入了密钥的概念,将密钥分为公钥和私钥,公钥用来加密,私钥用来解密。这样即便是把加密方式公开出去,只要私钥仍然安全,这个加密系统就不会被破解。
所以现代密码学家们公开加密方式的做法,其实是不会影响到加密系统的安全的。
还记得我们开头的那个魔术游戏么?
2359就是一个公钥,任何人都可以用它来加密。理论上差评君只要保护好用来解密的私钥12039,这就是一个非对称加密。
原理也很简单,当公钥与私钥相乘时你会发现结果为28400001,意味着五位以内的数与他们两个接连相乘后,相当于乘了00001。
但这对于应用级非对称加密而言,显然不够安全,想更进一步,要用到数学上一种特殊函数,
叫做活板门单向函数,又叫单向陷门函数,这种函数正向计算非常容易,但想反推回去几乎是一件不可能的事情,不过如果知道某些关键信息,反推也会变得非常容易。
比如非常著名的RSA算法,银行、邮件、聊天软件,几乎所有你能想到的涉及数字的领域都在它的保护之下,算得上妥妥的应用级了,它的加密原理使用的就是单项陷门函数。
加密时只需要按照公钥的数据求幂再求余就可以得到密文。举个简单的例子,比如需要加密的数字是5,公钥是(7,33),只需要按照公钥的数据将明文5求7次方再对33求余,可以求得密文14。
如果想按照怎么加密就怎么解密的思路逆推明文,第一步反推就会卡住,因为对33求余得14的数有无限多种可能,这也意味着这样无法确定出明文到底是什么。
但如果持有私钥(3,33),我们只需要按照私钥的数据对密文再次求幂求余。就可以还原出明文5。这就实现了加密与解密过程的分离,那既然无法反推,那能不能通过公钥算出私钥呢?
来看看私钥和公钥的制作过程:
首先我们选取两个质数,质数的乘积记为N,通过欧拉函数φ(n)=(p-1)*(q-1),计算出函数φ,之后我们选取一个整数E,E既要满足1私钥则通过计算E的模φ(n)乘法逆元求得。
当我们在只知道公钥的情况下,想推算出私钥,必然需要得到最开始的两个质数。
因为这里为了方便大家理解所取质数比较小,而通常情况下,这个质数是非常大的,即便是我们在公钥里可以知道两个质数的乘积,但想通过因式分解逆推出两个质数,按照现有的计算水平至少要算到这期视频破千万。
不过理论上量子计算机倒是行,额……除非你能在量子计算机上凑齐4096个逻辑量子比特来有效运行Shor算法。但由于量子需要错误纠正,你操作的量子计算机至少需要数百万个物理量子比特。
额,目前最先进的也仅有数十到数百量子比特的规模。这也意味着未来几十年内暴力破解类似RSA算法中的单向陷门函数基本没戏。
所以,对现在的我们而言,加密算法已经很强大了,但这万万不代表着绝对的安全。
最后
因为这些强大的加密算法只能保证你银行卡里的钱不被随意篡改。
但如果使用者防范意识不够强,在某些网站输入了自己的密码,又或者用同样的用户名和密码注册了很多不同的app,这些都极有可能被黑客拿来暴力破解。
回看密码学的每个时代,似乎人一直都是严谨密码的最大漏洞。
正如美国的密码学学者布鲁斯·施奈尔所言:“安全就像链条,它取决于最薄弱的环节。”
在信息安全的世界里,技术可以构建起高墙,而在人类的世界里,富有情感成了安全里最大的漏洞。
虽然密码学很枯燥,但我们仍满怀热情,希望更多人知道,意识到,提高警惕保护好自己,这才是现代密码学的终门。
图片、资料来源
密码学的发展和技术—肖微
古典密码术—谭亦夫宋培非李子臣(北京印刷学院)
数学不好也能听懂的算法—技术蛋老师
恺撒密码,完美加密,与现代密码学初探—乐正垂星
基于单向陷门函数的加密算法——郭姝施滔滔张新玉
《图解密码技术》——结城浩著周自恒译
密码争夺战——小浪底不浪
本文来自微信公众号:差评X.PIN (ID:chaping321),作者:橙子,视频制作:B站差评君,美编:焕妍