Quale crittografia viene applicata a una chiave generata da 'openssl req'?

6

Quando una chiave viene generata con openssl genrsa , la crittografia viene selezionata con un argomento della riga di comando, ad esempio -aes128 . Dopo aver generato la chiave, possiamo vedere quale crittografia è stata utilizzata nel file. Es:

cat host.key

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

Quando una chiave viene generata tramite openssl req -newkey rsa:2048 -keyout host.key , il file non indica quale crittografia è stata utilizzata.

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

Che cos'è?

In che modo openssl rsa -in host.key sa come decrittografare la chiave?

Aggiornamento

openssl req cripta per impostazione predefinita 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-----

Il problema è con il mio comando originale. Ha specificato una configurazione che influenza in qualche modo la generazione delle chiavi che mi sfugge ancora.

Per impostazione predefinita, la configurazione assumerà encrypt_key = yes . Ciò porta alla crittografia della chiave con un algo non specificato. Specificare encrypt_key = no nella sezione [req] equivale all'argomento -nodes .

Le seguenti domande rimangono comunque:

  • Quale crittografia viene applicata da openssl req quando viene specificata una configurazione?
  • L'algoritmo può essere controllato?
  • In che modo openssl rsa indovina il codice corretto per la decrittografia? Ovviamente deve essere codificato da qualche parte nei dati ...

All'inizio sembra bello avere openssl req generare la chiave per me. Ma genrsa offre più controllo.

    
posta Philippe A. 08.07.2015 - 16:13
fonte

1 risposta

3

What encryption is applied by openssl req when a config is specified?

Usando il codice sorgente mi sembra che sia un DES triplo o nulla. (Indipendentemente da tutto ciò che potrebbe essere stato configurato nel file di configurazione.)

$ 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)) {

Can the algorithm be controlled?

No. Vedi sopra.

How does openssl rsa guess the right cipher for decryption? It must obviously be encoded somewhere in the data...

Sì. È nel file. Il file stesso è un file ASN.1. Puoi usare OpenSSL per analizzarlo.

$ 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

Ora PBKDF2 è l'algoritmo di derivazione chiave / allungamento della chiave e des-ede3-cbc è l'algoritmo di crittografia.

    
risposta data 09.07.2015 - 14:55
fonte

Leggi altre domande sui tag