Tutorials

8. Scambio delle Chiavi

Lo scambio o distribuzione delle chiavi è un processo fondamentale per stabilire comunicazioni cifrate sicure. Riguarda sia lo scambio di chiavi simmetriche che verranno poi usate per cifrare i dati c

Lo scambio (o distribuzione) delle chiavi è un processo fondamentale per stabilire comunicazioni cifrate sicure. Riguarda sia lo scambio di chiavi simmetriche (che verranno poi usate per cifrare i dati) che lo scambio di chiavi pubbliche (nel contesto della crittografia asimmetrica).

Protezione Necessaria

Lo scambio delle chiavi deve essere opportunamente protetto per garantire:

  • Che le chiavi non vengano modificate o sostituite da un attaccante (integrità e autenticità).
  • Che le chiavi non vengano acquisite da terzi (riservatezza), un requisito cruciale soprattutto per le chiavi simmetriche.

Scenari Possibili:

Esistono diversi scenari per lo scambio di chiavi:

  • Scambio di chiavi simmetriche tramite cifratura simmetrica (usando una chiave simmetrica pre-condivisa).
  • Scambio di chiavi simmetriche tramite cifratura asimmetrica.
  • "Scambio" di chiavi simmetriche senza cifratura (es. DH Key Exchange).
  • Scambio di chiavi pubbliche.

1. Diffie-Hellman Key Exchange (1976)

Whitfield Diffie e Martin Hellman sono considerati i precursori della crittografia a chiave asimmetrica. Nel 1976, hanno definito un metodo sicuro per lo scambio di chiavi che non richiede lo scambio preventivo di alcun segreto. Il metodo si basa sulla complessità matematica di risolvere il problema del logaritmo discreto, che ha poi portato allo sviluppo della crittografia a chiave asimmetrica.

Funzionamento dell'Algoritmo Diffie-Hellman (DH)

Supponiamo che Alice (A) e Bob (B) vogliano concordare una chiave comune usando DH:

1. Accordo sui Parametri Pubblici: Alice e Bob concordano su due numeri pubblici: - p: Un numero primo molto grande. - g: Un intero minore di p tale che g è un generatore del gruppo ciclico modulo p. In termini più semplici, per ogni intero a coprimo con g, esiste un k tale che gk≡a(modp). Questi parametri (p e g) possono essere scambiati su un canale non sicuro. 2. Alice Sceglie il suo Segreto: Alice sceglie un numero intero random segreto a (la sua chiave privata) e calcola la sua pre-chiave pubblica: PA​=ga(modp). 3. Bob Sceglie il suo Segreto: Bob sceglie un numero intero random segreto b (la sua chiave privata) e calcola la sua pre-chiave pubblica: PB​=gb(modp). 4. Scambio delle Pre-Chiavi Pubbliche: Alice e Bob si scambiano le pre-chiavi pubbliche (PA​ e PB​) su un canale non sicuro. 5. Calcolo della Chiave Definitiva: - Alice calcola la chiave finale: K=(PB​)a(modp). - Bob calcola la chiave finale: K=(PA​)b(modp).

Dimostrazione che Alice e Bob Ottengono la Stessa Chiave:

  • Alice calcola: K=(PB​)a(modp)=(gb)a(modp)=gab(modp).
  • Bob calcola: K=(PA​)b(modp)=(ga)b(modp)=gab(modp). Entrambi arrivano alla stessa chiave segreta K=gab(modp).

Sicurezza di Diffie-Hellman:

Un attaccante che intercetta PA​, PB​, g, e p dovrebbe risolvere il problema del logaritmo discreto per ricavare a da PA​ (o b da PB​), il che è computazionalmente difficile se i numeri p e g sono sufficientemente grandi.

Esempio Semplificato di Diffie-Hellman:

1. Alice e Bob concordano: p=23 (primo) e g=5. 2. Alice sceglie a=6. Calcola PA​=56(mod23)=15625(mod23)=8. 3. Bob sceglie b=15. Calcola PB​=515(mod23)=30517578125(mod23)=19. 4. Alice e Bob si scambiano PA​=8 e PB​=19. 5. Alice calcola: K=(PB​)a(modp)=196(mod23)=47045881(mod23)=2. 6. Bob calcola: K=(PA​)b(modp)=815(mod23)=35184372088832(mod23)=2. La chiave concordata è K=2.

