使用公开密钥加密,并使用椭圆曲线加密方法使用私有密钥解密

时间:2018-11-12 15:48:59

标签: cryptography

大家。 可以为椭圆曲线密码执行公共密钥加密流程吗? https://en.wikipedia.org/wiki/Public-key_cryptography

我需要实现以下情况:

  1. 爱丽丝产生一条消息。
  2. Alice使用Bob的公钥对其进行加密。
  3. 爱丽丝(通过不安全的频道)向鲍勃发送一条消息。
  4. 鲍勃收到消息。
  5. Bob只能使用其私钥解密此消息。

我在tweetnacl库(https://github.com/dchest/tweetnacl-js)中找不到合适的方法。有人可以指引我正确的方向吗?

谢谢。

3 个答案:

答案 0 :(得分:2)

您应该在寻找 ECIES 实施方案。 Here是一个似乎支持它的随机JavaScript库。

椭圆曲线不像RSA那样支持加密原语。有EC ElGamal,但由于密钥大小小和ElGamal的开销量,所以不值得。

要使用加密曲线,您需要使用混合加密。 ECIES是混合加密:离线ECDH密钥协议以及使用派生的秘密密钥执行的对称加密。


请注意,ECIES 标准化程度很高。您可能必须选择自己的密钥派生功能,流密码或分组密码以及操作模式。对于密钥推导方法,您可以选择可用的HKDF。如今,对于密码而言,GCM模式下的AES似乎是明智的选择(12字节IV可能会设置为零或也可从“共享机密”得出的值)。支持ECIES的图书馆可能会对ECIES的外观有自己的想法,但要注意兼容性问题...

答案 1 :(得分:0)

我建议您使用一个简单的库,该库可以为您完成工作,我特别喜欢python ecdsa模块(https://github.com/warner/python-ecdsa),它既简单又复杂。另请阅读有关EC如何工作的信息,这将有助于您做出决定。

答案 2 :(得分:0)

您链接到的tweetnacl-js文档中的加密方法不是吗? https://github.com/dchest/tweetnacl-js#naclboxmessage-nonce-theirpublickey-mysecretkey

  

nacl.box(消息,随机数,themPublicKey,mySecretKey)

     

使用对等方的公钥,我们的秘密密钥和给定的随机数对消息进行加密和身份验证,这对于密钥对的每个不同消息都必须是唯一的。

     

返回经过加密并经过身份验证的邮件,其长度比原始邮件长nacl.box.overheadLength。

您将使用收件人的公共密钥作为上述函数的第三个参数。您将使用自己的私钥作为第四个参数。该库通过创建由您的私钥签名的加密消息的签名来保护消息的完整性。