跳到主要内容
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 默认输出 PKCS #8(BEGIN PRIVATE KEY),openssl rsa 也不例外;加上 -traditional 才会输出 PKCS #1。Java 的 PKCS8EncodedKeySpec 和许多 JWT 库只接受 PKCS #8 或 SPKI,这就是旧式 id_rsa 风格密钥常见报错的原因。

不要把这种密钥格式与 PKCS #1 的签名填充或加密填充混淆:RFC 8017 对三者都有定义,而人们说“PKCS #1 密钥”时,指的只是这种文件格式。

标准与参考资料

全部术语