13

我正计划在一个项目中使用 PyCrypto,我想知道 PyCrypto 是否足够安全可靠。如何确保 PyCrypto 根据 RSA 和 AES 等各种加密算法正确加密数据?

4

3 回答 3

19

这取决于。

PyCrypto 的某些部分非常好。例如,Crypto.Random 的 API(在 PyCrypto 2.1 中引入)被设计得非常简单,它使用的底层算法(Fortuna)也被设计得非常简单。

其他部分只是低级加密原语的实现,所以它可以工作,但你必须知道你在做什么才能正确使用它们。例如,Crypto.PublicKey.RSA 没有实现完整的 RSA PKCS#1 标准(这是大多数人在谈论“RSA”时所想到的)。它只实现了基本的 RSA 原语(m^e mod n 和 c^d mod n),您仍然需要提供自己的 PKCS#1 实现。

确保 PyCrypto 正确加密您的数据(无需阅读源代码,我鼓励每个人都这样做)的最佳方法是使用标准协议和/或消息格式,并测试您的代码与其他实现的互操作性。如果您正在编写自己的消息格式(无论如何您可能都不应该这样做),那么您需要非常小心以确保 PyCrypto 实际上正在执行您认为它正在执行的所有操作。

免责声明:我是当前 PyCrypto 的维护者,因此我的意见不应被视为独立评论。

更新: PyCrypto v2.5 及更高版本现在包括正确的 RSA PKCS#1 加密和签名实现。有关详细信息,请参阅 Crypto.Cipher.PKCS1_OAEP 和 Crypto.Signature.PKCS1_PSS 的 API 文档。

于 2011-12-04T05:43:00.577 回答
5

No.PyCrypto不再处于积极开发中,应该使用密码库。

来源:https ://github.com/dlitz/pycrypto/issues/173

于 2017-01-05T13:13:11.547 回答
4

请注意,我也不是加密专家。也就是说,我快速浏览了 github 上的 PyCrypto 代码和他们的邮件列表。让我有信心的一件事是代码库有很好的专家贡献。开发人员承认不安全感并努力纠正它们。

如果您有需要安全实施的特定用例,请查看他们的代码并在他们的列表中询问。由于它们似乎在许多情况下都利用 C/C++ 库来完成这项工作,因此您可以直接查看基础库的声誉。

于 2011-10-21T13:38:52.973 回答