Où puis-je trouver de la documentation sur le format d'une clé publique RSA?
Une clé publique RSA formatée par OpenSSH
:
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQB / nAmOjTmezNUDKYvEeIRf2YnwM9 / uUG1d0BYsc8 / tRtx + RGi7N2lUbp728MXGwdnL9od4cItzky / zVdLZE2cycOa18xBK9cOWmcKS0A8FYBxEQWJ / q9YVUgZbFKfYGaGQxsER + A0w / fX8ALuk78ktP31K69LcQgxIsl7rNzxsoOQKJ / CIxOGMMxczYTiEoLvQhapFQMs3FL96didKr / QbrfB1WT6s3838SEaXfgZvLef1YB2xmfhbT9OXFE3FXvh2UPBfN + ffE7iiayQf / 2XR + 8j4N4bW30DiPtOQLGUrH1y5X / rpNZNlWW2 + jGIxqZtgWg7lTy3mXy5x836Sj / 6L
La même clé publique formatée pour une utilisation dans Secure Shell (RFC 4716 - The Secure Shell (SSH) Public Key File Format) :
---- BEGIN SSH2 PUBLIC KEY ----
AAAAB3NzaC1yc2EAAAABJQAAAQB/nAmOjTmezNUDKYvEeIRf2YnwM9/uUG1d0BYs
c8/tRtx+RGi7N2lUbp728MXGwdnL9od4cItzky/zVdLZE2cycOa18xBK9cOWmcKS
0A8FYBxEQWJ/q9YVUgZbFKfYGaGQxsER+A0w/fX8ALuk78ktP31K69LcQgxIsl7r
NzxsoOQKJ/CIxOGMMxczYTiEoLvQhapFQMs3FL96didKr/QbrfB1WT6s3838SEaX
fgZvLef1YB2xmfhbT9OXFE3FXvh2UPBfN+ffE7iiayQf/2XR+8j4N4bW30DiPtOQ
LGUrH1y5X/rpNZNlWW2+jGIxqZtgWg7lTy3mXy5x836Sj/6L
---- END SSH2 PUBLIC KEY ----
La même clé publique formatée en tant que clé publique RSA (notez les cinq -
et pas d'espace):
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEA+xGZ/wcz9ugFpP07Nspo6U17l0YhFiFpxxU4pTk3Lifz9R3zsIsu
ERwta7+fWIfxOo208ett/jhskiVodSEt3QBGh4XBipyWopKwZ93HHaDVZAALi/2A
+xTBtWdEo7XGUujKDvC2/aZKukfjpOiUI8AhLAfjmlcD/UZ1QPh0mHsglRNCmpCw
mwSXA9VNmhz+PiB+Dml4WWnKW/VHo2ujTXxq7+efMU4H2fny3Se3KYOsFPFGZ1TN
QSYlFuShWrHPtiLmUdPoP6CV2mML1tk+l7DIIqXrQhLUKDACeM5roMx0kLhUWB8P
+0uj1CNlNN4JRZlC7xFfqiMbFRU9Z4N6YwIDAQAB
-----END RSA PUBLIC KEY-----
Le vidage hexadécimal des données encodées en base 64:
00 00 00 07 73 73 68 2d 72 73 61 00 00 00 01 25 00 00 01 00 7f 9c 09
8e 8d 39 9e cc d5 03 29 8b c4 78 84 5f d9 89 f0 33 df ee 50 6d 5d d0
16 2c 73 cf ed 46 dc 7e 44 68 bb 37 69 54 6e 9e f6 f0 c5 c6 c1 d9 cb
f6 87 78 70 8b 73 93 2f f3 55 d2 d9 13 67 32 70 e6 b5 f3 10 4a f5 c3
96 99 c2 92 d0 0f 05 60 1c 44 41 62 7f ab d6 15 52 06 5b 14 a7 d8 19
a1 90 c6 c1 11 f8 0d 30 fd f5 fc 00 bb a4 ef c9 2d 3f 7d 4a eb d2 dc
42 0c 48 b2 5e eb 37 3c 6c a0 e4 0a 27 f0 88 c4 e1 8c 33 17 33 61 38
84 a0 bb d0 85 aa 45 40 cb 37 14 bf 7a 76 27 4a af f4 1b ad f0 75 59
3e ac df cd fc 48 46 97 7e 06 6f 2d e7 f5 60 1d b1 99 f8 5b 4f d3 97
14 4d c5 5e f8 76 50 f0 5f 37 e7 df 13 b8 a2 6b 24 1f ff 65 d1 fb c8
f8 37 86 d6 df 40 e2 3e d3 90 2c 65 2b 1f 5c b9 5f fa e9 35 93 65 59
6d be 8c 62 31 a9 9b 60 5a 0e e5 4f 2d e6 5f 2e 71 f3 7e 92 8f fe 8b
J'ai lu qu'il existe plusieurs formats 🕗 :
Les données clés peuvent être codées de trois manières générales:
- Format codé DER binaire. Ceci est parfois appelé codé ASN.1 BER
- Format PEM ou base64. Il s'agit des mêmes données que le fichier encodé DER mais il est encodé en base64 avec des lignes d'en-tête et de pied de page supplémentaires
- Format XML.
Si c'est ASN.1 , l'hexagone ne lui ressemble certainement pas.
Quel est le format d'une clé publique RSA?
Voir également
la source
openssl asn1parse -inform PEM
avec des-----BEGIN RSA PUBLIC KEY----
données ou toute autre structure PEM. Beaucoup plus facile que d'essayer de manipuler manuellement les en-têtes avec les commandes grep / tr / base64.À partir des données décodées en base64 d'une clé OpenSSL rsa-ssh , j'ai pu deviner un format:
00 00 00 07
: préfixe de longueur de quatre octets (7 octets)73 73 68 2d 72 73 61
: "ssh-rsa"00 00 00 01
: préfixe de longueur de quatre octets (1 octet)25
: Exposant RSA (e
): 2500 00 01 00
: préfixe de longueur de quatre octets (256 octets)Module RSA (
n
):La validation la plus proche de ma théorie, je peux la trouver à partir de la RFC 4253:
Mais cela n'explique pas les préfixes de longueur.
Prenant le hasard que
RSA PUBLIC KEY
j'ai trouvé (dans la question), et décodant le base64 en hexadécimal:De RFC3447 - Public-Key Cryptography Standards (PKCS) # 1: RSA Cryptography Specifications Version 2.1 :
En utilisant l'excellente (et la seule vraie) documentation ASN.1 de Microsoft :
donnant le module et l'exposant de la clé publique:
0xfb1199ff0733f6e805a4fd3b36ca68...837a63
Mise à jour : Ma forme développée de cette réponse dans une autre question
la source
RSA PUBLIC KEY
suit la forme ASN.1 (voir la spécification PKCS), cela n'a rien à voir avec le format d'OpenSSH.string
etmpint
- il est décrit dans la RFC 4251, section 5, pas besoin de quesser :)Décodeur de référence de CRL, CRT, CSR, NEW CSR, PRIVATE KEY, PUBLIC KEY, RSA, RSA Public Key Parser
Clé publique RSA
Clé privée chiffrée
CRL
CRT
RSE
NOUVEAU CSR
PEM
PKCS7
CLÉ PRIVÉE
CLÉ DSA
Courbe elliptique
Clé privée PGP
Clé publique PGP
la source