1

我使用创建了一个新的密钥对

  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

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

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

如何序列化 ECDH_PrivateKey?

4

1 回答 1

1

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

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

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

于 2016-08-31T08:21:20.503 回答