Please enable JavaScript.
Coggle requires JavaScript to display documents.
Lezione 22: gestione delle chiavi e scambio Diffie-Hellman - Coggle Diagram
Lezione 22: gestione delle chiavi e scambio Diffie-Hellman
Distribuzione delle chiavi pubbliche
Elenco pubblico
Esiste un elenco dinamico e pubblico che contiene tutte le chiavi pubbliche
Essendo le chiavi visibili pubblicamente nessuno può fingersi qualcun altro
Necessita di un'organizzazione che ha il compito di mantenere e distribuire l'elenco
Non distribuisce la singola chiave pubblica a chi la richiede ma la lista che le contenente tutte, in questo modo tutti possono conoscere le chiavi pubbliche di tutti
Diventa molto pericoloso il caso in cui la chiave privata di tale autorità viene violata
Autorità di distribuzione delle chiavi pubbliche
Si occupa della gestione e distribuzione delle singole chiavi pubbliche degli utenti che conoscono la chiave pubblica dell'autorità
A invia un timestamp t1 e richiede la chiave pubblica dell'utente B con cui vuole instaurare una conversazione sicura
Autorità risponde con un messaggio cifrato con la propria chiave privata e ciò garantisce la provenienza. Esso contiene la chiave pubblica di B e il timestamp t1, utile per confermare che il messaggio non è una replica
A decifra il messaggio con la chiave pubblica dell'autorità e ottiene la chiave pubblica di B
A invia un messaggio a B cifrato con la chiave pubblica di B contenente il suo identificativo e un nonce N1
B decifra il messaggio con la propria chiave privata e richiede all'autorità centrale la chiave pubblica di A
B invia un messaggio ad A cifrato con la chiave pubblica di A contenente in nonce N1 concatenato con un altro nonce N2
A invia il nonce N2 cifrato con la chiave pubblica di B
1 more item...
Certificati a chiave pubblica
L'utilizzo di tali evita di dover contattare l'autorità di distribuzione delle chiavi
Il certificato viene rilasciato da un'autorità di certificazione e comprende
Identificazione proprietario
Firma di garanzia dell'autorità
Chiave pubblica
L'utente A fornisce all'autorità di certificazione la propria chiave pubblica e riceve un certificato che può usare per dialogare con altri utentii
Ca = E(PRauth [T1 || IDa || PUa])
La chiave privata dell'autorità garantisce l'autenticità
Solo con la chiave pubblica dell'autorità si potrà leggere il messaggio inviato
Il timestamp T1 garantisce che il certificato sia aggiornato
Annuncio pubblico
Un utente trasmette in maniera diretta o broadcast la propria chiave pubblica
Un utente D può fingersi di essere l'utente A ed inviare per suo conto una chiave pubblica ad altri utenti con cui A vuole dialogare
L'utente D sarà in grado di decifrare tutti i messaggi rivolti all'utente A con la sua chiave privata
La crittografia pubblica, oltre alla cifratura dei messaggi, è un ottimo strumento per
distribuire le chiavi segrete per la crittografia simmetrica
Distribuzione con segretezza e autenticazione
A invia un messaggio a B cifrato con la chiave pubblica di B contenente un nonce N1 concatenato con l'ID di A
B risponde con un messaggio cifrato con la chiave pubblica di A contenente il nonce N1 concatenato con un altro nonce N2
A risponde con un messaggio cifrato con la chiave pubblica di B contenente il nonce N2
A genera la chiave segreta Ks e la invia a B cifrata con la propria chiave privata e cifrando il risultato ottenuto con la chiave pubblica di B
Solo B può decifrare il messaggio e il fatto che debba anche decifrarlo con la chiave pubblica di A ne garantisce la provenienza
Distribuzione semplice
Utente A invia a B un messaggio che contiene la propria chiave pubblica e il suo ID
B genera una chiave segreta e la invia all'utente A cifrato con la sua chiave pubblica
Vulnerabile all'attacco
man-in-the-middle
1.1. L'attaccante intercetta il messaggio che A invia a B e sostituisce la chiave pubblica di A con la propria chiave pubblica (l'ID di A viene lasciato invariato)
2.1. Quando B risponderà l'attaccante otterrà la chiave segreta Ks che poi invierà ad A cifrata con la chiave pubblica di A
A e B condividono regolarmente la chiave segreta Ks, ma pure l'attaccante la possiede e può decifrare in maniera passiva la comunicazione
Scambio chiavi
Diffie-Hellman
Serve per scambiarsi una chiave che possa essere utilizzata per crittografare ulteriori messaggi
Radice primitiva
di un numero primo p = numero le cui potenze modulo p generano tutti gli interi compresi tra 1 e p-1 (permutati in un certo modo)
Dato un qualsiasi intero b e una radice primitiva a di un numero primo p è possibile trovare un esponente univoco
i
tale che
b=a^i
i è chiamato
logaritmo discreto
di b per la base a modulo p, cioè
i = d loga,p(b)
Il numero primo
q
(p) e l'intero
a
dono pubblici con
a
che è una radice primitiva di
q
.
Xa
e
Xb
sono due interi casuali che corrispondono alle chiavi private degli utenti A e B
A genera
Ya = a^(Xa) mod q
Lo stesso fa B con
Yb
Ya
e
Yb
sono le chiavi pubbliche che gli utenti A e B si scambiano
Entrambi gli utenti calcolano la chiave K
A:
K = (Yb)^(Xa) mod q
B:
K = (Ya)^(Xb) mod q
Il risultato è identico secondo le proprietà dell'aritmetica modulare**
Un attaccante dovrebbe calcolare Xa (o Xb) e cioè risolvere il logaritmo discreto
Xb = dlog(a,q) (Yb)
Molto difficile (impossibili per numeri primi q molto estesi)
Può essere utilizzato un attacco a forza bruta cercando di indovinare l'esponente
i
che permette di calcolare la chiave pubblica
L'attacco
man-in-the-middle
è in grado di violare lo scambio in quanto i partecipanti non sono autenticati
L'attaccante D genera due chiavi private Xd1 e Xd2 e calcola le corrispondenti chiavi pubbliche utilizzando il metodo classico
Ne invia una all'utente A e l'altra all'utente B
Tutti calcoleranno la chiave K (D ne calcolerà due) e si avrà che D ed A condivideranno una chiave K2 e D e B condivideranno una chiave K1
La comunicazione tra A e B non è compromessa, ma D potrà effettuare attacchi passivi o attivi
Decifra il messaggio di A verso B con la chiave K2 e lo inoltra a B codificato con K1