Reading Time: 4 minutes

Algoritmo Diffie-Hellman

Gli algoritmi di crittografia asimmetrici sono generalmente più lenti di quelli simmetrici.

Anche se la capacità di elaborazione delle stazioni degli utenti è in continuo aumento, il vantaggio computazionale esistente non potrà mai essere annullato, rendendo di fatto preferibile adottare un algoritmo asimmetrico solo quando occorre crittografare messaggi brevi.

Per questo motivo gli algoritmi asimmetrici trovano un notevole campo di impiego, in coppia con quelli simmetrici, negli schemi di crittografia ibridi.

L’algoritmo a chiave pubblica e privata viene usato nella fase iniziale dello schema ibrido per consentire ai partecipanti di scambiarsi una chiave comune.

L’algoritmo asimmetrico più utilizzato in questi casi, è l’algoritmo Diffie-Hellman.

Tale algoritmo fu introdotto nel 1976 e non consente la creazione di un canale sicuro attraverso cui gli utenti possono comunicare (a differenza di quanto è previsto nell’algoritmo RSA), ma solo lo scambio sicuro di una chiave comune segreta.

La robustezza dell’algoritmo si basa sulla difficoltà computazionale di calcolare logaritmi discreti.

I partecipanti coinvolti nello scambio della chiave comune devono condividere preliminarmente due numeri a e p.

Questi numeri rappresentano il punto di partenza dell’intero processo.

La conoscenza dei numeri a e p da parte di un hacker non è di nessun aiuto per ricavare la chiave comune scambiata tra le parti.

Il numero p deve essere un numero primo scelto in maniera casuale.

Il numero a deve essere invece selezionato in modo che la sequenza : {a mod p, a2 mod p, …, ap-1 mod p} risulti una permutazione di tutti i numeri compresi tra 0 e (p-1).

Il numero a che gode di questa proprietà viene definito radice primitiva del numero primo p.

In accordo con questa scelta è ora possibile scrivere qualsiasi numero b compreso tra 0 e (p-1) come b = ai mod p con 0<i<p-1.

Una volta condivisa la coppia a e p, i partecipanti allo scambio (che chiameremo convenzionalmente Alice e Bob) possono avviare l’algoritmo per giungere alla condivisione di una comune chiave segreta K, non prevedibile a priori da nessuno dei due partecipanti.

Lo schema proposto dall’algoritmo Diffie-Hellman, semplifica il processo di generazione e scambio di chiavi, consentendo a ciascuna parte di generare una componente pubblica della chiave, facilmente trasferibile all’altro patecipante.

L’algoritmo prevede che ciascun partecipante crei indipendentemente due distinte componenti (X e Y) della chiave comune, e successivamente prevede lo scambio reciproco della componente pubblica Y.

Nel dettaglio Alice (le cui componenti sono indicate con il pedice A) svolge le seguenti operazioni:

  • Condivide con Bob la coppia (a, p);
  • sceglie XA minore di p;
  • calcola YA = aXa mod p;
  • trasmette la componente YA a Bob (mentre XA viene mantenuta segreta).

Bob (pedice B) svolge le seguenti operazioni:

  • Condivide con Alice la coppia (a, p);
  • sceglie XB minore di p;
  • calcola YB = aXb mod p;
  • trasmette la componente YB ad Alice (mentre XB viene mantenuta segreta).

La chiave comune KC può essere calcolata in maniera indipendente da Alice e Bob usando le seguenti trasformazioni:

  • Alice calcola KC = (YB)Xa mod p;
  • Bob calcola KC = (YA)Xb mod p.

Le due operazioni finali producono lo stesso risultato.

L’algoritmo Diffie-Hellman permette ai partecipanti di contribuire personalmente alla generazione della chiave comune KC senza delegare l’intera responsabilità della sua creazione nè ad Alice nè a Bob.

Un hacker non disponendo delle componenti private XA e XB non può ricavare la chiave KC.

L’hacker può tentare solo un attacco per forza bruta, cercando di ricavare il logaritmo discreto di Y per risalire a X.

Tale operazione è però assai più complessa del calcolo dell’esponenziale che ha permesso agli utenti legittimi di ricavare Y a partire da X.

L’unica vera debolezza dell’algoritmo Diffie-Hellman consiste nel fatto che non esiste una vera e propria forma di autenticazione.

Per questo Alice e Bob possono essere facilmente ingannati da un hacker posto in condizione man-in-the-middle e in grado di intercettare e modificare le componenti pubbliche scambiate.

L’hacker infatti, conoscendo i numeri {a, p} può interpretare il ruolo di Bob nel dialogo con Alice e quello di Alice nel dialogo con Bob.

Se non esiste modo per stabilire l’autenticità della componente pubblica, Alice e Bob alla fine credono di aver stabilito una chiave comune KC tra loro, mentre in realtà hanno partecipato a determinare due diverse chiavi segrete KAH e KBH con l’hacker.

I dati che vengono poi trasmessi su tale canale possono essere lettie e/o modificati dall’hacker senza difficolta, sebbene siano codificati.

Operando in condizione man-in-the-middle l’hacker può continuare a operare sui messaggi scambiati a lungo, senza che Alice e Bob se ne rendano conto.

Per evitare che l’attacco abbia successo è necessario implementare l’algoritmo Diffie-Hellman usando qualche meccanismo addizionale per stabilire l’autenticità della componente pubblica scambiata (per esempio attraverso l’uso combinato di altri algoritmi crittografici e/o opportune funzioni di hash).

Nonostante questo inconveniente, la semplicità computazionale e l’elevato grado di sicurezza dimostrato attraverso una lunga crittoanalisi, hanno decretato il successo dell’algoritmo Diffie-Hellman.

Attualmente è adottato in molte applicazioni e servizi Internet.

error: Content is protected !!

La maggior parte dei contenuti del blog ComputerSec vengono pubblicati a beneficio di tutti e in modo completamente gratuito.
Tuttavia per supportare il blog, e per avere ulteriori vantaggi, puoi decidere di abbonarti e sfruttare al 100% tutti i contenuti!
Abbonati Ora!

Complimenti! Ti sei iscritto alla nostra Newsletter

C'è stato un errore durante l'invio della richiesta. Per favore riprova.

Computer Security will use the information you provide on this form to be in touch with you and to provide updates and marketing.