【问题标题】:OpenSSL: Encrypt a symmetric key with an ECC public keyOpenSSL:使用 ECC 公钥加密对称密钥
【发布时间】:2020-03-15 09:07:07
【问题描述】:

我有一个对称密钥,我想使用 OpenSSL 使用 ECC 公钥对其进行加密。在其高级部分,EVP,OpenSSL offers a solution 加密“信封”,这正是我所需要的。

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

如何使用 OpenSSL 使用公钥加密刚刚对称的密钥,而不用同时加密消息?这可行吗?

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

如果没有,我如何使用没有 EVP 的公共密钥和 EC_KEY 进行加密?

【问题讨论】:

  • 不完全确定你为什么要走这条路,但RSA_public_encrypt 应该做你想做的事,假设你使用的是 RSA 密钥。这是一个直接的 API。虽然这对您来说并不重要,因为您只是在加密一个简单的会话密钥,但始终值得一提的是确保数据大小至少比密钥的模数大小低 11 个字节。
  • @WhozCraig 对不起,我应该说清楚我会更新这个问题。我希望使用 ECC 进行加密(我的密钥类型是 EC_KEY)。 ECC是否有等效功能?
  • 如果有,我没见过。我不使用 ECC,因为坦率地说,直到今天我仍然无法理解临时密钥生成、hmacs 等。几年前我开始研究它们时,我读到的第一件事就是“ECC 是' 不是真的用于加密/解密;但是有一些算法可以使用 ECC 来做“我的头开始膨胀。希望我能帮助你。对不起。
  • @WhozCraig 不幸的是,这不是我的选择。密钥已经存在,我必须使用它们进行加密。无论如何谢谢:-)
  • 您是在尝试使用 ECC 进行加密,还是尝试使用 ECC 来生成共享密钥,即 ECDH (Elliptic-Curve Diffie-Hellman)?

标签: c++ c encryption cryptography public-key-encryption


【解决方案1】:

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

执行此操作的首选方法是创建一个临时 ECC 密钥对,并使用您的私钥和接收者的公钥创建一个共享密钥来加密消息。然后,您将加密消息与您创建的 ECC 公钥一起发送。这种方案称为ECIES(椭圆曲线集成加密方案)。

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

【讨论】:

    猜你喜欢
    • 2016-07-31
    • 1970-01-01
    • 1970-01-01
    • 2013-06-09
    • 2012-04-28
    • 2020-02-28
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    相关资源
    最近更新 更多