Qual è lo scopo dei parametri DH?

53

Per uno scambio di chiavi Diffie-Hellman (D-H) (TLS) il server genera un prime p e un generatore g , che è un modulo radice primitivo p.

Quando si imposta un server web con SSL / TLS (ad es. nginx) si può usare una direttiva ssl_dhparam dhparam4096.pem;
Il file dhparam4096.pem può essere generato utilizzando openssl dhparam -out dhparam4096.pem 4096

Qual è esattamente lo scopo di questi parametri D-H?
Possono essere pubblici? (ad esempio, posso pubblicare il mio file dhparam4096.pem ?)

Ecco i contenuti del mio file dhparam4096.pem :
Sembra una rappresentazione esadecimale di un intero 4096 bit, è corretto?

-----BEGIN DH PARAMETERS----- MIICCAKCAgEAsb8mBiOtYJZ3XR7f/rCXQwpAAnUPXf7l9pwjYxxy30A7rIzMTrsz bXuhhEmzroJcDqKbu2nIzOBNO6HuyQ3n9x/ZbY5kiEt6q7UrB5jC9LwyPASZhd/F 6xLC7yqFs9sdCaXzuyMS4Ep5sPH6lOvftdsuGZZF9HriTepv/lpD1cPtab+3vHZX IELVc2WBwVzvNRGd/SQB8RJ+NNF8IseCV/pb/tb67O1p7sn+JsD5xgNB7Lte/XjD QBXv86aNuI2Z6zAuCiQsQ4rJuWcdnyAz0+zW9DRHz0osB1+IfHYcf4tNmvMKbC8E u/vI+Q2WsMXkbTyhWibV2zH8cXdfsj5xpIgtbxm4G1ELGFgqyX9LD0IddXE7Md86 qwoKSTBNOyCIEZwwNfKDXY0b7zzObv7b3//J7gM323bAcm9g3uVaYBxF7ITd/jGm AxpnF55mfhAOYemPZtNinnPAdvqf6BhZe29wfVC1yCIhg7ec9spRaFn2GgW0eL3d q/+Ux8DJBtzKE10YyLa7bh1Dhml/xtA7rpqLL4+jg5c6lLEvSGmAZtm879NYS0za 33/2LN0/KB4z46Ro5hwqq3UIIe8oDsxdlNGb0mb9F0lKw5//J24PK/t11qMt8yuG oKUE7TkDfwXlEBxd/ynW2/kLIjhG1JG55Vz8GWet8+ZGzfl/VQeUb9MCAQI= -----END DH PARAMETERS-----

    
posta Ben Richard 19.07.2015 - 17:30
fonte

3 risposte

41

What exactly is the purpose of these DH Parameters?

Questi parametri definiscono come OpenSSL esegue lo scambio di chiavi Diffie-Hellman (DH) . Come hai affermato correttamente, includono un field prime p e un generatore g . Lo scopo della disponibilità a personalizzare questi parametri è consentire a tutti di utilizzare i propri parametri per questo. Questo può essere usato per evitare di essere influenzato dall'attacco Logjam (che non si applica realmente ai numeri primi di campo a 4096 bit).
Quindi cosa definiscono?
Uno scambio di chiavi Diffie-Hellman funziona come segue:

Il server Bob utilizza questi parametri per calcolare B=g^b mod p . Invia (B,g,p) al client Alice che calcola A=g^a mod p da sola insieme a K=B^a mod p . Invia A a Bob e calcola K=A^b mod p . Poiché A^b=g^(a*b)=g^(b*a)=B^a mod p mantiene entrambe le parti concorderanno su una chiave condivisa. I parametri p e g definiscono la sicurezza di questo scambio di chiavi. Un p maggiore renderà molto più difficile trovare il segreto condiviso K , difendendolo dagli attaccanti passivi.

E perché devi precalcolarli?
Trovare il primo p significa trovare un valore per p per il quale p=2q+1 detiene, con q come un primo. p viene quindi chiamato primo sicuro .
La ricerca di questi numeri primi è davvero intensa di calcolo e non può essere garantita da ogni connessione, quindi sono pre-calcolati.

Can they be public?

, non è un rischio pubblicarli. Infatti vengono inviati per ogni scambio di chiavi che coinvolge alcuni scambi di chiavi Diffie-Hellman (DH). Esistono anche alcuni parametri standardizzati, ad esempio in RFC 5114 . Gli unici problemi possibili con la pubblicazione potrebbero essere che un potente attaccante potrebbe essere interessato a eseguire alcuni calcoli su di loro, consentendogli di eseguire l'attacco Logjam . Tuttavia, poiché i tuoi parametri utilizzano un campo primo 4096 bit p questo non è un rischio.
Per spiegare perché pubblicarli non è un rischio, potresti voler dare un'occhiata alla descrizione sopra riportata sullo scambio di chiavi e notare che i parametri sono usati solo come base per i calcoli ma tutti i segreti ( a,b ) sono completamente indipendenti di g,p .

    
risposta data 19.07.2015 - 18:38
fonte
8

Dalla pagina wiki openssl per lo scambio di chiavi Diffie Hellman :

If Alice and Bob wish to communicate with each other, they first agree between them a large prime number p, and a generator (or base) g (where 0 < g < p).

Alice chooses a secret integer a (her private key) and then calculates g^a mod p (which is her public key). Bob chooses his private key b, and calculates his public key in the same way.

Quindi Alice avrà sempre la stessa chiave privata, ma per ogni set di parametri DH, g e p, otterrà una chiave pubblica corrispondente diversa.

Più in basso nella pagina si dice:

Since parameter generation can be an expensive process this is normally done once in advance and then the same set of parameters are used over many key exchanges.

E nella pagina wiki openssl per i parametri Diffie Hellman si dice:

To use perfect forward secrecy cipher suites, you must set up Diffie-Hellman parameters (on the server side)

Quando viene utilizzato Diffie Hellman (DH) statico (a differenza di Ephemeral Diffie Hellman (EDH)) i parametri DH sono impostati per il server e possono essere incorporati in un certificato, quindi sono pubblici vedi questa risposta . La segretezza viene dalle chiavi private di Alice e Bob.

    
risposta data 19.07.2015 - 18:05
fonte
3

Lo scopo dei parametri DH è quello di scambiare un segreto (un numero intero di grandi dimensioni appartenente ad un gruppo di ordine principale) che verrà utilizzato per crittografare una trascrizione di messaggi all'interno di un la sessione .

Il temporaneo DH offre la sicurezza in avanti, il che significa che la chiave di sessione (scambiata all'inizio della sessione) viene cancellata al termine della sessione. Pertanto, un utente malintenzionato non può recuperare i messaggi scambiati tra due parti per più dell'ultima sessione (poiché ogni sessione ha una chiave segreta diversa che viene sempre cancellata al termine).

    
risposta data 19.07.2015 - 21:23
fonte

Leggi altre domande sui tag