2009-10-27 11 views
12

È possibile utilizzare un algoritmo di scambio chiavi Diffie-Hellman per crittografare le comunicazioni client-server su una pagina Web al posto di SSL? Se possibile, quali sono gli svantaggi (ad esempio perché lo standard utilizza SSL che richiede un'autorità di certificazione)? La mia comprensione è che Diffie-Hellman può essere usato per stabilire segretamente una chiave condivisa che poi può essere utilizzata per crittografare ogni ulteriore comunicazione.Diffie-Hellman al posto di SSL?

risposta

9

In realtà Diffie-Hellman è una parte di SSL. Ma una parte non sostituisce le altre.

Da here SSL Diffie-Helman è utilizzato per:

Questo un Diffie-Hellman scambio di chiavi in ​​ che il certificato del server contiene i Diffie-Hellman pubblico parametri firmati dall'autorità di certificazione (CA). In altre parole, il certificato della chiave pubblica contiene i parametri della chiave pubblica di Diffie-Hellman . Il client fornisce i parametri di chiave pubblica Diffie-Hellman in un certificato , se è richiesta l'autenticazione client o in un messaggio di scambio chiave . Questo metodo determina una chiave segreta fissa tra due peer, basata sul calcolo Diffie-Hellman utilizzando le chiavi pubbliche fisse .

+0

Quindi immagino che non ci sia modo di evitare l'uso di PKI. Mi chiedevo solo per curiosità se ci fosse un modo per 2 parti (indipendentemente dal sovraccarico dell'algoritmo) per stabilire in modo affidabile un link criptato senza l'uso di una terza parte. – kmnan

+0

In teoria no. Perché senza QUALSIASI uso di terze parti non puoi essere sicuro di stabilire un collegamento criptato con l'obiettivo desiderato. – alexkr

+0

Certo, c'è. Ad esempio, se le due parti scambiano le proprie chiavi pubbliche durante una parte che firma la chiave, non hanno bisogno di alcuna terza parte per stabilire una connessione sicura. – Accipitridae

20

I due non sono realmente comparabili. DH è un algoritmo di scambio di chiavi, niente di più e niente di meno. SSL tenta di stabilire che il server a cui ti stai connettendo è davvero quello che dice di essere. Per fare ciò, utilizza un certificato che può essere ricondotto a qualcuno che (si suppone di essere in grado di) fiducia.

DH, di per sé, impedisce solo ad altri di leggere i dati trasmessi. SSL ha lo scopo di stabilire molto più di quello (ma può usare DH per impedire ad altri di leggere il flusso).

Solo per un esempio ovvio, l'utilizzo di DH (da solo) un attacco Uomo in mezzo è abbastanza semplice. Se riesco a farti connettere al mio server al posto di quello a cui avevi intenzione, posso usare DH per stabilire una sessione "sicura" con te. Quindi mi collego al server che si intendeva originariamente. Ogni pacchetto che ottengo da te, io decrypt, re-encrypt con una chiave che ho usato per collegarmi a quel server e inviare a quel server. Faccio lo stesso con tutti i suoi pacchetti di risposta. Per te, tutto sembra che provenga direttamente dal server originale e l'acquisto effettuato (ad esempio) funziona come normale. L'unica cosa che cambia è che memorizzo anche il numero della tua carta di credito, e quando provi a riempire la tua auto di carburante il giorno successivo, la carica viene rifiutata, perché nel frattempo ho speso tutto il tuo credito.

L'autenticazione in SSL ha almeno lo scopo di impedire che ciò accada. Se il tuo browser ha provato a connettersi a (ad esempio) www.amazon.com, dovrebbe darti un avvertimento se il mio certificato SSL non specifica che è stato rilasciato a www.amazon.com - e una CA non dovrebbe emettere tale certificato a qualcuno ma Amazon.

Modifica: Rileggendo questo, dovrei aggiungere un altro punto: DH, di per sé, non garantisce nemmeno la maggior parte di ciò che ho detto sopra. Di per sé, DH è solo un modo per scambiare una chiave (o, forse, potrebbe essere formulata come "informazioni di scambio necessarie per entrambe le parti per creare chiavi identiche, senza mai scambiare la chiave stessa in chiaro"). Dopo che entrambe le parti hanno la chiave, possono (e presumibilmente lo useranno) per crittografare/decodificare i dati - ma quella crittografia è in realtà separata dalla stessa DH.

4

È possibile utilizzare il contratto di chiave Diffie-Hellman anonimo con SSL. Ciò fornisce la privacy sul canale, ma nessuna autenticazione.

Ovviamente, senza autenticazione, non si può davvero avere la privacy, perché il tuo canale privato potrebbe essere collegato a un "man-in-the-middle". Ecco perché le suite anonime di crittografia DH sono scoraggiate.

Se la mancanza di un certificato vi impedisce di utilizzando SSL, dove è veramente necessario, ottenere uno gratuito da startcom.org.

+0

+1 - Neat link, ho creato i miei certificati per il mio server personale di casa ... Non mi ero reso conto che c'erano dei certificati gratuiti che utilizzano una CA incorporata nel browser in modo che i visitatori non debbano aggiungere un'eccezione –

+0

Non penso che IE li supporti, sfortunatamente. Non l'ho recensito ultimamente quindi non sono sicuro che sia ancora così. – erickson

+0

In realtà un rapido controllo su startcom.org rivela che supportano Internet Explorer. – cmaduro

2

Diffie-Hellman scambio di chiavi è solo per keyexchange. Non ti dà l'autenticazione (con chi stai parlando), hai bisogno di certificati e PKI per questo.

Quindi sì, si può fare la crittografia, ma non sai con chi stai parlando

1

Il DH scambio di chiavi non può, di per sé, fare la crittografia. Viene utilizzato per stabilire una chiave di sessione, ma non per eseguire la crittografia. Quindi, a questo livello, la domanda è erroneamente dichiarata o rivela mancanza di precisione o mancanza di comprensione (sospetto che la precisione sia il problema questa volta).

La domanda è:

  • Vuoi crittografare i dati con nessuno a tutti?
  • Vuoi essere sicuro con chi stai parlando?

Come già sottolineato, SSL utilizza uno scambio di chiavi DH per stabilire una chiave di sessione. Tuttavia, assicura anche che il programma dall'altra parte sia qualcuno di cui ti fidi (direttamente o indirettamente). Se non hai bisogno di preoccuparti se l'altra persona è affidabile, puoi semplicemente utilizzare un semplice scambio di chiavi DH e quindi inviare dati crittografati senza bisogno di certificati. Ma non sarai sicuro di chi stai parlando, a meno che tu non lo convalidi, e i certificati utilizzati da SSL ecc. Siano d'aiuto con tale convalida.