Vulnerabilità di Diffie-Hellman: Attacco Man-in-the-Middle (MITM)

DH è vulnerabile agli attacchi Man-in-the-Middle (MITM), in cui un attaccante (Mallory) riesce a intercettare e modificare il traffico tra Alice e Bob. Mallory è in grado di:

  • Concordare una chiave di cifratura con Alice (facendosi passare per Bob).
  • Concordare una chiave di cifratura con Bob (facendosi passare per Alice). In questo modo, Mallory può intercettare e decifrare i messaggi di Alice e Bob, leggerli, modificarli e poi ricifrarli con la chiave concordata con l'altra parte, senza che Alice o Bob si accorgano dell'intrusione.

2. Key Derivation Function (KDF)

Lo scambio DH (e altri protocolli di scambio chiavi) non porta necessariamente alla generazione di chiavi della lunghezza voluta per l'algoritmo di cifratura finale (es. AES-256). Pertanto, si aggiunge un altro passaggio tramite una Key Derivation Function (KDF).

  • Una KDF calcola una chiave di dimensione corretta (e sufficientemente randomica) partendo dalla chiave grezza concordata con DH.
  • La KDF può anche incorporare un ulteriore parametro variabile (es. un "salt" o "info string"), precedentemente concordato tra le parti, senza necessità di segretezza.
  • Una KDF molto utilizzata è HKDF (HMAC-based Key Derivation Function), basata su HMAC.

3. EC Diffie-Hellman Key Exchange (ECDH)

Il protocollo Diffie-Hellman originale richiede l'utilizzo di numeri primi di dimensioni estremamente grandi per garantire la sicurezza. Per diminuire il carico computazionale mantenendo lo stesso livello di sicurezza, viene utilizzato l'Elliptic Curve Diffie-Hellman (ECDH), che sfrutta la teoria delle curve ellittiche per la generazione delle pre-chiavi e delle chiavi finali.

Funzionamento di ECDH:

1. Alice e Bob concordano sulla curva ellittica da usare, sui suoi parametri (a,b,p) e sul punto iniziale G (punto generatore). 2. Alice sceglie la sua chiave privata nA​ (un numero random) e calcola la sua chiave pubblica: KA​=nA​⋅G (dove nA​⋅G è il risultato di nA​ operazioni "dot" di G su se stesso). 3. Bob sceglie la sua chiave privata nB​ (un numero random) e calcola la sua chiave pubblica: KB​=nB​⋅G. 4. Scambio delle Chiavi Pubbliche: Alice e Bob si scambiano KA​ e KB​. 5. Calcolo della Chiave Definitiva: - Alice calcola: K=nA​⋅KB​. - Bob calcola: K=nB​⋅KA​.

Dimostrazione che Alice e Bob Ottengono la Stessa Chiave in ECDH:

  • Alice calcola: K=nA​⋅KB​=nA​⋅(nB​⋅G)=(nA​nB​)⋅G.
  • Bob calcola: K=nB​⋅KA​=nB​⋅(nA​⋅G)=(nB​nA​)⋅G. Entrambi arrivano allo stesso punto K sulla curva, che rappresenta la chiave segreta condivisa.

4. Scambio di Chiavi Tramite Cifratura Asimmetrica

In questo scenario, uno dei due endpoint (es. Alice) genera la chiave simmetrica che verrà utilizzata per la comunicazione, e poi la invia all'altro endpoint (Bob) cifrandola con la chiave pubblica di Bob. Bob, ricevuta la chiave cifrata, la decifra con la sua chiave privata.

Questo approccio presenta due problematiche principali:

1. Necessità di Trasferire la Chiave Pubblica in Modo Sicuro: La chiave pubblica del destinatario (Bob, in questo esempio) deve essere trasferita ad Alice in modo autentico e integro, per evitare attacchi MITM in cui un attaccante sostituisce la propria chiave pubblica. Questo spesso richiede l'uso di Certificati Digitali. 2. Vulnerabilità a Data Breach della Chiave Privata: In caso di un data breach della chiave privata del destinatario (Bob), tutte le chiavi simmetriche generate e inviate prima del data breach (e cifrate con quella chiave pubblica) potrebbero essere decifrate dall'attaccante. Ciò compromette la forward secrecy.