原始图片来源大卫·布鲁克斯IronCore Labs进行了修改。

密码学的传统智慧有多明智?

我的公司,IronCore实验室,正在构建端到端加密数据共享解决方案。因此,我们对密码功能如何实现和使用的期望非常敏感。我们希望用户和专家都同意我们的工作是正确的。

关于加密库的传统观点是这样的:在任何情况下,都要尝试实现自己的加密代码。你搞砸了。使用那些已经存在并被仔细检查了很多年的图书馆。他们做得很好。”

我百分百同意……直到最后那句话,”他们做对了。“玩过加密货币的人都知道,要想把事情做好很难。有很多方法会搞砸,即使你没有实现你自己最热门的新版本的最好的加密技术,rot13。(老年人会明白的。年轻人,让我给你)。您可以以引入安全漏洞的方式将接受的原语串在一起——真正扭曲的、不明显的、几乎不可思议的漏洞。您可以为难以预测的恶意侧信道攻击创造机会。但如果他们在那里,一些狡猾的天才将通过你的密码,并在短时间内篡改你的数据。因此,是的,您应该使用实现算法的库,这些算法已经被证明是安全的、正确组装的,并经过漏洞审计。

使用那些已经存在并被仔细检查了很多年的图书馆。

但是这些图书馆有多好呢?传统智慧的另一部分认为开放源代码更好,因为有更多的人关注它。这可能是真的。然而,“更好”不一定是“好”。严重的OpenSSL漏洞仍然经常被发现。人们用了17年多的时间研究这段代码,却没能消除所有的bug。相反,这17年的践踏他人是问题的主要原因。

我最近有了一个“机会”去挖掘OpenSSH,OpenSSL,GPG关于图书馆的很多细节。那是一次极其痛苦的经历。我们IronCore Labs决定添加端到端加密到无处不在sftp实用程序作为一个快速的小项目,使任何人都可以轻松地获得更好的安全性和简单、安全的文件共享的好处。看起来是个不错的计划。我抓起openssh-portable项目然后开始浏览。嗯-所有的C代码,但这不是太坏。我破解C代码的时间比我愿意承认的要长,而且看起来改变并不会太广泛。

相反,这17年的践踏他人是问题的主要原因。

我们决定使用椭圆曲线密码学来进行公钥加密。与RSA和其他老的公钥算法相比,它有一些很大的优势。OpenSSH依赖于OpenSSL库但OpenSSL中对椭圆曲线的支持仍在不断变化,所以我抓取了钠加密库(libsodium)。非常简单的界面,出色的性能——有什么不喜欢的呢?我并不需要深入研究OpenSSL的代码,坦白地说,在我做了最初的调查之后,这是一种解脱。该代码比OpenSSH代码更老,更不可靠。这在一定程度上是意料之中的——这就是所有复杂的加密货币的生存之处。无论如何,我不介意错过去那里潜水的机会。我用lib钠和OpenSSH sftp客户端进行了一个快速的概念验证。情况看起来不错。

然后我的同事帕特里克·沃尔什“嘿,对加密文件使用标准文件格式不是一个好主意吗?”我们可以让一切都与PGP兼容。“当然,”我说。听起来是个不错的计划。使用标准格式从来都不是坏事,人们可以使用gpg如果他们想的话,可以解密我们的文件。”如此天真的谈话。我一点也不知道……

添加GPG兼容性的过程,我们的新ironsftp使用是漫长而费力的。对于那些病态的极客,我写了一封单独的信,详细描述了这一过程中的一些考验和磨难:

简单地说,这是一个痛苦的过程,解开几乎没有注释的C代码库中的缺陷和老巢,其中一些已经超过15年了,多年来一直被黑客攻击。(我得承认,我有时说的话会让水手们脸红。)难怪虫子潜伏多年不被发现。代码并不利于理解。我并不是唯一一个发现这些包裹像用铁丝网包裹的烂鸡蛋一样吸引人的人!我在一个安全的讨论:

既然GPG是目前为止最常见的非对称签名方法,你能给我们推荐一下支持还是反对使用GPG吗?
尽可能避免。密码是由一群喝醉的猴子编写的,那时候还没有人了解现代密码学的基础知识;我真的不确定gnupg和OpenSSL之间哪个更糟。当然,GPG是加密电子邮件的标准,就像SSL/TLS是网站的标准一样,所以你可能没有选择……

