RSAPublicKey n’est qu’une SEQUENCE du module et de l’exposant public. RSAPrivateKey contient version, n, e, d, p, q, dP, dQ, qInv et d’éventuels nombres premiers supplémentaires. Aucune des deux ne porte d’identifiant d’algorithme : c’est pourquoi le format ne peut décrire que RSA et pourquoi l’étiquette PEM doit indiquer RSA.
PKCS #8 enveloppe les mêmes octets RSAPrivateKey dans une PrivateKeyInfo avec un OID d’algorithme (rsaEncryption, 1.2.840.113549.1.1.1), et SubjectPublicKeyInfo enveloppe RSAPublicKey de la même façon pour les clés publiques. OpenSSL 3 écrit du PKCS #8 (BEGIN PRIVATE KEY) par défaut, y compris depuis openssl rsa ; -traditional produit du PKCS #1. PKCS8EncodedKeySpec de Java et de nombreuses bibliothèques JWT n’acceptent que PKCS #8 ou SPKI, d’où l’erreur bien connue avec les anciennes clés de type id_rsa.
Ne confondez pas ce format de clé avec les remplissages de signature ou de chiffrement PKCS #1 : la RFC 8017 définit les trois, et quand on parle d’une « clé PKCS #1 », c’est uniquement le format de fichier qui est visé.