谁应该编写加密代码?

信息安全 密码学
2021-08-27 17:21:09

我看到很多问题和答案都承认发明自己的加密算法的危险——甚至是自己实施经过验证的算法而且,我不反对。我什至可能会争辩说,我们大多数人甚至都不知道如何安全地使用现有的库!

但是,谁应该做呢?什么样的教育、经验或环境值得编写自己的加密货币?

我们教条地告诉每个问“不要自己动手!使用现有库”的人但是,有人编写密码安全算法和代码。谁?

我们不会因为“不使用现有的图书馆”而责骂谁?(为什么我们相信他们?)


顺便说一句,“普通”开发人员是否有任何地方可以以安全有益或非破坏性的方式学习和贡献?

4个回答

您注意到了无法满足的要求:您从未被告知您已准备好编写加密代码。

我认为总是建议“永远不要自己推出”建议的原因是因为人们正在寻求建议。作为一个较低的标准,您不再依赖公众舆论的建议是您可以开始考虑加密货币的时候。

并且,在这一点上,你完全承担了你所创造的一切责任。开发人员的社交团体从未告诉过您可以做到。你刚刚决定去做。你忍受后果。

现在,更具体地说,一些专家建议在尝试编写自己的加密库之前先尝试破解其他加密库。一旦你可以打破现有的东西,你就更有可能意识到编写自己的库所带来的所有细微差别。

但我自己,我想到了一个武术比喻。想想黑带测试臭名昭著的艺术。它撕碎了自尊心,就像在电视上看到的那样。你只能参加一次考试。很多人问“我准备好考试了吗?” 答案总是“你从来没有为考试做好准备”。

那么你什么时候准备好考试呢?当你意识到你不需要测试来让人们知道你足够好成为黑带时。你知道的。所以你只要戴上黑带,盯着那些应该给你测试的专家,他们点头,好像在说“是的,这就是整个时间的伎俩。”

如果你不得不问这个问题,你不应该写加密代码。

如果您谈论的是实现现有算法,只需要一位经验丰富的程序员,了解旁道攻击、安全程序设计和对密码学有很好的了解。这并不容易,但也不是很高的标准。可以雇用这些人来编写应该推动其他人使用的密码库。

另一方面,如果您正在谈论开发一种全新的密码算法,那么答案是否定的对真的。没有人。即使是最好的密码学家也不应该在没有经过其他密码学家的认真审查的情况下编写自己的算法并使用它。然而,他们的算法最有可能经受住密码分析。如果您拥有密码学博士学位并在这些圈子中享有盛名,那么您也许可以提供帮助或设计一种算法,该算法在地狱中的几率超过滚雪球的机会,以抵御其他密码学家的攻击让你的设计服从,假设你可以说服他们这是值得的。

首先,请注意,我说的是实现实际的密码学功能,即加密、签名等。这与仅使用现有的密码学功能不同(更容易,但仍然可能出现许多错误),也不同于设计密码算法(更难)。

此外,虽然我在安全上下文中编写代码并使用现有的加密函数,但我不编写加密代码。但是我知道在编写这样的代码时很多事情都会出错,因为我已经阅读了足够多的关于出错案例的示例。而且我也知道我对这个主题的理解还不够,无法编写安全的加密代码。具体来说,我知道即使对于最有经验的程序员来说,当加密代码在某些边缘情况下表现错误或具有可能泄露部分秘密的意外副作用时,也不是很明显。

鉴于我最好不要自己编写这样的代码,很难就谁应该编写这样的代码给出好的建议,但我试图从我在安全环境中编写非加密软件的经验中推断出来。
那么谁应该编写加密代码 - 至少在生产中使用的加密代码?

如果您感觉自己会理解编写此类代码的所有问题,那么您可能高估了自己的知识——请参阅邓宁-克鲁格效应如果您有一些同事在编写良好的加密代码方面已经享有更广泛的认可,请让他们审查您的代码。如果他们没有发现什么可抱怨的,你最好保持怀疑,因为你的代码不太可能没有一点风险,至少应该讨论一下。因此,您最好获得另一种意见。

这样做一段时间后,您可能会获得编写良好加密代码的必要经验。但即使在这个阶段,如果你要求同事审查并与他们讨论潜在风险,你可能会感觉更舒服,即使这些对你来说似乎大多是理论上的。

施奈尔定律与此相关:任何人都可以设计出他或她无法想象的可破解代码;当一群其他人试图打破它并且无法打破它时,价值就来了。

根据这种逻辑,我们绝不应该允许任何特定的人编写他或她自己的加密货币以供使用。但是我们可以允许任何人写一个,然后把它放出来供审查,然后改进它,如果社区最终同意它是一个很好的系统,那么它就可以使用了。不要相信一个人;信任一个社区和一个过程。