本文へスキップ
ecdsa.com

PKCS #1 鍵形式

RFC 8017 付録 A で定義された RSA 専用の ASN.1 構造 RSAPublicKey と RSAPrivateKey で、PEM では -----BEGIN RSA PUBLIC KEY----- と -----BEGIN RSA PRIVATE KEY----- として保存されます。
別表記RSA PRIVATE KEYRSA PUBLIC KEYRSAPrivateKeytraditional RSA key

RSAPublicKey は、モジュラスと公開指数からなる単純な SEQUENCE にすぎません。RSAPrivateKey は version, n, e, d, p, q, dP, dQ, qInv と、任意で追加の素数を保持します。どちらもアルゴリズム識別子を含まないため、この形式は RSA しか表せず、PEM のラベルにも RSA と明記する必要があります。

PKCS #8 は、同じ RSAPrivateKey のバイト列を、アルゴリズム OID(rsaEncryption、1.2.840.113549.1.1.1)付きの PrivateKeyInfo で包みます。公開鍵については、SubjectPublicKeyInfo が同じように RSAPublicKey を包みます。OpenSSL 3 は、openssl rsa からの出力も含め、デフォルトで PKCS #8(BEGIN PRIVATE KEY)を書き出し、-traditional を指定すると PKCS #1 になります。Java の PKCS8EncodedKeySpec や多くの JWT ライブラリは PKCS #8 または SPKI しか受け付けないため、古い id_rsa 形式の鍵でおなじみのエラーが発生します。

この鍵形式を、PKCS #1 の署名パディングや暗号化パディングと混同しないでください。RFC 8017 はこの 3 つをすべて定義していますが、「PKCS #1 の鍵」と言う場合に指すのはファイル形式だけです。

規格と参考文献

すべての用語