公钥加密最常见的用途之一就是保护移动中的数据。过去,互联网的数据加密都是由一群密码学家实现的,他们会编写和重写算法,手动权衡各种数学技术和芯片架构以优化性能,是实实在在的“劳动密集型”工作。这种模式不仅存在明显的人为错误和非最优算法的问题,而且随着时间的流逝,算法编写的数学或芯片架构也将变得过时,这就意味着密码学家不得不再次动笔计算。然而最近,随着麻省理工学院(MIT)研究人员开发出了一款用于创建该代码的新系统,情况开始发生了变化。
该系统被称为“菲亚特加密”(Fiat Cryptography),可以自动为所有硬件平台生成并同步验证经过优化的加密算法,而这一过程以前都是由人工完成的。
MIT研究人员在今年5月份的EEE安全与隐私研讨会上发表了他们的论文,并在论文中列出了他们系统的细节,以便任何人都能实现它。据悉,目前该系统已被Google用于保护其Chrome网络浏览器通信。
Adam Chlipala,领导麻省理工学院计算机科学和人工智能实验室的研究团队开发了Fiat Cryptography的计算机科学副教授解释称,“我们已经证明,通过使用该系统,人们以后都不必再编写这种低级的加密算术代码了。我们可以拥有一个代码库来生成各种不同的特殊种类的代码,摒弃之前的手动过程,这既可以降低开发成本,同时也能大大提升代码的安全性和正确率。”
在对该系统进行测试时,研究人员发现自动化生成密钥和数据加密证书的过程与人工编写的最佳代码的性能相匹配,但完成速度明显更快。Forfa Consulting(瑞士数据安全咨询公司)合伙人兼首席执行官Rolf von Roessing表示,“自动化是加密领域向前迈出的重要一步。幸运的是,此次测试结果显示,该自动化系统比以前的操作形式更可靠,且更不易出错。”
经过验证的密码技术
在互联网的数据加密过程中,对于算法的要求十分严格。因为在这个过程中可能存在很多变量——各种数学技术和芯片架构等等,密码学家需要不断地编写和重写这些算法,以应对不同的变化情况。在此过程中不仅会产生不太理想的算法性能,甚至可能生成软件错误,这些都无异于增加了开发成本。
Fiat Cryptography不仅可以自动化算法编写,还可以同步验证代码是否正确运行。Chlipala解释称,“密码学是一门关于安全通信的学问,它不仅要保持通信私密还要确保你能够知道通信另一端是谁。经过验证的密码技术,就意味着我们有数学定理证实我们的代码是正确实现的,且正在运行我们想要运行的算法。”
MIT开发的这款新系统可用于创建密码学原语(cryptographic primitives)——用于构建通信加密协议的基本算法——目前已经部署在了谷歌的BoringSSL上,这是一个用于生成加密和解密谷歌浏览器、Android应用程序和其他应用程序数据的密钥和证书的开源加密库。“珠峰项目”(Project Everest)——包含微软、Inria,卡内基梅隆大学和爱丁堡大学在内的一个联合项目——也有一个库,可以提供Mozilla Firefox、WireGuard VPN和Tezos区块链所使用的密码学原语。
随着Fiat Cryptography获得越来越多的支持,它有可能将经过验证的密码学也纳入主流。旧金山数字风险保护解决方案提供商Digital Shadows的安全工程主管Richard Gold解释称,“它是BoringSSL的一部分,BoringSSL是一个流行的加密库,但由于缺乏可以轻松集成到现有工作流程中的高质量实现,使得它无法进入主流市场。”
ISACA的von Roessing认为,Fiat Cryptography成为主流仅仅是时间的问题,因为它将带来显著的流程改进成果。就像机器人过程自动化一般,Fiat Cryptography对于大幅改善整体加密流程起到了重要作用。过去人们依赖于手写算法,是因为那时候没有任何工具和方法能够可靠地自动生成算法。
应对不同类型的设备
除了从加密算法中移除人为失误并生成经过验证的代码之外,研究人员开发的这款新系统还可以提高代码运行方式的性能。
例如,一个用于创建公共和私有密钥的流行算法在为浏览器和服务器间提供安全的通信通道时会使用“椭圆曲线技术”(elliptical curve technology)。所谓“椭圆曲线密码学”(ECC,Elliptic curve cryptography)是一套关于加密数据、解密数据和交换秘钥的算法,也是目前被广泛使用的最强大的,同时也是最难懂的一个密码学。本质上来说,ECC本就是通过在一个曲线图的曲线上随机选择点来创建各种不同长度的密钥。
为密钥创建的数字可能很大,以至于大多数芯片需要使用多个寄存器来存储构成密钥的“位”(bit)。寄存器是用于存储数据位的芯片组件,不同类型的设备具有不同的寄存器组件,也就具有不同的计算能力。你必须知道哪些功能可用于规划执行算术运行的最有效方法。
与其他机密算法一样,用于管理如何将“位”分配给寄存器的算法通常是手写的。手写代码是将其从一个架构转移到另一个架构中最简单的方法。但MIT的方法允许自动化代码生成系统处理这种转移问题,而不是由人类开发人员进行处理。
MIT研究人员通过研究现有的手写ECC算法,并将这些技术转移到他们的代码库中来实现了这一点,从而为每个架构创建了最佳性能算法列表。除此之外,该库还使用了一个编译器——一种将编程语言转换为计算机处理器可以理解的代码的软件——通过使用名为“Coq”的校对工具生成经过验证的代码。
但是,创建一个强大的算法是一回事,而针对各种目标平台和不同的编译器进行优化又是另外一回事了。毫无疑问,拥有一个缓慢且表现不佳的强大算法是没有意义的。这就解释了为什么在PGP(Pretty Good Privacy,用于对电子邮件和文件进行加密的软件)早期人们并没有将它用于大型数据集中,原因就在于20世纪90年代的处理器还不够强大,无法支持快速加密和解密。
量子计算机威胁
随着Fiat Cryptography变得越来越流行,它可以会推“椭圆曲线加密学”(ECC)一把。ECC通常是强加密的首选工具,但在过去它并不怎么受欢迎,甚至对某些用例来说它的“处理速度太过缓慢”。但是随着Fiat Cryptography的出现和流行,这种情况可能将发生改变,ECC有可能会得到更广泛地推广和应用。
然而,ECC的日子可能已经屈指可数了。PGP开发者Phil Zimmermann解释称,“因为量子算法的出现,从长远来看,人们正在逐渐摆脱椭圆曲线技术。”
量子计算机——未来的超高速计算机——对现有的机密形式构成了严重的威胁。公钥加密使用用于保护信息的唯一密钥。这些唯一密钥基于具有独特属性的数学函数:它们易于在一个方向上计算,但很难在反方向上计算。例如,将两个素数相乘很容易,但是如果数字足够大,那么考虑到当前计算机的计算能力,可能需要比宇宙年龄更长的时间才能将该数字反馈到原来的两个素数中。
因子和离散对数(discrete logarithms)构成了当前使用的所有公钥算法的基础。但是,当量子计算机在十年左右的时间内建成时,它们将能够非常快速地计算数字并破解离散对数,甚至几乎可以摧毁当前使用的所有公钥算法。更令人震惊的是,破解公钥加密的过程不需要数十亿年,而是短短的几秒。
毋庸置疑,当量子计算机出现后,现有的广泛使用的密码算法特别是公钥算法例如RSA等将变得不安全。而“抗量子密码算法”(Post-quantum Cryptographic algorithm),将是量子计算机出现后仍然安全的算法,其设计初衷就是能够在量子计算机的世界中运行。
在量子计算机时代到来之前,Chlipala和他的团队将继续致力于将Fiat Cryptography扩展到密码学原语之外。加密是一个伟大的领域,因为人们关心安全性和正确性。加密领域的错误可能会产生各种各样的安全后果,因此,该领域从业者一直对提供数学保证的想法持开放态度,以求寻找到更为安全可靠的加密技术。