跳到主要内容
ecdsa.com

PKCS #8

与算法无关的私钥容器(PrivateKeyInfo,RFC 5208;OneAsymmetricKey,RFC 5958),在 PEM 中存储为 -----BEGIN PRIVATE KEY-----,受密码保护时则为 -----BEGIN ENCRYPTED PRIVATE KEY-----。
其他写法PKCS#8PrivateKeyInfoBEGIN PRIVATE KEYOneAsymmetricKey

PrivateKeyInfo 是一个 SEQUENCE,依次包含版本号、privateKeyAlgorithm(一个 AlgorithmIdentifier)、privateKey OCTET STRING 以及可选的属性;该八位组串存放特定于算法的密钥(PKCS #1 的 RSAPrivateKey、SEC 1 的 ECPrivateKey、按 RFC 8410 封装的 32 字节 Ed25519 种子、ML-DSA 的种子或展开后的密钥)。RFC 5958 的版本 2 增加了可选的公钥。

EncryptedPrivateKeyInfo 用基于密码的加密封装它,如今采用 PBES2(RFC 8018)。要求加密时,OpenSSL 3.6 会使用 PBES2,并配合 PBKDF2-HMAC-SHA256 和 AES-256-CBC;较旧的密钥可能使用 PBES1 配合 DES 或 RC2,现代库会拒绝这类密钥。

由于 PKCS #8 写明了算法,它是大多数库要求的格式:OpenSSL 3 默认输出它,Java 的 PKCS8EncodedKeySpec、Go 的 x509.ParsePKCS8PrivateKey、Node 的 createPrivateKey 以及 WebCrypto 的 pkcs8 导入都使用它。其他格式可以用 openssl pkcs8 -topk8 -nocrypt 或 openssl pkey 转换。

标准与参考资料

全部术语