In che modo DH può fornire un segreto noto a due parti su una connessione non crittografata senza essere intercettato via MITM?

3

Senza utilizzare i keypair privati e pubblici, non capisco come Diffie-Hellman sia in grado di generare una chiave segreta tra due parti su Internet senza passare qualcosa tra di loro che potrebbe essere annusato. C'è un termine per questo che viene dai generali che inviano messaggi attraverso territori ostili. Non capisco la matematica o la logica dietro DH e non riesco a vedere come è possibile. Un giorno passerò un'altra settimana o due andando oltre la matematica, ma fino a quando non posso verificare, non posso fidarmi. Inoltre perché usarlo quando le coppie di chiavi pubbliche private possono essere utilizzate per stabilire una chiave di sessione condivisa con molto meno rischio?

D'altro canto, le masse non istruite storicamente fiondefolagano nel progresso. Spiegatemi come se avessi 5 anni, come può la DH fornire un segreto noto a due parti su una connessione non criptata senza essere intercettata via MITM?

Titolo modificato da: "Quando una coppia di chiavi pubblica-privata è già presente, perché Diffie-Hellman è utilizzato?"

    
posta rjt 31.07.2014 - 12:08
fonte

3 risposte

6

Diffie-Hellman è un algoritmo di scambio di chiavi . La domanda buona da porre è: scambiare una chiave, sì, ma con chi?

Dal punto di vista della rete, "vedi" altre persone solo attraverso i pacchetti che ti inviano; e dato che tutti possono acquistare lo stesso tipo di PC, tutti possono inviare gli stessi pacchetti - tranne che alcune persone / sistemi potrebbero conoscere alcuni valori che altri non hanno. In crittografia, la conoscenza è potere , il che significa che tu sei ciò che sai. Se inizi a scambiare dati con Alice, sai che stai parlando con Alice e non con Bob perché Alice può inviarti un messaggio che potrebbe essere stato calcolato solo da qualcuno che conosce un determinato valore e in qualche modo sappi che c'è qualcuno chiamato "Alice" che conosce quel valore, e qualcun altro chiama "Bob" che non lo fa.

Se, nel tuo modello, non definisci almeno che esistono diversi interlocutori con una conoscenza distinta, allora la nozione di "uomo nel mezzo" non ha nemmeno senso, perché tutte le altre persone, in quel modello, sono identici. Se vuoi parlare dell'attacco man-in-the-middle e di come evitarli, devi prima definire con chi vuoi parlare, e ciò implica specificare che cosa quel sistema / persona sa, che l'attaccante non lo sa.

In breve: MitM è un caso speciale di imitazione (anche una doppia impersonificazione), in cui un attaccante assume l'identità di qualcun altro. Quindi hai bisogno di una nozione di "identità" prima di iniziare a discutere degli attacchi MitM.

Supponiamo ora di aver definito una nozione di identità. Per esempio. sei un browser Web e stai cercando di raggiungere un URL https://www.example.com/foobar.html . Quindi la nozione di identità è "chiunque controlli il server www.example.com , come registrato nel DNS ".

Diffie-Hellman è un algoritmo di scambio di chiavi. Ciò significa che non include, di per sé, alcun tipo di autenticazione. Questo non significa che il DH sia inutile; solo che è improbabile che fornisca da solo la totalità della funzionalità di sicurezza che si cerca di ottenere. In pratica, diversi algoritmi crittografici sono assemblati in un protocollo come SSL / TLS .

Tornando al nostro esempio, Diffie-Hellman è ampiamente utilizzato in SSL / TLS, con le suite di crittografia "DHE". L'intera torre della crittografia ha questo aspetto:

  • Il server ha una coppia di chiavi pubblica / privata adatta per firme (RSA, DSA, ECDSA ...).
  • Il server genera la metà dello scambio di chiavi DH, quindi lo firma (con la sua chiave privata di firma) e lo invia al client.
  • Il server invia anche la sua chiave pubblica della firma al client, come certificato emesso da qualche CA.
  • Il client convalida il certificato (perché il client conosce già e si fida della CA) e apprende quindi la chiave pubblica del server.
  • Il client verifica che il certificato del server contenga il nome del server previsto (qui: www.example.com ).
  • Il client verifica la firma sulla metà-DH inviata dal server, utilizzando la chiave pubblica del server.
  • Il client calcola il suo mezzo-DH e lo invia al server.
  • Il client e il server completano il calcolo DH e ottengono un segreto condiviso, che viene poi espanso in chiavi simmetriche per crittografare tutti i dati.

