Estaba actualizando el archivo autorizado_claves en mi servidor con la clave pública para la nueva computadora portátil que obtuve y me sorprendió descubrir que las dos claves públicas comenzaron de la misma manera:
# key 1
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ....
#
# key 2
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ....
¿De qué trata la historia, AAAAB3...
etc.? Con algunas búsquedas en línea, veo que otras teclas también comienzan igual. ¿Explica el algoritmo o la versión o algo así?
ssh
encryption
Gabe Durazo
fuente
fuente
AAAAB3NzaC1yc2EAAAA
así que supongo que es una especie de identificador de tipo / versión de algo común ...Respuestas:
Este es en realidad un encabezado que define qué tipo de clave es esta. Si revisa la sección Algoritmo de clave pública de RFC 4253 , podemos ver eso para las claves RSA
De hecho, si Base64 decodifica la cadena "B3NzaC1yc2E", verá que se traduce a ASCII como "ssh-rsa". Presumiblemente, el "AAAA" representa algún tipo de encabezado para que la aplicación pueda saber dónde exactamente en el flujo de datos comenzar a procesar la clave.
fuente
El formato de clave pública SSH está documentado en RFC 4253 , y se resume un poco aquí . Los datos codificados por PEM consisten en varios pares (longitud, datos), y el primer par codifica el nombre del algoritmo, que será algo así como
ssh-rsa
ossh-dsa
.Esto significa que la parte inicial de los datos de clave pública para todas las claves ssh será similar.
fuente
Hice una exageración profunda en el formato después de seguir los enlaces de Scott para divertirse. TLDR:
RFC4231 especifica los dos tipos de datos utilizados:
string
: Cadena binaria de longitud arbitraria. Las cadenas pueden contener datos binarios arbitrarios, incluidos caracteres nulos y caracteres de 8 bits. Se almacenan como unuint32
contenido de su longitudmpint
: Representa múltiples enteros de precisión en formato de complemento a dos, almacenados como una cadena, 8 bits por byte, MSB primero. [...]RFC4253 sec 6.6 dice que la clave está codificada como:
"ssh-rsa"
La cadena
ssh-rsa
se convierte en\x00\x00\x00\x07ssh-rsa
, que luego se codificaAAAAB3NzaC1yc2E=
, por lo que todas las claves ssh-rsa deberían comenzar con eso.e
, el exponente públicoPor lo general, algo así como 3, 17, 257, 65537. Esos números se codifican de la siguiente manera (con el desplazamiento final desde arriba)
'\x00\x00\x00\x01\x03'
→AAAABAw
'\x00\x00\x00\x01\x11'
→AAAABEQ
'\x00\x00\x00\x02\x01\x01'
→AAAACAQE
'\x00\x00\x00\x03\x01\x00\x01'
→AAAADAQAB
Entonces, si ve "BAw", su exponente fue 3, o "DAQAB" = 65537
n
, el módulo (producto de tus dos números primos secretos, ¡factoriza esto!)AAABAQ
después de lo anterior significa que la longitud de su clave es de 2048 bits (y que su exponente era como DAQAB debido al relleno base64). El resto del material base64 es el exponente, no hay nada después.Otros prefijos de módulo que pueden ser comunes:
AAAAg
1024 bits, e = 0x10001AAAQI
: 2048 bits, e = 3fuente