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

问题描述 投票:3回答:1

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

但是,我希望这些步骤可以分步进行,而不是一并提供,就像OpenSSL在EVP中提供的那样。我想控制自己在哪里使用OpenSSL加密对称密钥,并使用自己的C ++包装器对消息进行加密,然后将它们都放入我选择的格式。

我如何使用OpenSSL使用公开密钥加密仅对称密钥,而又不对消息进行加密?这可行吗?

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

如果没有,如何在没有带有EC_KEY的EVP的情况下使用公钥加密?

c++ c encryption cryptography public-key-encryption
1个回答
3
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.