“It must not be required to be secret, and it must be able to fall into the hands of the enemy without inconvenience.”
这是著名的密码学柯克霍夫六大原则之一。
软件开源与安全性的议题,近来因美国政府可能管制一事,引发了极大的讨论与关注。
区块链堪称是与开源最相关的技术之一,而作为区块链起源之一的密码学,其实早已对此有了答案。
在提到密码或者密码学的时候,很多人的脑海里可能会浮现出两种截然不同的形象。
一种在神秘中带着些许浪漫主义色彩,例如福尔摩斯在探案中遇到的跳舞小人(参见The Adventure of the Dancing Men)或者《达芬奇密码》中的暗号,常见诸于大众文学和影视作品。
另一种则显得冰冷无情甚至有些乏味,例如根据一段短短的口令,电脑程序把好好的文件变成了一串无法识别的“乱码”,这也是实际上我们身边的各种电子设备每时每刻都在使用的密码。为什么我们会对同一个概念有着两种截然不同的印象?
难道是大众传媒骗了我们吗?其实答案并不是非此即彼那么简单:两种关于密码学的描述都是正确的,只不过前者通常被我们称为“古典密码学”,而后者被称为“现代密码学”——也就是今天的人们研究和使用的密码学。
虽然两者同样顶着“密码学”的名字,但是它们在本质上却极为不同,一言以蔽之,“古典密码学属于艺术,现代密码学属于科学”。
古典密码学
具体来说,古典密码学的安全性来源于密码设计者的知识积累和创造力,以及对所设计方案的保密性。
例如二战期间美军利用纳瓦霍语难以学习及了解的特性,以该语言为基准设立了一套通信术语系统并大量招募纳瓦霍人入伍担任译码员(2002 年的电影《风语者》即反映了相关事迹)。
对于日本人来说,想要攻破这套密码体系只有两条路可选:一是从零自学纳瓦霍语;二是先探听到这套密码是基于纳瓦霍语的,再设法找纳瓦霍人帮忙破解。
实际上,这套密码直到战争结束也没有被破解。
然而,如果对手技高一筹的话,过于依赖保密的设计方案的密码体系反而会弄巧成拙——图灵帮助盟军攻破德国的“Enigma”密码的故事就是一个很好的例子(注1)。
古典密码学作为一种有着几千年历史的军用技术,绝大多数情况下也可以很好地履行使命,那么又为什么沦落到今天被现代密码学所取代的地步呢?
这是因为古典密码学作为一种曲高和寡的艺术形式,同其他很多高雅艺术相似,并不符合广大人民群众的需求——简单来说,就是太贵了,普通人用不起。对于国家政府、军队、或者某些势力强大的黑衣组织来说,专门为其成员统一设计一套密码体系并不是什么难事,只需要避免组织中出现叛徒即可。
而对于普通人来说,专门设计一套密码的成本已经有些昂贵,更昂贵的是往往一套还不够用——例如 Alice 想要分别跟 Bob 和 Chris 进行保密通信,为了保证 Bob 不能解密 Alice 与 Chris 之间的通信,Alice 跟两个人通信时必须使用两套截然不同的密码系统。想象一下,如果银行需要为每一个用户都分别设计一套用户和银行间通信使用的密码,那么密码学专业毕业的学生一定会很容易在银行找到一份工作——前提是银行没有因为成本过高而倒闭。
现代密码学的诞生
实际上,随着计算机的普及,即使美国政府这样财大气粗的土豪,也难以负担得起为每个使用计算机的部门维护专用密码系统的成本。
因此,美国的国家标准局(NIST 的前身)于 1972 年开始征集用于加密政府内非机密敏感信息的密码系统。
在1974 年的第二轮面向公众的征集中,IBM 提交了一种加密算法的提案,这就是著名的 DES 加密算法,其中 DES 是英文 Data Encryption Standard(“数据加密标准”)的缩写。作为现代密码学的开山之作和杰出代表,DES 加密算法遵循了柯克霍夫原则。
该原则要求密码系统的安全性完全依赖于一个妥善保管的安全密钥,而不依赖于对密码系统本身细节的保密。用信息论的发明者克劳德•香农的说法来讲,就是“敌人了解系统。”按照柯克霍夫原则,只需保管好不同的通信信道各自的密码,就可以使用同一个密码系统在所有信道上安全地通信。
“只换密钥,不换密码系统”的特点,极大地降低了使用加密技术的成本,使得密码从一种艺术品,变成一种低价且可大量供应的工业品。
现代密码学技术终于在以金融为代表的商业应用中获得了大显身手的机会。尽管DES 是一种非常优秀的加密算法,但是对于 DES 的信任并非是与生俱来的。
早在1975 年美国国家标准局就 DES 方案公开征求意见时,就有人提出美国国家安全局(即臭名昭著的 NSA)干涉了 DES 算法的设计,特别是 DES 算法中对于 S-box 的具体选择(本来应该是随机选择的),可能秘密地削弱了算法的安全性甚至埋入了后门,以使得 NSA 可以更容易地破解加密信息。为此,DES 受到了学术界的严格审查,这甚至直接推动了密码分析技术的发展。
关于S-box 中隐藏有弱点的怀疑,最终直到 1990 年代初才烟消云散,因为根据 Eli Biham 和 Adi Shamir(注2)发现和公开的差分密码分析技术,NSA 对 S-box 所作的修改显著提高了 DES 算法抵抗差分密码攻击的能力——有证据表明,IBM 和 NSA 早在 1974 年就已经知道了这种攻击技术。
但是另一方面,也有资料显示NSA 说服了 IBM 缩短 DES 算法的密钥长度,有可能是为了把 DES 算法的安全性限制在 NSA 可破解的范围内。从DES 加密算法的公开征集和讨论开始,到后来学术界怀疑 NSA 插手而试图找出 DES 的弱点,整个过程说明,公开 DES 算法不仅没有降低其安全性,反而是通过广泛而深入研究证明了其安全性和可靠性。
通过使用三次加密克服密钥过短缺点的3DES 算法,至今仍存在于 Firefox 等软件中,在微软的 Office 365 中也一直被使用到 2018 年 12 月。NIST 在对 DES 的回顾中提到:DES 可被称为是对加密算法的非军用研究和发展的“第一推动力”。
1970 年代,在军队或情报组织以外的密码学家,对密码学的学术研究都非常少。
现在则有许多活跃在学术界的密码学家,大学里开设了高质量的密码学课程,市场上也涌现出商业的信息安全公司和顾问。
一整代的密码学家都拼命分析DES 算法,更确切地说,是尝试破解。
用密码学家布鲁斯・施奈尔(Bruce Schneier)的话说:“DES 在促进密码学界的发展上做的比其它的一切都多。现在有一种算法供学者们分析了。”
密码学技术与开源运动
DES 加密算法的成功,一个重要原因在于其算法设计从一开始就是完全公开的,因而所有对其感兴趣的人都可以尝试进行分析,这与军事或情报上使用的保密的密码系统有着本质的不同。
也正是得益于其公开性,DES 最终才洗清了受 NSA 干涉埋入后门的嫌疑,在商业上得到大规模应用。
DES 算法为现代密码学树立起一根标杆,此后所有民用的密码学算法都遵循柯克霍夫原则,并公开所有算法设计以便密码学同行研究,也只有经受得住同行分析和攻击的密码学算法才会被认可为安全的。可能会有人以为,公开密码学算法的同时,也会为恶意的攻击者破解密码提供了便利。
但是实际上,笔者从未听说过有哪个案例是因为密码学算法被攻破而造成损失的。绝大多数安全事故的原因都在密码学以外,包括程序员写代码时没有理解密码学算法本身设计写出bug(例如索尼 PS3 的 ECDSA 签名算法实现在一个该用随机数的地方用了固定的数),甚至使用了错误的算法(例如有的程序员会使用 MD5 或 SHA 算法进行“加密”),或由于其它原因意外泄露密钥(例如曾有人误把测试用的带有明文密钥的文件上传到 GitHub)等。
即使是密码学范围内的攻击方式,很多也是通过测量程序运行时间或芯片功耗等侧信道攻击实现的,本质上还是实现算法时考虑不周留下的漏洞。实际上,现代密码分析技术需要掌握极高的数学技巧,因此最优秀的分析者往往都身在学术界,他们更愿意通过公开发表自己的研究成果以获得学术声誉,而非发起实际的攻击获益。
另外,通常发现理论上的漏洞后,总是需要相当一段时间才能在技术上成功利用漏洞发起攻击,这为使用者及时升级提供了宝贵的缓冲期。例如2005 年王小云教授指出当时在商业中广泛使用的 SHA-1 哈希函数的安全漏洞,该漏洞虽然并不意味着可以直接攻破使用 SHA-1 的系统,但却足以证明 SHA-1 的安全性严重低于预期,并直接促使 NIST 选择新的 SHA-2 哈希函数(包括 SHA-256、SHA-512 等变种)替代 SHA-1。
但真正宣告SHA-1 死亡,还要等到十多年后的 2017 年,谷歌团队完成对 SHA-1 的完整破解。
此时在任何一个靠谱的项目中,对于SHA-1 的替代升级工作都应该早已完成了。现在对于抗量子计算攻击的密码学研究或多或少也有类似的“备胎”意义,如果哪天量子计算机技术取得重大突破,人们应可在量子计算机真正被用于攻击 RSA 或 ECDSA 之前,切换到新的密码系统。所以说,通过公开密码学算法设计,用户可以及时地获得关于漏洞的预警,在漏洞被实际利用之前的缓冲期升级到新算法,这要远好于在毫无准备的情况下就遭到对手攻击。相比之下,采取对密码学设计保密的方式只能阻碍善意研究者分析和帮助改善其安全性,对于刻意攻击该密码的对手而言,无论是通过逆向工程还是通过社会工程,总会有办法突破保密机制获得相应的设计方案,然后在使用者不知情的情况下偷偷地破解,直至发起攻击。
例如二战中德军并不清楚他们所用的密码系统已经被图灵领导的团队破解,仍使用被破解的密码系统传递机密情报,反倒为盟军最终取得胜利作出了重大贡献。密码学家们也非常珍惜和维护公开讨论、研究和使用密码学的权利。
特别是在信息时代和互联网时代的背景下,密码学是保护人们的信息不至于“裸奔”的重要技术。
从这个角度来讲,密码学家们为普通人争取来学习和使用密码学的权利,甚至颇有一点普罗米修斯为人类盗火的感觉了。早在1991 年,Phil Zimmermann 编写了一个名为 PGP 的高强度加密软件,其密钥长度超过 128 位。
当时美国政府规定密钥长度超过40 位的加密产品都须作为军火产品受到出口管制,因此,在 Zimmermann 把 PGP 源代码放在网上供人们下载时,便惊动了美国政府。Zimmermann 的案例在当时引起了技术和法律圈子的热议,很多人站出来声援他并提供各种支持。
最终Zimmermann 决定采用迂回的方式,绕开政府对于加密软件的限制——他通过 MIT 出版社出版了一本包含 PGP 的全部源代码的书,这本书作为出版物而非软件受到美国宪法第一修正案对于出版自由的保护。此后又发生了两个著名的案例。
1995 年,凯斯西储大学(Case Western Reserve University)教授 Junger 为了争取在(有外国留学生的)课堂上公开讲授加密技术的权利,向美国国务院发起诉讼。
1996 年,加州大学伯克利分校的学生 Bernstein 为了可以不受限制地公开发表自己设计的密码学算法和参与学术讨论,向美国司法部发起诉讼。
这两个案例吸引了社会的广泛关注,在大批律师和法学家、科学家、工程师的共同努力下,两个案例在2000 年之后都获得了最终的胜利。密码学家们的抗争不仅仅争取到了自由讨论和使用密码学技术的权利,更重要的是这些判例确定了密码学算法和源代码算是一种言论自由,不受美国政府对于软件出口的限制——这对于未来所有开源软件项目的发展,都具有至关重要的意义。
借着密码学技术公开化的顺风车,人们终于可以打消对于开源项目的源代码是否会受到美国政府管制的最后一丝疑虑——于是很多开源软件基金会纷纷选择注册在美国,这也为日后开源软件项目的蓬勃发展奠定了基础。与版权软件相比,开源软件在安全性、可靠性、扩展性等方面都具有独特的优势。
通过公开源代码,开源软件中因为疏忽造成的漏洞更容易被其他程序员发现,而植入后门的行为就像秃子头上的虱子一样明显——相比之下,闭源软件的漏洞和后门则往往只有经验丰富的黑客才能发现。在可靠性方面,由于开源软件的源代码已经是公开的,所以用户无需过分担心软件的开发者下架或停止维护后没法继续使用软件,只需要自己拿来源代码修改和编译即可。在可扩展性方面,开源软件更是有着无可比拟的优势,任何人都可以根据自己的需要自由地定制和修改软件的代码,无论时间还是经济上的成本,都比定制版权软件低得多。
另外,开源软件项目对于培养新程序员,提高整个行业的技术水平也有十分重要的意义。
比开源软件更远的远方
当越来越多人开始意识到开源软件项目在计算机软件、特别是互联网行业发挥的颠覆作用时,有人已经把目光投向了更远的地方:开源项目除了带来免费好用的软件以外,其实还带来了一样更为宝贵的东西——信任。使用闭源软件的时候,我们实际上并不清楚软件到底会进行哪些操作。
比如软件是否会偷偷地扫描我们的硬盘或者篡改某些文件?
是否会搜集我们的隐私信息甚至窃取网络账户密码?
绝大多数时候用户都只能选择信任某个中心化的机构才能放心地使用这些软件,这个机构可以是软件的发行方、杀毒软件厂商,或者操作系统厂商。
但是如果试图进行这些操作的就是那些机构本身呢?
假如微软想要搜集Windows 用户的数据,相信他们完全可以从技术上做到在普通用户毫无知觉地情况下搜集其访问网站的历史记录。
或许微软顾虑到法律不会轻越雷池,但是如果FBI 以某个冠冕堂皇的名义(例如“通俄”)要求微软提供某些用户的信息呢?
而且在法律跟不上技术发展速度的情况下,谁也无法保证商业公司不会以法律“擦边球”的形式侵犯用户的权益。
年纪稍长的朋友应该还记得2010 年“3Q 大战”时,奇虎公司和腾讯公司之间互相指责对方不正当竞争和侵犯用户隐私的往事。开源软件在这方面就要比闭源的好多了,因为通过开放的源代码,所有训练有素的程序员都可以看懂程序会如何运行。
如果某个开源项目的代码中嵌有后门或者恶意代码的话,只要有人发现并指出有问题的位置,其他程序员都可以非常容易地验证是否真的有问题,甚至可以在修改掉有问题的部分后继续使用原有的代码。
因此,一个被长期广泛使用的开源项目,几乎不可能有任何人为加入的后门或恶意代码,可信程度远高于闭源的版权软件。如果把眼光投得更远一点,容易看到我们的社会很多部分运行的方式,实际上也是如黑匣一般“闭源”的:例如我们不能确认世界杯的比赛分组是不是有猫腻,也无从得知自己买到的汽车是否曾被返修或更换过部件,更不用说统计甚至限制政府发行货币的数量了。
为此,在现实中我们只能选择信任世界杯组委会、法院或政府等权威机构——即使不信,也很难有其它更好的选择。假如社会上这些“闭源”的部分能够以一种开源的模式运行,所有人都可以看到运行的规则并且验证系统是否按照规则运行,就可以不必信任某个权威机构。
这种开源的运行方式想必可以带来更高程度的信任,一种“去中心化”的信任。
为此,2008 年 10 月 31 日,有人在一个密码学圈子的邮件列表里发信称:“I've been working on a new electronic cash system that's fully peer-to-peer, with no trusted third party.”并随信附上了一篇论文,论文的标题叫做“Bitcoin: A Peer-to-Peer Electronic Cash System”。
注1:2014 年的电影《模仿游戏》就讲述了这一段真实的故事,该片还获得了奥斯卡最佳改编剧本奖以及最佳影片、最佳男主角等七个其他奖项提名。
注2:Shamir 是以色列密码学家、图灵奖得主,著名的 RSA 公钥加密算法中的“S”即来自他的名字缩写。今年 3 月,他因被美国拒签而无法参加在美国举办的(以他的名字命名的) RSA 信息安全大会。此事件一时令特朗普政府的签证政策沦为笑谈。