web-dev-qa-db-fra.com

Quel est le format d'une clé publique RSA?

J'ai cette clé publique RSA à partir de laquelle je veux obtenir Modulus et exposant mais je ne peux pas obtenir le format dans lequel elle est encodée. Quelqu'un peut-il dire comment le décoder?

-----BEGIN PUBLIC KEY-----
MIIBBgKBgDI/ranPo8MDfguQfSzqg7mtNlUJLLBK7tlVALyk42agbLTSFcZbs9Yw
t3nSe9yNzZB9ZVrL3O9GXkEb6xvj3dqrog+wWOeFCqNV7BuJNYYC/ef4vlnUFQdw
yswbd7d198qjWBZ7MiZRXxX8qKRln+osTvsDYOMZk93k0cGZgyuJAoGAHkgFohgA
nH93kDPjN4sHaT9WsmZ4ailbMtcnWuLizTRJ2sdGjNrpuwT1R+x1nlYHOeDUSOu6
De0kQJX+HZuQCoha6THsdgcV297krN22FwsDZ1PItXLIr5oC7zcNQaDyAJOIv6BC
ufHQ0IR+L9b9esniMbF8yV0d7EVAaBJiyRk=
-----END PUBLIC KEY-----
10
ping0Fdeath
$ cat > foo.txt
-----BEGIN PUBLIC KEY-----
MIIBBgKBgDI/ranPo8MDfguQfSzqg7mtNlUJLLBK7tlVALyk42agbLTSFcZbs9Yw
t3nSe9yNzZB9ZVrL3O9GXkEb6xvj3dqrog+wWOeFCqNV7BuJNYYC/ef4vlnUFQdw
yswbd7d198qjWBZ7MiZRXxX8qKRln+osTvsDYOMZk93k0cGZgyuJAoGAHkgFohgA
nH93kDPjN4sHaT9WsmZ4ailbMtcnWuLizTRJ2sdGjNrpuwT1R+x1nlYHOeDUSOu6
De0kQJX+HZuQCoha6THsdgcV297krN22FwsDZ1PItXLIr5oC7zcNQaDyAJOIv6BC
ufHQ0IR+L9b9esniMbF8yV0d7EVAaBJiyRk=
-----END PUBLIC KEY-----
$ openssl asn1parse -i -in foo.txt 
    0:d=0  hl=4 l= 262 cons: SEQUENCE          
    4:d=1  hl=3 l= 128 prim:  INTEGER           :323FADA9CFA3C3037E0B907D2CEA83B9AD3655092CB04AEED95500BCA4E366A06CB4D215C65BB3D630B779D27BDC8DCD907D655ACBDCEF465E411BEB1BE3DDDAABA20FB058E7850AA355EC1B89358602FDE7F8BE59D4150770CACC1B77B775F7CAA358167B3226515F15FCA8A4659FEA2C4EFB0360E31993DDE4D1C199832B89
  135:d=1  hl=3 l= 128 prim:  INTEGER           :1E4805A218009C7F779033E3378B07693F56B266786A295B32D7275AE2E2CD3449DAC7468CDAE9BB04F547EC759E560739E0D448EBBA0DED244095FE1D9B900A885AE931EC760715DBDEE4ACDDB6170B036753C8B572C8AF9A02EF370D41A0F2009388BFA042B9F1D0D0847E2FD6FD7AC9E231B17CC95D1DEC4540681262C919

Voilà. J'ai utilisé ces commandes sur un système Linux assez régulier.

Notez que votre fichier est bizarre. Une clé publique RSA se compose de deux entiers, le module (n) et l'exposant public (e). Il est normalement codé comme une structure ASN.1 qui est un SEQUENCE de deux INTEGER valeurs. Cette structure est alors supposée être codée DER, et la séquence d'octets résultante pour devenir le contenu d'un BIT STRING dans une autre structure externe ASN.1 qui contient également un identificateur explicite pour le type de clé (c'est-à-dire une indication que la clé est vraiment de type RSA). Dans votre cas, cette structure externe est manquante, il n'y a donc formellement aucune indication, ni dans la structure ASN.1 codée, ni dans l'en-tête PEM ("BEGIN PUBLIC KEY"), que la clé est une clé RSA.

En tant que clé RSA, cela semble un peu étrange aussi. Le premier entier, prétendument le module, a une longueur de 1022 bits, ce qui n'est pas très courant (les développeurs et les cryptographes aiment vraiment les puissances de 2, donc ils n'accepteront pas un entier de 1022 bits s'il est possible qu'ils puissent faire un 1024 -bit entier). Le deuxième entier, l'exposant public, est assez grand (1021 bits); ceci est officiellement supporté par RSA, mais très rare: les exposants publics peuvent être très courts sans aucun effet néfaste sur la sécurité, et cela rend les opérations de clé publique beaucoup plus rapides, il n'y a donc aucune raison réelle d'utiliser un grand exposant. Certaines implémentations répandues (Windows CryptoAPI ...) ne prennent même pas en charge les exposants publics supérieurs à 32 bits.

Si ce que vous avez est vraiment une clé publique RSA, alors il y a des chances que quelqu'un vous tire la jambe - ou fasse des choses inhabituelles et probablement faibles.

11
Thomas Pornin