OpenSSL:使用ECC公钥加密对称密钥

6
我有一个对称密钥,希望使用OpenSSL的ECC公钥进行加密。在其高级部分中,OpenSSL 提供了一种 加密“信封”的解决方案,这正是我所需要的。
但是,我希望将它们分成单独的步骤,而不是像OpenSSL在EVP中提供的那样全部在一起。我想要控制自己使用OpenSSL加密对称密钥,并使用自己的C++包装器加密消息,并将它们都放在我选择的格式中。
如何使用OpenSSL仅加密对称密钥并使用公钥?而不必同时加密消息,这可行吗?
我尝试在示例中提供零长度的明文,但它会导致崩溃。这可能吗?
如果不行,如何使用EC_KEY在没有EVP的情况下使用公钥进行加密?

@WhozCraig 抱歉,我应该说明一下我会更新问题。我正在寻找使用ECC加密(我的密钥类型是“EC_KEY”)。是否有等效的ECC函数? - The Quantum Physicist
@WhozCraig 很不幸,这不是我的选择。密钥已经存在,我必须使用它们进行加密。无论如何感谢您 :-) - The Quantum Physicist
你是想使用ECC加密还是使用ECC生成共享密钥,即ECDH(椭圆曲线迪菲-赫尔曼)? - dbush
据我所知,您实际上不能直接使用ECC进行加密 - 您正在谈论一个ECIES方案。这实际上只是一个冗长的ECDH交互。但是,这确实需要收件人的现有长期公钥。 - Luke Joshua Park
@LukeJoshuaPark 我刚发现了这个函数:EVP_PKEY_encrypt()。它似乎需要一个 EVP_PKEY 作为参数。我通过挖掘 OpenSSL 源代码学到了这一点,这在函数 EVP_SealInit 中体现,但是在 wiki 页面 中没有任何注释说明 ECC 加密不可行。这就是我感到困惑的原因。我错过了什么吗? - The Quantum Physicist
显示剩余8条评论
1个回答

7

与RSA不同,ECC不能直接进行加密和解密。

最好的方法是创建一个短暂的ECC密钥对,并使用您的私钥和接收者的公钥来创建共享密钥,然后使用它来加密消息。然后,您将发送加密消息以及您创建的ECC公钥。这个方案称为ECIES(Elliptic Curve Integrated Encryption Scheme)。

您需要调用ECDH_compute_key来创建共享密钥,并传递您的临时私钥和接收者的公钥,以及指向您定义的密钥派生函数(KDF)的指针。最简单的KDF将是ECDH计算输出的x坐标的哈希值。无论您使用什么方案,另一方都需要同意所使用的KDF。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接