> Vi diferentes tamaños de clave para el algoritmo RSA (512, 1024, ... [bits] por ejemplo) pero, ¿es esta la longitud de la clave pública o la longitud de la clave privada o ambas tienen la misma longitud?
Es la longitud del módulo utilizado para calcular el par de claves RSA. La clave pública está hecha de módulo y exponente público, mientras que la clave privada está hecha de módulo y exponente privado.
> ¡pero las herramientas en línea para generar pares de claves RSA tienen diferentes longitudes de salida!
La primera imagen muestra la clave pública y privada en formato PEM, codificada en Base64 (y no el módulo y los exponentes de la clave, que en su lugar se muestran en la segunda imagen).
El contenido de la clave privada RSA es el siguiente:
-----BEGIN RSA PRIVATE KEY-----
RSAPrivateKey ::= SEQUENCE {
version Version,
modulus INTEGER, -- n
publicExponent INTEGER, -- e
privateExponent INTEGER, -- d
prime1 INTEGER, -- p
prime2 INTEGER, -- q
exponent1 INTEGER, -- d mod (p-1)
exponent2 INTEGER, -- d mod (q-1)
coefficient INTEGER, -- (inverse of q) mod p
otherPrimeInfos OtherPrimeInfos OPTIONAL
}
-----END RSA PRIVATE KEY-----
mientras que una clave pública RSA contiene solo los siguientes datos:
-----BEGIN RSA PUBLIC KEY-----
RSAPublicKey ::= SEQUENCE {
modulus INTEGER, -- n
publicExponent INTEGER -- e
}
-----END RSA PUBLIC KEY-----
y esto explica por qué el bloque de clave privada es más grande.
Ahora, ¿por qué la clave privada contiene tanta información? Después de todo, solo se necesitan el módulo n y el exponente privado d . La razón por la que todas las demás cosas están precomputadas e incluidas en el bloque de claves privadas es para acelerar el descifrado mediante el uso de Algoritmo de Resto de China . (Felicitaciones a @dbernard por señalar esto en los comentarios).
Tenga en cuenta que un formato más estándar para las claves públicas que no son RSA es
-----BEGIN PUBLIC KEY-----
PublicKeyInfo ::= SEQUENCE {
algorithm AlgorithmIdentifier,
PublicKey BIT STRING
}
AlgorithmIdentifier ::= SEQUENCE {
algorithm OBJECT IDENTIFIER,
parameters ANY DEFINED BY algorithm OPTIONAL
}
-----END PUBLIC KEY-----
Más información aquí .
Por cierto, ya que acaba de publicar una captura de pantalla de la clave privada, espero que sea solo para pruebas :)