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

OpenSSL: Encrypt a symmetric key with an ECC public key

我有一个对称密钥,我想使用 OpenSSL 使用 ECC public 密钥对其进行加密。在其高级部分,EVP,OpenSSL offers a solution 加密 "an envelop",这正是我所需要的。

但是,我希望在不同的步骤中进行这些操作,而不是像 EVP 中的 OpenSSL 提供的那样全部合并。我想控制我自己用 OpenSSL 加密对称密钥的位置,并使用我自己的 C++ 包装器加密消息,并将它们都放在我选择的格式中。

如何使用 OpenSSL 使用 public 密钥加密刚刚的对称密钥,而无需它也加密消息?这可行吗?

我尝试在提供的示例中使用零长度明文,但它崩溃了。这可能吗?

如果没有,我如何在没有 EVP 和 EC_KEY 的情况下使用 public 密钥加密?

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

执行此操作的首选方法是创建一个临时 ECC 密钥对,并使用您的私钥和接收方的 public 密钥创建一个共享密钥来加密消息。然后,您将加密的消息与您创建的 ECC public 密钥一起发送。这个方案叫做ECIES(Elliptic Curve Integrated Encryption Scheme)。

您需要调用 ECDH_compute_key 来创建共享密钥,并将您的临时私钥和接收方的 public 密钥以及指向您创建的密钥派生函数 (KDF) 的指针传递给它定义。最简单的 KDF 是 ECDH 计算输出的 x 坐标的散列。无论您使用什么方案,另一方都需要就正在使用的 KDF 达成一致。