【问题标题】:How to verify ECDSA/SHA2 S-MIME signature with python?如何使用 python 验证 ECDSA/SHA2 S-MIME 签名?
【发布时间】:2010-02-10 15:46:25
【问题描述】:

我们需要在两种签名方案中进行选择:

  • RSA/SHA2 S-MIME 签名
  • ECDSA/SHA2 S-MIME 签名

为此,我们的 python 软件需要支持这种方案之一。目前出于某些政治原因,首选 ECDSA 解决方案。

任何 python 加密模块(M2Crypto,...)都支持 ECDSA 解决方案吗?您有这方面的示例吗?

即使对于 openssl,ECDSA 支持似乎也很年轻。

提前致谢

【问题讨论】:

    标签: python security cryptography m2crypto


    【解决方案1】:

    ECDSA is supportedM2Crypto 中,但可以选择禁用它。例如,基于 Fedora 的系统在 OpenSSL 和 M2Crypto 中禁用了 ECDSA。 M2Crypto 也有一些 SMIME support,但由于我没有经常使用它,我不确定在这种情况下这是否会有所帮助。请参阅M2Crypto SMIME docSMIME unit tests,以及ec unit tests

    【讨论】:

    • 非常感谢 Heikki,我们会尝试的。也感谢您维护 M2Crypto 软件包。保持良好的工作
    • Heikki 如何在 M2Crypto 中更改 SMIME 中的摘要算法。我们想使用 SHA256,但我没有找到如何做到这一点。谢谢
    【解决方案2】:

    OpenSSL 库支持黄道曲线密码术 (ECDSA) 以及更常见的 RSA。我推荐使用pyOpenSSL 网桥。

    【讨论】:

    • 谢谢迈克尔。已经在 python 之外尝试过 ECDSA/SHA256 这个场景,我在 openssl 邮件列表中看到了很多问题。
    【解决方案3】:

    您可以尝试使用python ecdsa包,使用Python3:

    pip3 install ecdsa
    

    用法:

    from ecdsa import SigningKey
    sk = SigningKey.generate() # uses NIST192p
    vk = sk.get_verifying_key()
    sig = sk.sign(b"message")
    vk.verify(sig, b"message") # True
    

    使用公钥验证现有签名:

    from ecdsa import VerifyingKey
    
    message = b"message"
    public_key = '7bc9c7867cffb07d3443754ecd3d0beb6c4a2f5b0a06ea96542a1601b87892371485fda33fe28ed1c1669828a4bb2514'
    sig = '8eb2c6bcd5baf7121facfe6b733a7835d01cef3d430a05a4bcc6c5fbae37d64fb7a6f815bb96ea4f7ed8ea0ab7fd5bc9'
    
    vk = VerifyingKey.from_string(bytes.fromhex(public_key))
    vk.verify(bytes.fromhex(sig), message) # True
    

    该软件包也与 Python 2 兼容

    【讨论】:

      猜你喜欢
      • 2014-05-04
      • 2018-01-17
      • 2016-03-30
      • 1970-01-01
      • 2020-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多