Claves SSH: ¿por qué es id_rsa más grande que id_rsa.pub?

8

Mi clave privada ( ~/.ssh/id_rsa) es un archivo de 1766 bytes, pero mi clave pública ( ~/.ssh/id_rsa.pub) tiene solo 396 bytes de longitud. ¿Por qué la gran diferencia? ¿Es porque la clave privada está encriptada usando AES? ¿El texto cifrado de AES no suele tener la misma longitud que el texto sin formato?

máquina de montaje
fuente

Respuestas:

17

Su clave privada tiene más información que su clave pública. Mientras que la clave pública solo transmite el exponente de cifrado (e) y el módulo (n), la clave privada incluye además un exponente de descifrado (d) y los dos factores primos (p y q) del módulo. La clave privada esencialmente tiene una clave pública dentro de ella.

[Cifrado: texto cifrado = mensaje ^ e (mod n); Descifrado: mensaje = texto cifrado ^ d (mod n)]

Para ver todos los datos en su archivo de clave privada:

$ openssl rsa -in id_rsa -text -noout

Editar: el archivo de clave privada aparentemente no tiene el exponente de cifrado, pero tiene exponentes d_1 y d_2, donde d_1 = d (mod p-1) y d_2 = d (mod q-1). Estos se utilizan para acelerar el descifrado: puede dividir su exponenciación de descifrado en llamadas de exponenciación paralelas más pequeñas, lo que termina siendo más rápido que un gran m = c ^ d (mod n) para grandes d y grandes n.

usuario75636
fuente
2

Lamentablemente, no especificó en qué formato se almacenan las claves. Supongo que te estás refiriendo a la codificación de clave OpenSSH. En este formato, las claves se almacenan en bloques de datos codificados en base64. Dependiendo de la codificación al cifrar, generalmente hay algún tipo de relleno involucrado al cifrar datos. Por lo tanto, los datos resultantes son múltiplos del tamaño del bloque de cifrado.

Las claves OpenSSH también pueden incluir algún tipo de comentarios y propiedades adicionales insertadas entre los marcadores ---- BEGIN SSH2 [PUBLIC|PRIVATE] KEY ----y -----END RSA [PUBLIC|PRIVATE] KEY-----. Ver RFC4716 .

Además, para la clave pública se guardan el módulo y el exponente público, mientras que para la clave privada se guarda el exponente privado. Consulte la generación de claves RSA en Wikipedia para obtener detalles sobre la base matemática. Hay muchos lugares en la web que describen la conexión matemática entre estas claves. No estoy seguro si necesita una copia de estas explicaciones aquí.

Teóricamente es posible calcular la clave privada a partir de información de clave pública, pero hacer esto es matemáticamente mucho más difícil que al revés. Simplemente considere la clave privada como la "fuente" que incluye todas las variables y la clave pública como resultado del cálculo. Es fácil realizar el cálculo una y otra vez si conoce todas las variables, pero conocer solo el resultado es difícil obtener todas las variables de origen. Esta es también la razón por la cual es suficiente guardar la clave privada en un lugar seguro. Siempre puede usar la clave privada para volver a calcular la clave pública. Pero no al revés, bueno, teóricamente puede hacer esto, pero dependiendo de la longitud de la clave, esto puede llevar muchos años;).

SkyBeam
fuente
El cálculo de la clave privada a partir de la clave pública requiere una factorización rápida y eficiente, en cuya falta se basa la seguridad del cifrado de clave pública (al menos RSA).
Andrew
Esto es correcto. Encuentra un algoritmo de factorización rápido y básicamente rompes la seguridad del cifrado RSA. Alternativamente, uno podría optar por ECC (criptografía de curva elíptica) que se basa en el concepto de dificultades para caminar logaritmos discretos. Sin embargo, si alguien encuentra una solución eficiente a este problema ...
SkyBeam