我知道这样做是有原因的,以免听起来太严厉。C不是编写简洁无错误代码的理想语言,但是在90年代后期,你打算用什么来实现加密?而且随着时间的推移,任何代码库都会出现一些问题,特别是随着新功能的添加。这是不可避免的。任何从事软件工作的人都知道,一旦你发布了某个产品,你就会永远离不开它。我真诚地同情这些库的维护人员;维护向后兼容性可能是一个沉重的负担。这些数据可能在1998年就被加密或签署过,而这些数据使用的算法已经不再相关。有一个程序仍然可以获取这些数据是很好的,但是这个包袱对代码的可维护性和安全性有严重的影响,真的想要坚如磐石。

也许是时候冻结旧代码,重新命名为“遗产”,重新开始了。使用新的热度对新数据进行散列、签名和加密。使用现代语言和范例,这些语言和范例可以提供良好的性能,但不会导致自我毁灭。趁我们还在的时候把代码记录下来。帮我们未来的自己一个忙。

有一个程序仍然可以获取这些数据是很好的,但是这个包袱对代码的可维护性和安全性有严重的影响,真的想要坚如磐石。

其他国家也在朝着这个方向采取措施。的LibreSSLBoringSSL项目都从OpenSSL中剥离了旧的代码。它们已经放弃了对旧平台的支持,因此可以利用现代操作系统、库和编译器特性来提高安全性。荣誉-我希望我们能看到这些库的良好采用!

这个故事的寓意是什么?可能有好几个。首先,一个短期的自我保护:如果有人在工作中说:“嘿,让我们让我们的数据格式兼容GPG !””,谈起。真的。大声尖叫,让你的同事知道你是认真的。一个更深刻、更哲学的想法:值得重视的传统智慧是建立在有效的想法之上的。然而,我们应该总是愿意重新检查我们的基线和重新评估我们的假设。我们对这些古老的加密库的信任已经超过了极限。坚持真理的智慧必须与堆积如山的技术债务风险相权衡。

也许是时候冻结旧代码,重新命名为“遗产”,重新开始了。

是时候用闪亮的新工具来取代我们的旧加密工具了吗?鉴于我最近的编程经历,我非常倾向于“最肯定!”就像一个朋友建议的那样,“从轨道上用核武器摧毁一切。”这是唯一能确定的办法。”或者正如另一位朋友所说:

虽然我们作为一个行业尊重和重视我们的OSS加密祖先的贡献,但我们必须要求一个新的开始,以更安全的通信进展。

我完全同意。在IronCore实验室,我们正在致力于新的开始和更好的安全性。请查看我们的开源ironsftp实用程序的主页,或我们在GitHub上发布的源代码

咸的散列

关于构建安全的提示、技巧、指针和透视图…

鲍勃墙

写的

数据安全初创公司IronCore Labs的首席技术官。到加密,云计算,人工智能和机器学习,其他极客的东西。音乐迷。

咸的散列

关于构建安全、可测试、可维护的应用程序的提示、技巧、指针和观点。来自IronCore实验室的关于安全和隐私的想法和观察。

鲍勃墙

写的

数据安全初创公司IronCore Labs的首席技术官。到加密,云计算,人工智能和机器学习,其他极客的东西。音乐迷。

咸的散列

关于构建安全、可测试、可维护的应用程序的提示、技巧、指针和观点。来自IronCore实验室的关于安全和隐私的想法和观察。

媒介是一个开放的平台,1.7亿读者可以在这里找到深刻和动态的思考。在这里,专家和未被发现的声音同样会深入任何话题的核心,并带来新的想法。了解更多

关注与你有关的作家、出版物和主题,你会在你的主页和收件箱中看到它们。探索

如果你有故事要讲,有知识要分享,有观点要提供,欢迎回家。发布你对任何话题的想法都是很容易和免费的。写在媒介

获取媒体应用程序

有一个“在App Store上下载”的按钮,点击它就会引导你进入iOS App Store
一个按钮,上面写着“Get it on,谷歌Play”,如果点击它,你就会进入谷歌Play商店