La nozione di identità utilizzata dal client è che un proprietario del server non può ottenere certificati validi da una CA attendibile a meno che non controlli effettivamente il dominio pertinente. Quindi, dal punto di vista del cliente, il "vero www.example.com server" è "chiunque conosca una chiave privata corrispondente a una chiave pubblica in un certificato di una CA attendibile e contenente il nome www.example.com ". La conoscenza della chiave privata è ciò che rende il server "quello giusto". La CA collega quella chiave (la chiave pubblica, in particolare) al nome DNS.

Ciò che protegge MitM è che il man-in-the-middle non conosce la chiave privata (potrebbe generare chiavi private, ma non corrisponderebbe alla chiave pubblica nel certificato). La firma è il meccanismo con il quale questa protezione viene applicata. Quello non è Diffie-Hellman che fornisce quella protezione. D'altra parte, la firma non risulta in un segreto condiviso: questo è il lavoro di DH.

Riepilogo: si desidera ottenere un segreto condiviso con un server specifico, in modo da poter crittografare i gigabyte di dati da inviare a quel server. Questo è un lavoro in due parti: vuoi un segreto condiviso , ma deve anche essere con un server specifico . DH fa la parte del "segreto condiviso". Hai bisogno di qualcos'altro per l'altra parte, ad es. qualche algoritmo di firma. Questo è ciò che accade in SSL o SSH.

    
risposta data 31.07.2014 - 19:54
fonte
5

Ecco Diffie-Hellman per uno studente - un bambino di cinque anni non capisce i logaritmi; -)

DH usa due idee:

  • l'esponentazione è veloce (2 alla potenza 3 è uguale a 8) ma il processo inverso (un logaritmo esatto) richiede molto tempo. In realtà prendiamo un grande numero, ma per motivi di spiegazione, piccoli numeri qui.
  • l'esponenziale è commutativa, cioè 2 alla potenza 3 alla potenza 4 è uguale a 2 alla potenza 4 alla potenza 3

Dì che vogliamo comunicare. Siamo d'accordo sul numero di base A che aumenteremo ad un certo potere. E questo non deve essere privato. Inviamo semplicemente A l'un l'altro.

Ora scelgo un grosso numero casuale per la mia B. Scegli, separatamente, il tuo grande numero casuale, che chiameremo il tuo B. E entrambi eleviamo questo numero concordato a quella grande potenza. Ora, inviamo il risultato intermedio l'uno all'altro. E ora prendo il tuo risultato intermedio e lo porto al mio grande potere. Prendi il mio risultato intermedio e lo innalzi al tuo grande potere. Entrambe finiamo con la stessa risposta.

Un MITM vede A e entrambi i nostri risultati intermedi, ma non può fare il processo inverso in tempi ragionevoli.

Non riesce a capire quali sono i nostri poteri che abbiamo inventato. Quindi finiamo per essere in grado di scegliere numeri casuali, usare quelli per aumentare un valore comune a quella potenza, scambiare quei risultati, farlo di nuovo, e entrambi finiamo con esattamente lo stesso valore, che possiamo usare come chiave.

In realtà, ci sono alcuni altri requisiti per A diversi da essere grandi (ad es. deve essere primo).

Credito : risposta basata su la trascrizione di Security Now Episode 34

    
risposta data 31.07.2014 - 12:36
fonte
2

Diffie-Hellman da solo non fornisce alcuna autenticazione.

È vero che se due parti concordano su una chiave con DH, le terze parti che stanno semplicemente sniffando il traffico non sono in grado di scoprire la chiave segreta scambiata.

Tuttavia, DH può essere attaccato da un MITM attivo che crea due scambi di chiavi con gli stessi parametri pubblici. Uno dal client al MITM e uno dal MITM al server. Il MITM inganna sia il client che il server in questo caso pensando che stiano parlando tra loro.

Quando i server usano la DH o la sua variante di curva ellittica, tendono a usarla effimamente mentre l'autenticazione è fornita da RSA / (EC) DSA e dall'infrastruttura a chiave privata. (in genere certificati X509) Il motivo per il DH temporaneo (EC) qui è che fornisce la segretezza in avanti, il che significa che se la chiave privata del server viene rubata in un punto nel futuro, le sessioni che si sono verificate nel passato (e che sono stati registrati da una parte sniffing) non possono essere decifrati in modo retrospettivo.

EDIT: Ho dimenticato di menzionare l'uso del DH fisso. In questo caso, i parametri pubblici e una chiave derivata dalla chiave privata DH del server sono nel certificato. In questo caso la chiave privata DH del server non può essere derivata dai parametri pubblici né dalla chiave pubblica e con ciò il certificato fornisce l'autenticazione. (Il server è l'unico che conosce la chiave privata).

Detto questo, non ho mai visto certificati DH fissi in natura. Nella maggior parte dei casi è usato effimamente per la segretezza in avanti come menzionato sopra.

    
risposta data 31.07.2014 - 13:41
fonte

Leggi altre domande sui tag