¿Dónde puedo encontrar documentación sobre el formato de una clave pública RSA?
Una clave pública RSA formateada por OpenSSH
:
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQB / nAmOjTmezNUDKYvEeIRf2YnwM9 / uUG1d0BYsc8 / tRtx + RGi7N2lUbp728MXGwdnL9od4cItzky / zVdLZE2cycOa18xBK9cOWmcKS0A8FYBxEQWJ / q9YVUgZbFKfYGaGQxsER + A0w / fX8ALuk78ktP31K69LcQgxIsl7rNzxsoOQKJ / CIxOGMMxczYTiEoLvQhapFQMs3FL96didKr / QbrfB1WT6s3838SEaXfgZvLef1YB2xmfhbT9OXFE3FXvh2UPBfN + ffE7iiayQf / 2XR + 8j4N4bW30DiPtOQLGUrH1y5X / rpNZNlWW2 + jGIxqZtgWg7lTy3mXy5x836Sj / 6L
La misma clave pública formateada para su uso en Secure Shell (RFC 4716 - El formato de archivo de clave pública de Secure Shell (SSH)) :
---- 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 misma clave pública formateada como una clave pública RSA (tenga en cuenta las cinco -
, y sin espacio):
-----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-----
El volcado hexadecimal de los datos codificados 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
He leído que hay un par de formatos 🕗 :
Los datos clave se pueden codificar de tres formas generales:
- Formato binario codificado DER. Esto a veces se denomina codificación BER ASN.1
- PEM o formato base64. Estos son los mismos datos que el archivo codificado DER pero está codificado en base64 con líneas adicionales de encabezado y pie de página
- Formato XML.
Si es ASN.1 , el hexágono ciertamente no lo parece.
¿Cuál es el formato de una clave pública RSA?
Ver también
fuente
openssl asn1parse -inform PEM
con-----BEGIN RSA PUBLIC KEY----
datos o cualquier otra estructura PEM. Mucho más fácil que tratar de manipular manualmente los encabezados con los comandos grep / tr / base64.A partir de los datos decodificados en base64 de una clave OpenSSL rsa-ssh , he podido adivinar un formato:
00 00 00 07
: prefijo de longitud de cuatro bytes (7 bytes)73 73 68 2d 72 73 61
: "ssh-rsa"00 00 00 01
: prefijo de longitud de cuatro bytes (1 byte)25
: Exponente RSA (e
): 2500 00 01 00
: prefijo de longitud de cuatro bytes (256 bytes)Módulo RSA (
n
):La validación más cercana de mi teoría la puedo encontrar en RFC 4253:
Pero no explica los prefijos de longitud.
Tomando el azar que
RSA PUBLIC KEY
encontré (en la pregunta) y decodificando la base64 en hexadecimal:De RFC3447 - Estándares de criptografía de clave pública (PKCS) # 1: Especificaciones de criptografía RSA Versión 2.1 :
Utilizando la excelente documentación ASN.1 de Microsoft (y la única real) :
dando el módulo de clave pública y exponente:
0xfb1199ff0733f6e805a4fd3b36ca68...837a63
Actualización : mi forma ampliada de esta respuesta en otra pregunta
fuente
RSA PUBLIC KEY
sigue el formulario ASN.1 (consulte la especificación PKCS), no tiene nada que ver con el formato de OpenSSH.string
ympint
- se describe en RFC 4251, sección 5, no es necesario preguntar :)Decodificador de referencia de CRL, CRT, CSR, NEW CSR, PRIVATE KEY, PUBLIC KEY, RSA, RSA Public Key Parser
Clave pública RSA
Clave privada encriptada
CRL
CRT
RSE
NUEVA RSE
PEM
PKCS7
LLAVE PRIVADA
DSA KEY
Curva elíptica
Clave privada PGP
Clave pública PGP
fuente