¿Qué cifrado se aplica a una clave generada por 'openssl req'?

6

Cuando se genera una clave con openssl genrsa , el cifrado se selecciona con un argumento de línea de comando como -aes128 . Una vez que se genera la clave, podemos ver qué cifrado se usó en el archivo. Ej:

cat host.key

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,AF4EBC2AE861F6FE8C751F7DAD5D4721
... 
-----END RSA PRIVATE KEY-----

Cuando se genera una clave a través de openssl req -newkey rsa:2048 -keyout host.key , el archivo no indica qué cifrado se usó.

-----BEGIN ENCRYPTED PRIVATE KEY-----
...
-----END ENCRYPTED PRIVATE KEY-----

¿Qué es?

¿Cómo sabe openssl rsa -in host.key cómo descifrar la clave?

Actualizar

openssl req se cifra de forma predeterminada con DES-EDE3-CBC.

openssl req -new -x509 -out server.cer -keyout server.key -subj "/CN=toto/" 

Generating a 1024 bit RSA private key
..................++++++
..++++++
writing new private key to 'server.key'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----

cat server.key

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,02306CD22AAC94CD
-----END RSA PRIVATE KEY-----

El problema es con mi comando original. Especificó una configuración que influye en la generación de claves de alguna manera todavía se me escapa.

De forma predeterminada, la configuración asumirá encrypt_key = yes . Eso lleva a que la clave se cifre con algo no especificado. Especificar encrypt_key = no bajo la sección [req] es equivalente al argumento -nodes .

Las siguientes preguntas permanecen sin embargo:

  • ¿Qué cifrado se aplica mediante openssl req cuando se especifica una configuración?
  • ¿Se puede controlar el algoritmo?
  • ¿Cómo adivina openssl rsa el cifrado correcto para el descifrado? Obviamente, debe estar codificado en algún lugar de los datos ...

Al principio, parece bueno que openssl req genere la clave para mí. Pero genrsa ofrece más control.

    
pregunta Philippe A. 08.07.2015 - 16:13
fuente

1 respuesta

3
  

¿Qué cifrado se aplica mediante openssl req cuando se especifica una configuración?

A través del código fuente, me parece que es triple DES o nada. (Independientemente de cualquier cosa que pueda haber sido configurada en su archivo de configuración).

$ git log apps/req.c | head -n3
commit f1cece554ddf282f1512b4da04664467746ffd24
Author: Richard Levitte <[email protected]>
Date:   Tue Jul 7 11:13:20 2015 +0200

$ grep -n -C1 cipher apps/req.c
197-    X509_REQ *req = NULL;
198:    const EVP_CIPHER *cipher = NULL;
199-    const EVP_MD *md_alg = NULL, *digest = NULL;
--
216-#ifndef OPENSSL_NO_DES
217:    cipher = EVP_des_ede3_cbc();
218-#endif
--
590-        if ((p != NULL) && (strcmp(p, "no") == 0))
591:            cipher = NULL;
592-        if (nodes)
593:            cipher = NULL;
594-
--
597-        assert(private);
598:        if (!PEM_write_bio_PrivateKey(out, pkey, cipher,
599-                                      NULL, 0, NULL, passout)) {
  

¿Se puede controlar el algoritmo?

No. Ver más arriba.

  

¿Cómo opensl rsa adivina el cifrado correcto para el descifrado? Obviamente, debe estar codificado en algún lugar de los datos ...

Sí. Está en el archivo. El archivo en sí es un archivo ASN.1. Puedes usar OpenSSL para analizarlo.

$ openssl asn1parse -in keyviareqnewkeycommand.pem -i | cut -c-90
    0:d=0  hl=4 l=1294 cons: SEQUENCE
    4:d=1  hl=2 l=  64 cons:  SEQUENCE
    6:d=2  hl=2 l=   9 prim:   OBJECT            :PBES2
   17:d=2  hl=2 l=  51 cons:   SEQUENCE
   19:d=3  hl=2 l=  27 cons:    SEQUENCE
   21:d=4  hl=2 l=   9 prim:     OBJECT            :PBKDF2
   32:d=4  hl=2 l=  14 cons:     SEQUENCE
   34:d=5  hl=2 l=   8 prim:      OCTET STRING      [HEX DUMP]:D48091CF79B0E2D2
   44:d=5  hl=2 l=   2 prim:      INTEGER           :0800
   48:d=3  hl=2 l=  20 cons:    SEQUENCE
   50:d=4  hl=2 l=   8 prim:     OBJECT            :des-ede3-cbc
   60:d=4  hl=2 l=   8 prim:     OCTET STRING      [HEX DUMP]:EEF03DDF397E19DB
   70:d=1  hl=4 l=1224 prim:  OCTET STRING      [HEX DUMP]:A8DACADF4BABA008CF155C960FD112C

Ahora PBKDF2 es el algoritmo de derivación de estiramiento / clave de clave y des-ede3-cbc es el algoritmo de cifrado.

    
respondido por el StackzOfZtuff 09.07.2015 - 14:55
fuente

Lea otras preguntas en las etiquetas