我正在编写一个需要非对称加密的程序。我的方法是使用 Python 的 M2Crypto,我选择了 ECDH 作为算法。但是,我也希望该过程像 RSA 一样简单,它只需要我们接收器的公钥。ECDH 不是。它的公钥似乎必须首先与发送者自己的公钥结合,从而计算共享秘密并完成所有工作。
不管效率如何,我确实想要这样的解决方案,这样如果有人想给我发消息,我的 EC 公钥就会被发布,发件人必须:
- 获取他/她自己的 EC 私钥
- 把这个私钥和我的公钥结合起来,计算一个共享的秘密
- 使用秘密和 AES 或其他对称密码加密消息
- 向我发送密文和派生的公钥(来自此私钥)。
但这里有一个问题。我观察到只有当任何一方基于相同的曲线参数生成他们的密钥时,才存在成功的密钥交换。但是,除非我提供有关我的公钥所基于的曲线的其他信息,否则还有其他方法可以解决这个问题吗?公钥加载有:
M2Crypto.EC.load_pub_key([filename])
并返回一个 EC.EC_pub 实例。我认为关于曲线的信息应该隐藏在这种情况下的某个地方,但我还没有找到。
请指出我遗漏的内容,或者我的解决方案是否错误或可以更简单,或任何其他建议。谢谢。