您的位置:首页 >每日动态 >   正文

奇怪的现代密码学:最好的加密方式 就是公开

导读 现在!在你的脑子里想一个五位数,那么如何悄无声息的把它传递给我呢?来看一个好法子,假设你想的数字是 66666 或者 12345 等等。请将...

现在!在你的脑子里想一个五位数,那么如何悄无声息的把它传递给我呢?

来看一个好法子,假设你想的数字是 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 hitle。

哎,不仅如此,德国人还很喜欢汇报,时不时就要给长官发一句:报告长官,啥事没有!再附一句 heil hitle。

按照礼节那长官也得回一句( Heilhitle )表示啊收到了~

照理来说,这屁大点事直接发就好了,不行,至少在德国人那里不行,要保守元首所有的秘密,包括这份愚忠!必须恩格玛一下!

这严谨又白给的操作很快就让图灵拿到很多明密对应的线索,依靠这些线索他和他的同事戈登·韦尔奇曼发明出一种叫做“炸弹机”的解密机,真的硬生生逆向破解了恩格玛机。

所以这又一次说明像古典密码这样,知道怎么加密就能知道怎么解密的对称加密方法,从根本上来说是肯定会被破解的,只不过是时间问题罢了。

现代密码学

那有没有一种加密方式,信息发出者只知道怎么加密不知道怎么解密,而信息接受者既知道怎么加密又知道怎么解密的方法呢?

其实这就是现代密码学的研究方向之一,也就是如何实现非对称加密。

这种加密方式,在古典密码的基础上,引入了密钥的概念,将密钥分为公钥和私钥,公钥用来加密,私钥用来解密。

这样即便是把加密方式公开出去,只要私钥仍然安全,这个加密系统就不会被破解。

所以现代密码学家们公开加密方式的做法,其实是不会影响到加密系统的安全的。

还记得我们开头的那个魔术游戏么?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 ),又要和φ( n )互质,这个 E 就是公钥,私钥则通过计算 E 的模φ( n )乘法逆元求得。

当我们在只知道公钥的情况下,想推算出私钥,必然需要得到最开始的两个质数。

因为这里为了方便大家理解所取质数比较小,而通常情况下,这个质数是非常大的,即便是我们在公钥里可以知道两个质数的乘积,但想通过因式分解逆推出两个质数,按照现有的计算水平至少要算到这篇文章阅读量破千万。

不过理论上量子计算机倒是行,额。。

除非你能在量子计算机上凑齐 4096 个逻辑量子比特来有效运行 Shor 算法,但由于量子需要错误纠正,你操作的量子计算机至少需要数百万个物理量子比特。

额,目前最先进的也仅有数十到数百量子比特的规模。

这也意味着未来几十年内暴力破解类似 RSA 算法中的单向陷门函数基本没戏。

所以,对现在的我们而言,加密算法已经很强大了,但这万万不代表着绝对的安全。

最后

因为这些强大的加密算法只能保证你银行卡里的钱不被随意篡改。

但如果使用者防范意识不够强,在某些网站输入了自己的密码,又或者用同样的用户名和密码注册了很多不同的 app,这些都极有可能被黑客拿来暴力破解。

回看密码学的每个时代,似乎人一直都是严谨密码的最大漏洞。

正如美国的密码学学者布鲁斯·施奈尔所言:“安全就像链条,它取决于最薄弱的环节。”

在信息安全的世界里,技术可以构建起高墙,而在人类的世界里,富有情感成了安全里最大的漏洞。

虽然密码学很枯燥,但我们仍满怀热情,希望更多人知道,意识到,提高警惕保护好自己,这才是现代密码学的终门。

免责声明:本文由用户上传,如有侵权请联系删除!