2

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

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

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

任何 python 加密模块(M2Crypto,...)都支持 ECDSA 解决方案吗?你有例子吗?

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

提前致谢

4

3 回答 3

1

M2Crypto支持 ECDSA,但可以选择禁用它。例如,基于 Fedora 的系统在 OpenSSL 和 M2Crypto 中禁用了 ECDSA。M2Crypto 也有一些SMIME 支持,但由于我没有经常使用它,我不确定在这种情况下这是否会有所帮助。请参阅M2Crypto SMIME 文档SMIME 单元测试,以及ec 单元 测试

于 2010-02-11T22:07:21.280 回答
0

OpenSSL 库支持黄道曲线密码术 (ECDSA) 以及更常见的 RSA。我建议使用pyOpenSSL桥接器。

于 2010-02-10T18:00:29.640 回答
0

您可以尝试使用 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 兼容

于 2017-01-02T18:46:30.217 回答