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

时间:2019-11-19 18:48:49

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

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

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

如何在不使用消息加密邮件的情况下使用OpenSSL用公共密钥加密仅对称密钥?这可行吗?

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

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

1 个答案:

答案 0 :(得分:4)

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

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

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