【问题标题】:Is PyCrypto safe and reliable to use?PyCrypto 使用起来安全可靠吗?
【发布时间】:2011-10-20 12:33:53
【问题描述】:

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

【问题讨论】:

  • (a) 有一个你信任的实现; (b) 比较 PyCrypto 和这个可信实现之间每个可能的字符串/键组合的结果。 (我在这里等你,当你检查完每个组合后,写“是”或“否”作为答案。)
  • @ChrisMorgan 感谢您的回复。我对加密还很陌生,所以你必须忍受我。每个可能的字符串/键组合是什么意思,请您举个例子。我也无权访问受信任的实现。
  • 我在开玩笑。 (如果英语不是您的第一语言,您可能会发现我的幽默比以英语为母语的人更难理解。)您不能尝试所有可能的字符串/键组合 - 有无限种他们的数量。如果您一开始不相信某些实现是准确的,那么您将一事无成。
  • @ChrisMorgan 我预感到你在开玩笑。但是,我不认为这是一个以英语为母语的人来理解您的幽默的问题,而是缺乏加密经验。你可能误解了我的问题。让我澄清一下,不能盲目相信特定的实现。例如,关于密钥生成 PyCrpyto 有一个错误,它无法随机选择两个不同的素数 p 和 q 并且具有相似的位长。我可以给你举很多例子。也许只有以英语为母语的人才能理解我在说什么。
  • 好的。我明白你在问什么,我相信我完全理解它,但我认为你不太可能得到满意的答案。在某种程度上,你必须对它有信心。

标签: python django pycrypto


【解决方案1】:

视情况而定。

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 文档。

【讨论】:

  • @dlitz,非常感谢您!我想澄清一下,当您说“测试您的代码是否与其他实现互操作”时,您的意思是例如在其他加密工具中从 PyCrypto 解密加密数据?
  • +1:我喜欢new module,给出的例子清楚地说明了如何使用它。我唯一担心的是,新用户很容易假设(就像我所做的那样)RSA 在默认情况下已经这样做了。可能是docs 中的警告?
  • 我不确定这是否是主题,但 PyCrypto 是 no longer being maintained
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 谢谢,非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-14
    • 1970-01-01
    • 2018-03-20
    • 2010-10-11
    • 2013-01-06
    相关资源
    最近更新 更多