本文へスキップ
ecdsa.com

PKCS #8

アルゴリズムに依存しない秘密鍵のコンテナ(RFC 5208 の PrivateKeyInfo、RFC 5958 の OneAsymmetricKey)で、PEM では -----BEGIN PRIVATE KEY-----、パスワードで保護されている場合は -----BEGIN ENCRYPTED PRIVATE KEY----- として保存されます。
別表記PKCS#8PrivateKeyInfoBEGIN PRIVATE KEYOneAsymmetricKey

PrivateKeyInfo は、バージョン、privateKeyAlgorithm(AlgorithmIdentifier)、privateKey の OCTET STRING、任意の属性からなる SEQUENCE です。このオクテット列には、アルゴリズム固有の鍵(PKCS #1 の RSAPrivateKey、SEC 1 の ECPrivateKey、RFC 8410 に従って包まれた 32 バイトの Ed25519 シード、ML-DSA のシードまたは展開された鍵)が入ります。RFC 5958 のバージョン 2 では、任意で公開鍵を含められるようになりました。

EncryptedPrivateKeyInfo は、これをパスワードベースの暗号化で包みます。現在使われているのは PBES2(RFC 8018)です。OpenSSL 3.6 は暗号化を指定されると、PBKDF2-HMAC-SHA256 と AES-256-CBC による PBES2 で書き出します。古い鍵では DES や RC2 による PBES1 が使われていることがあり、最近のライブラリはこれを受け付けません。

アルゴリズムを明示するため、PKCS #8 は多くのライブラリが前提とする形式です。OpenSSL 3 はデフォルトでこの形式を書き出し、Java の PKCS8EncodedKeySpec、Go の x509.ParsePKCS8PrivateKey、Node.js の createPrivateKey、WebCrypto の pkcs8 インポートはいずれもこの形式を使います。ほかの形式は openssl pkcs8 -topk8 -nocrypt または openssl pkey で変換してください。

規格と参考文献

すべての用語