如果我搜索堆栈溢出以了解如何安全地加密数据,那么第一个命中就是某人的自定义加密方案。我在这个网站上看到了几个类似的问题,总的来说,它们都注定有严重的缺陷。大多数天真到甚至试图发明自己的加密的人都不知道有多少种方法可以搞砸它。
到这一步大家都点头了?
现在,让我感到惊讶的是,可能是因为我属于上面提到的天真人群,对于我们这些不了解的人来说,没有好的建议。虽然正确的答案可能是“不要在家里尝试这个”,但这并没有帮助。
需要生产就绪的 Web 服务器?有 Apache 和 Nginx。还是数据库?对于大多数不需要扩展到 Google/Facebook/Twitter 规模的用例,有太多的生产就绪选择可以解决您的问题,甚至没有必要列出它们。更复杂的东西?您可以想到的大多数语言都可以轻松获得高质量的机器学习库,并且可能还有更多。
想要加密一些东西?糟糕。
例如,假设我在 google 中搜索“ruby encrypt data”。我最终找到了OpenSSL Cipher 文档。
有人可能会想,“太棒了,我听说一个人永远不应该发明自己的加密方案,这里有一段简单的复制/粘贴准备好的代码”,所以我可能会复制它,然后愉快地继续前进。
虽然我对这个主题的理解相当有限,但即使我也能看出一个巨大的缺陷:完整性这个词从未在任何地方提及。没有数据的 HMAC,因此应用程序最终容易受到攻击。
如果您对 php 进行类似的搜索,您可能很幸运能够收到有关完整性的警告,但没有可靠的解释说明为什么它很重要,也没有提到使用未处理的密码是不安全的,这与 ruby 文档不同。
所以对于所有想要加密信息的开发人员来说,我们几乎注定会出错。
我确信复杂性有充分的理由,但它是什么?