Las longitudes de clave para los cifrados generalmente se expresan en bits, no en bytes. 8 bits = 1 byte. Por lo tanto, lo que realmente esperaría ver es una clave de 512 bits = 64 bytes, ¿por qué no lo hizo?
Primero: el formato. El archivo de salida de su comando es un archivo PEM, lo que significa que es un Base64 -codificado DER estructura de datos codificados donde los datos de Base64 se incluyen en estas líneas -----BEGIN … -----
y -----END … -----
. Base64 es una codificación que genera 4 caracteres por cada 3 bytes de entrada. Entonces, sus 424 caracteres después de la codificación Base64 eran 318 bytes (= 2544 bits) antes de la codificación. Pero eso todavía no es de 64 bytes, ¿verdad?
Segundo: Datos adicionales. Cuando solicita una clave con un tamaño de 512 bits, lo que solicita es una clave cuyo módulo público tiene un tamaño de 512 bits. Pero una clave RSA consiste en este módulo público y el exponente publico El último generalmente es bastante pequeño, en su ejemplo, era de 17 bits (almacenado como 3 bytes). ¿Qué más?
Tercero: La clave privada. Luego, el comando genrsa
genera realmente un par de claves RSA que consta de claves privadas y públicas. No hay comando para generar una clave pública, ya que sería inútil. En cambio, por convención, cuando almacena la clave privada, también almacena la clave pública, ya que de todos modos es solo un valor adicional. Normalmente, la clave privada sería aproximadamente del mismo tamaño que el exponente público, por lo que aún no hemos explicado el tamaño del archivo. Esto se debe a que openssl
usa una optimización basada en el teorema del resto chino y para esto necesita para almacenar tres valores adicionales con la clave privada.
¿Cómo puedes ver todo esto por ti mismo?
-
openssl base64 -d -in testKey -out testKey.raw
decodificará la codificación base64 y generará los datos en bruto. Esto tiene un tamaño de 318 bytes.
-
openssl asn1parse -in testKey
(o alternativamente: openssl asn1parse -in testKey.raw -inform der
para decirle que no espere PEM sino DER sin procesar) genéricamente analizará la codificación ASN.1 DER y le mostrará los campos individuales.
-
openssl rsa -in testKey -text -noout
analizará el archivo como una clave RSA y le dará una interpretación de todos los campos, es decir, sus valores.