Botan:序列化ECDH私钥

Botan: serialize ECDH private key

本文关键字:私钥 ECDH 序列化 Botan      更新时间:2023-10-16

我使用

创建了一个新的密钥对
  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);

我得到一个异常:

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用于密钥协议。

Diffie-Hellman密钥协议通常在没有静态密钥对的情况下执行(ECDHE中的E和SSL/TLS密码套件中的DHE代表ephemeral)。因此,没有理由序列化/存储密钥以达成密钥协议。

从某种意义上说,你确实需要提前思考,问问自己是否需要序列化。如果不需要序列化,就不应该序列化密钥——尤其是私钥。相反,您可以直接传递对象句柄。