¿Qué tipo de codificación utilizan los archivos .pem para almacenar la clave?

2

¿Qué codificación es el módulo en la criptografía RSA almacenada como en un archivo .pem? ¿Es algo similar a la base64 del módulo?

Puedo recuperar el módulo utilizando lo siguiente:

openssl rsa -in pubkey.pem -pubin -modulus

Pero, ¿qué hace realmente? Si tengo el producto de dos números primos (n) en forma decimal, ¿cómo debo codificarlo para que la utilidad rsa pueda decodificarlo?

    
pregunta Juan John Mathews 08.02.2015 - 10:07
fuente

2 respuestas

5

Hay dos formatos de uso común:

  • DER - binario; los datos se almacenan en ASN.1 estructura
  • PEM - texto; Básicamente es un DER codificado en base 64.

Puede inspeccionarlos, por ejemplo, con el comando openssl asn1parse o decodificador en línea .

    
respondido por el zakjan 08.02.2015 - 14:53
fuente
3

Esta pregunta (y respuesta) es un subconjunto de enlace . Para comprimir y adaptar que:

Para una clave pública RSA necesita el módulo y el exponente . Es muy común usar 3 o 65537 (también conocido como F4, el cuarto primo de Fermat) como exponente, pero no es obligatorio o universal.

OpenSSL library puede admitir el formato de clave PKCS # 1 / rfc3447 específico de RSA, o el formato "SPKI" X.509 genérico y más útil y común, con uno almacenado en DER o PEM . La utilidad de línea de comandos rsa por defecto hace SPKI PEM, pero puede seleccionar los otros formatos con opciones, ver la página del manual (en línea en enlace ).

(Como dice @zakjan) DER es una codificación de ASN.1, y PEM es DER (más) codificada como base64 (todo esto, no campos individuales como el módulo), más las líneas BEGIN y END, que indican el Formato, en este caso RSA PUBLIC KEY para PKCS # 1 versus solo PUBLIC KEY para SPKI. Para codificar PKCS # 1 en DER, codifique el módulo y el exponente como INTEGER ASN.1, recuerde que los módulos RSA casi siempre tienen el tamaño de un múltiplo de 8 (por ejemplo, 1024, 2048) y, por lo tanto, requieren un octeto 00 inicial, luego se codifican en un SECUENCIA. Para SPKI, incruste más en SEQUENCE con un AlgorithmIdentifier que identifica RSA, por rfc3279 .

Alternativamente, puedes usar la biblioteca OpenSSL para codificar por ti. Coloque los dos números en los objetos "bignum" (BN), apunte a los de un objeto RSA (dejando los otros campos inicializados en vacío), y escríbalos con las rutinas RSAPublicKey (no preferidas), o colóquelas en un (vacío) ) El objeto EVP_PKEY con EVP_PKEY_set1_RSA y escribe con d2i_PublicKey{_fp,bio} para DER o PEM_write[_bio]_PublicKey para PEM.

    
respondido por el dave_thompson_085 08.02.2015 - 22:41
fuente

Lea otras preguntas en las etiquetas