c++ - Botan:序列化ECDH私钥

标签 c++ cryptography botan

我使用

创建了一个新的 key 对
  Botan::EC_Group ecgroup("brainpool512r1");
  Botan::ECDH_PrivateKey privKey(CBotanInitEx::RNG(), ecgroup);

(与 RSA 相比,速度更快!)

按照此处的建议尝试使用 PKCS#8 对其进行序列化: https://botan.randombit.net/manual/pubkey.html#serializing-public-keys

  datPubKey  = Botan::X509::BER_encode(privKey);
  txtPubKey  = Botan::X509::PEM_encode(privKey);

  datPrivKey = Botan::PKCS8::BER_encode(privKey, CBotanInitEx::RNG(), pwd);
  txtPrivKey = Botan::PKCS8::PEM_encode(privKey, CBotanInitEx::RNG(), pwd);

我得到一个异常(exception):

PK algo ECDH has no defined OIDs

即使 botan 初始化确实通过了这一行:

add_oid(config, "1.3.36.3.3.2.8.1.1.13", "brainpool512r1");

如何序列化 ECDH_PrivateKey?

最佳答案

RSA——你以前的算法——用于身份验证/签名,所以我假设这里是 ECDSA。在这种情况下,您应该使用 ECDSA_PrivateKey 而不是 ECDH_PrivateKey。 ECDSA可用于认证和签名,而ECDH用于 key 协商。

Diffie-Hellman key 协议(protocol)通常在没有静态 key 对的情况下执行(ECDHE 中的 E 和 SSL/TLS 密码套件中的 DHE 代表短暂)。所以应该没有理由为 key 协议(protocol)序列化/存储私钥。

从某种意义上说,您确实需要提前思考并质疑自己是否需要序列化。如果不需要序列化,则不应序列化 key ——尤其是私钥。相反,您可以只传递对象句柄。

关于c++ - Botan:序列化ECDH私钥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39224753/

相关文章:

c++ - 无法使用 Eigen 库进行编译

java - 这是如何返回 "Given final block not properly padded"的?

c++ - 牡丹AES CBC PKCS7加解密

c++ - ns3中的构建错误,退出状态为1 :

c++ - 如何反转可变参数模板函数的参数顺序?

函数调用期间核心转储,找不到问题所在

delphi - Delphi XE 中的 SHA1 哈希

c++ - 如何调试 Cygwin 故障?

android - 为 Android 构建 Botan 库

c++ - 在 C++ 中创建一个类