RSA
迪菲与赫尔曼完美地解决了密钥分发的难题,从此,交换密钥就很简单了,爱丽丝与鲍勃完全可以可以在村头大喇叭里喊话,就能够交换出一个密钥。但加密的方式,依然是对称加密的。
DH 协议交换密钥虽然方便,但依然有一些不尽人意的麻烦处,爱丽丝还是要与鲍勃对着嚷嚷半天,二人才能生成密钥。当爱丽丝想要交换密钥的时候,若是鲍勃正在睡觉,那爱丽丝的情书,还是送不出去。
迪菲与赫尔曼在他们的论文中,为未来的加密方法指出了方向。 通过单向函数,设计出非对称加密,才是终极解决方案。 所谓非对称加密,就是一把钥匙用来合上锁,另一把钥匙用来开锁,两把钥匙不同。锁死的钥匙,不能开锁。开锁的钥匙,不能合锁。
麻省理工的三位科学家,他们是罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman),他们读了迪菲与赫尔曼的论文,深感兴趣,便开始研究。迪菲与赫尔曼未能搞定的算法,自他们三人之手,诞生了。
2002 年,这三位大师因为 RSA 的发明,获得了图灵奖。 但不要以为 RSA 就是他们的全部,这三位是真正的大师,每一位的学术生涯都是硕果累累。让我们用仰视的目光探索大师们的高度。
李维斯特还发明了 RC2, RC4, RC 5, RC 6 算法,以及著名的 MD2, MD3, MD4, MD5 算法。他还写了一本书,叫 《算法导论》,程序员们都曾经在这本书上磨损了无数的脑细胞。
萨莫尔发明了 Feige-Fiat-Shamir 认证协议,还发现了微分密码分析法。
阿德曼则更加传奇,他开创了 DNA 计算学说,用 DNA 计算机解决了 “旅行推销员” 问题。 他的学生 Cohen 发明了计算机病毒,所以他算是计算机病毒的爷爷了。他还是爱滋病免疫学大师级专家,在数学、计算机科学、分子生物学、爱滋病研究等每一个方面都作出的卓越贡献。
1976 年,这三位都在麻省理工的计算机科学实验室工作,他们构成的小组堪称完美。李维斯特和萨莫尔两位是计算机学家,他们俩不断提出新的思路来,而阿德曼是极其高明的数学家,总能给李维斯特和萨莫尔挑出毛病来。
一年过后,1977 年,李维斯特在一次聚会后,躺在沙发上醒酒,他辗转反侧,无法入睡。在半睡半醒、将吐未吐之间,突然一道闪电在脑中劈下,他找到了方法。一整夜时间,他就写出了论文来。次晨,他把论文交给阿德曼,阿德曼这次再也找不到错误来了。
在论文的名字上,这三位还着实君子谦让了一番。 李维斯特将其命名为 Adleman-Rivest-Shamir,而伟大的阿德曼则要求将自己的名字去掉,因为这是李维斯特的发明。 最终争议的结果是,阿德曼名字列在第三,于是这个算法成了 RSA。
RSA 算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但想要对其乘积进行因式分解却极其困难,因此可以将乘积公开,用作加密密钥。
例如,选择两个质数,一个是 17159,另一个是 10247,则两数乘积为 175828273。 乘积 175828273 就是加密公钥,而 (17159,10247)则是解密的私钥。
公钥 175828273 人人都可获取,但若要破解密文,则需要将 175828273 分解出 17159 和 10247,这是非常困难的。
1977 年 RSA 公布的时候,数学家、科普作家马丁加德纳在 《科学美国人》 杂志上公布了一个公钥:
114 381 625 757 888 867 669 235 779 976 146 612 010 218 296 721 242 362 562 842 935 706 935 245 733 897 830 597 123 563 958 705 058 989 075 147 599 290 026 879 543 541
马丁悬赏读者对这个公钥进行破解。漫长的 17 年后,1994 年 4 月 26 日,一个 600 人组成的爱好者小组才宣称找到了私钥。私钥是:
p:3 490 529 510 847 650 949 147 849 619 903 898 133 417 764 638 493 387 843 990 820 577
q:32 769 132 993 266 709 549 961 988 190 834 461 413 177 642 967 992 942 539 798 288 533
这个耗时 17 年的破解,针对的只是 129 位的公钥,今天 RSA 已经使用 2048 位的公钥,这几乎要用上全世界计算机的算力,并耗费上几十亿年才能破解。
RSA 的安全性依赖于大数分解,但其破解难度是否等同于大数分解,则一直未能得到理论上的证明,因为未曾证明过破解 RSA 就一定需要作大数分解。
RSA 依然存在弱点,由于进行的都是大数计算,使得 RSA 最快的情况也比普通的对称加密慢上多倍,无论是软件还是硬件实现。速度一直是 RSA 的缺陷。一般来说只用于少量数据加密。
RSA 还有一个弱点,这个在下文中还会提及。
在密码学上,美国的学者们忙的不亦乐乎,成果一个接一个。但老牌帝国英国在密码学上,也并不是全无建树,毕竟那是图灵的故乡,是图灵带领密码学者们在布莱切里公园战胜德国英格玛加密机的国度。
英国人也发明了 RSA,只是被埋没了。
60 年代,英国军方也在为密码分发问题感到苦恼。1969 年,密码学家詹姆斯埃利斯正在为军方工作,他接到了这个密钥分发的课题。他想到了一个主意,用单向函数实现非对称加密,但是他找不到这个函数。政府通讯总部的很多天才们,加入进来,一起寻找单向函数。但三年过去了,这些聪明的脑袋,并没有什么收获,大家都有些沮丧,这样一个单项函数,是否存在?
往往这个时候,就需要初生牛犊来救场了。科克斯就是一头勇猛的牛犊,他是位年轻的数学家,非常纯粹,立志献身缪斯女神的那种。 虽然年轻,但他有一个巨大优势,当时他对此单向函数难题一无所知,压根儿不知道老师们三年来一无所获。于是懵懵懂懂的闯进了地雷阵。
面对如此凶险的地雷阵,科克斯近乎一跃而过。只用了半个小时,就解决了这个问题,然后他下班回家了,并没有把这个太当回事,领导交代的一个工作而已,无非端茶倒水扫地解数学题,早点干完,回家路上还能买到新出炉的面包。他完全不知道自己创造了历史。科克斯是如此纯粹的数学家,后来他听闻同事们送上的赞誉,还对此感到有些不好意思。在他眼里,数学应该如哈代所说,是无用的学问,而他用数学解决了具体的问题,这是令人羞愧的。
可惜的是,科克斯的发明太早了,当时的计算机算力太弱,并不能实现非对称的加解密。所以,军方没有应用非对称加密算法。詹姆斯与科克斯把非对称加密的理论发展到完善,但是他们不能说出去,军方要求所有的工作内容都必须保密,他们甚至不能申请专利。
军方虽然对工作成果的保密要求非常严格,但对工作成果本身却不很在意。后来,英国通讯总部发现了美国人的 RSA 算法,觉得好棒棒哦。他们压根就忘记了詹姆斯与科克斯的 RSA。通讯总部赞叹之余,扒拉了一下自己的知识库,才发现自己的员工科克斯早已发明了 RSA 类似的算法。 官僚机构真是人类的好朋友,总能给人们制造各种笑料,虽然其本意是要制造威权的。
科克斯对此并不介怀,他甚至是这样说的:“埋没就埋没吧,我又不想当网红,要粉丝干嘛?那些粉丝能吃?” 原话不是这样的,但表达的意思基本如此。
迪菲在 1982 年专程去英国见詹姆斯,两人惺惺相惜,真是英雄相见恨晚。可惜詹姆斯依然不能透漏他们对 RSA 的研究,他只告诉了迪菲:“你们做的比我们要好。” 全球各国的科学家们,可以比出谁更好,但全球各国的官僚们,却很难比出谁更颟顸,他们不分高下。