PyCrypto 是否安全可靠?
我打算在一个项目中使用PyCrypto这个库,我想知道它是否安全可靠,值得使用。那我该怎么确保PyCrypto能够按照不同的加密算法,比如RSA和AES,正确地加密数据呢?
3 个回答
请注意,我也不是加密方面的专家。不过,我快速浏览了一下GitHub上的PyCrypto代码和他们的邮件列表。有一点让我感到放心的是,代码库中有很多专业人士的贡献。开发者们会承认安全性问题,并努力去修复这些问题。
如果你有一个需要安全实现的具体使用场景,可以看看他们的代码,并在他们的邮件列表上提问。因为他们在很多情况下似乎利用了C/C++的库来完成工作,所以你可以直接查看这些基础库的信誉。
不行。PyCrypto
这个库已经不再积极更新了,建议使用加密库(cryptography library)来代替。
这要看情况。
PyCrypto的某些部分确实很好。例如,Crypto.Random这个功能(在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 2.5及以后的版本现在包含了正确的RSA PKCS#1加密和签名实现。有关详细信息,请查看Crypto.Cipher.PKCS1_OAEP和Crypto.Signature.PKCS1_PSS的API文档。