我使用
创建了一个新密钥对 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?
答案 0 :(得分:1)
RSA - 您以前的算法 - 用于身份验证/签名,所以我在这里假设ECDSA。在这种情况下,您应该使用ECDSA_PrivateKey
而不是ECDH_PrivateKey
。 ECDSA可用于身份验证和签名,而ECDH用于密钥协议。
Diffie-Hellman密钥协议通常在没有静态密钥对的情况下执行(ECDHE中的E和SSL / TLS密码组中的DHE代表短暂的)。因此,没有理由为密钥协议序列化/存储私钥。
从某种意义上说,如果你需要序列化,你需要提前思考并质疑自己。如果不需要序列化,则不应序列化密钥 - 尤其是私钥。相反,你可以传递对象句柄。