Botan:序列化ECDH私钥
Botan: serialize ECDH private 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);
我得到一个异常:
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)。因此,没有理由序列化/存储密钥以达成密钥协议。
从某种意义上说,你确实需要提前思考,问问自己是否需要序列化。如果不需要序列化,就不应该序列化密钥——尤其是私钥。相反,您可以直接传递对象句柄。
相关文章:
- 如何在openssl-ecc中获取十六进制格式的私钥
- 如何在C++中使用X509证书模在令牌中查找私钥
- 私钥解密代码使用公共接口说明符到 BSAFE 库 v6.0?
- 从字符串 Crypto++ 导入 RSA 公钥/私钥
- 将私钥和证书存储在C++/OpenSSL中
- 区块链超级账本私钥错误
- 博坦加载现有的 RSA 私钥
- C 从XML导入CAPI/CNG中的RSA私钥
- 使用密码将 RSA 私钥写入 PEM 文件
- 一代 RSA-2048 密钥(公钥和私钥)
- 如何获取PCCERT_CONTEXT私钥的NCRYPT_KEY_HANDLE?
- 将ECDSA Keypair的公共和私钥分开
- RSA 私钥加密 QT C++
- 在 SSH 上的公钥-私钥身份验证上的 libcurl 实现
- 使用 openssl libcrypto 解密具有 RSA 私钥的数据时RSA_NO_PADDING的使用
- 使用 WinInet 的客户端身份验证(证书 + 私钥)
- OpenSSL AES_CFB128_ENCRYPT公共/私钥C
- 如何通过PKCS#11 API从电子令牌获取私钥
- 使用 OpenSSL 生成私钥
- Botan:序列化ECDH私钥