Corso di Protocolli per Reti Mobili
Meccanismi crittografici ed IPsec
Università di Napoli Federico II – Facoltà di Ingegneria – Corso di Laurea in Ingegneria Informatica
Public-key cryptography● La crittografia a chiave simmetrica usa la stessa
chiave sia per cifrare che per decifrare i messaggi● La crittografia a chiave pubblica usa chiavi diverse
che non sono legate in maniera semplice tra loro:– Una chiave pubblica per la cifratura– Una chiave privata (segreta) per la decifratura
● Le funzioni di cifratura/decifratura devono essere:– Semplici da calcolare– Tali da rendere molto difficile decifrare i dati se non si
è in possesso della chiave privata
Public-key cryptography
● La crittografia a chiave pubblica fornisce:– Segretezza dei dati
● Se A cifra un messaggio usando la chiave pubblica di B, solo B (usando la propria chiave privata) sarà in grado di decifrare il messaggio
– Autenticazione del mittente● Se A cifra un messaggio usando la propria chiave
privata, solo usando la chiave pubblica di A si può decifrare il messaggio
Scambio di chiavi
● Diversi protocolli presuppongono che due nodi condividano la conoscenza di chiavi
● A tal fine è necessario– Fornire manualmente le chiavi condivise ai due nodi– Oppure utilizzare un protocollo per lo scambio di
chiavi (key exchange)● Occorrono particolari accorgimenti per scambiarsi
delle chiavi in maniera segreta usando un canale insicuro
● Il protocollo Diffie-Hellman è uno dei primi proposti per lo scambio in sicurezza di chiavi simmetriche
Diffie-Hellman key exchange
● È basato sul problema dei logaritmi discreti● Consideriamo ad esempio il gruppo (rispetto alla
moltiplicazione modulo p) G = {1, 2, …, p-1} con p numero primo
● La funzione esponenziale discreta applicata ad un numero del gruppo restituisce ancora un numero del gruppo
– es. p=17, |34|17
= |81|17
= 13
● Il logaritmo discreto è l'operazione inversa
– x=log313 |3x|
17 = 13
Diffie-Hellman key exchange
● Mentre il calcolo dell'esponenziale discreto è semplice, per calcolare il logaritmo discreto è necessario risolvere un'equazione del tipo |ax|
p=b
– Trovare x è computazionalmente molto difficile● Il fatto che, pur conoscendo a, b e p, sia molto
difficile risalire ad x può essere usato nel campo della sicurezza
Diffie-Hellman key exchange
● Il protocollo Diffie-Hellman usa gruppi moltiplicativi di interi modulo p, ovvero gli interi compresi tra 1 e p-1 che non hanno fattori in comune con p– es. p=10 → G={1,3,7,9}, p=18 → G={1,5,7,11,13,17}– G è chiuso rispetto alla moltiplicazione modulo p– Se p è un numero primo → G={1, 2, ..., p-1}
● Per ciascun valore di p, l'insieme G è dotato di uno o più generatori
● Nel caso di unico generatore g, ogni numero bG può essere espresso come |gi|
p , i=0,..., |G|-1
● Inoltre, |gi+np|p = |gi|
p n
Diffie-Hellman key exchange● p=10 → G={1,3,7,9}, unico generatore g=3
– |30|10
=1, |31|10
=3, |32|10
=9, |33|10
=7
– |34|10
=1, |35|10
=3, |36|10
=9, |37|10
=7
● p=18 → G={1,5,7,11,13,17}, unico generatore g=5– |50|
18=1, |51|
18=5, |52|
18=7, |53|
18=17, |54|
18=13, |55|
18=11
– |56|18
=1, |57|18
=5, |58|18
=7, |59|18
=17, …
● Se la cardinalità di G è elevata, non è fattibile ricavare l'esponente a partire dal generatore e dalla potenza modulo p– Per valori piccoli, un approccio brute force è fattibile– La cardinalità di G è massimizzata se p è primo
Diffie-Hellman key exchange
● Per scambiarsi una chiave segreta, due nodi si accordano su p e (quindi) g (es. p=23 e g=5)– Non occorre mantenere p e g segreti
● Sceglie un intero segreto a (a=6)● Calcola A=|ga|
p
(es. |56|23
= 8)A=|ga|
p (es. 8)
● Sceglie un intero segreto b (es. b=15)● Calcola B=|gb|
p
(es. |515|23
= 19)
● Calcola |Ab|p
(es. |815|23
= 2)
B=|gb|p (es. 19)
● Calcola |Ba|p
(es. |196|23
= 2)
Diffie-Hellman key exchange
● I due nodi condividono un numero segreto– |Ba|
p = |gba|
p = |gab|
p = |Ab|
p
● dal quale determinano la chiave condivisa● Un attaccante può conoscere p, g, |ga|
p e |gb|
p
– ma, grazie alla complessità del logaritmo discreto, non può risalire nè ad a nè a b
– e quindi non può risalire alla chiave condivisa● a (b) può essere vista come la chiave privata
corrispondente alla chiave pubblica |ga|p (|gb|
p)
Diffie-Hellman key exchange
● L'algoritmo è efficace se la cardinalità di G è elevata
● Sono tipicamenti usati per p numeri primi la cui rappresentazione in binario richiede tra 768 bit e 8192 bit
● Su tali numeri le operazioni non possono essere effettuate in hardware
● Vengono impiegati algoritmi (software), che quindi rendono la computazione della chiave piuttosto onerosa– Fortunatamente, almeno |ga|
p e |gb|
p possono essere
pre-calcolati
IPsec
IPsec
● IPv4 non protegge l'integrità dei pacchetti– La checksum non è crittograficamente sicura– Modifica dell'indirizzo IP sorgente (IP spoofing) →
mancanza di autenticazione del mittente● IPv4 non protegge la confidenzialità dei dati
– I pacchetti non sono cifrati● Nel 1998 l'RFC 2401 (sostituito dall'RFC 4301 nel
2005) introduce IPsec, una security architecture per il protocollo IP
IPsec
● Per usare IPsec, i nodi che vogliono stabilire una comunicazione sicura devono accordarsi su un insieme di algoritmi e chiavi da usare
● IPsec assume che i due end-point condividono una chiave simmetrica ma non specifica come i nodi negoziano tale chiave– Si può usare IKE (Internet Key Exchange) oppure
HIP (Host Identity Protocol)● entrambi basati sullo scambio di chiavi Diffie-Hellman
● La relazione tra mittente e destinatario che si sono accordati su algoritmi e chiavi è detta Security Association
IPsec● Una Security Association (SA) è una relazione
monodirezionale– Due SA sono necessarie per uno scambio bidirezionale
● Una Security Association comprende tutte le informazioni relative ad una comunicazione sicura– Indirizzo IP dell'end-point, algoritmi di cifratura ed
autenticazione usati, chiavi● È possibile che più SA esistano tra una coppia di host
– Per poter elaborara un pacchetto ricevuto non è possibile utilizzare i numeri di porto (TCP o UDP)● Potrebbero essere cifrati
– Una SA è quindi identificata da un Security Parameter Index (SPI)
IPsec
● L'SPI è incluso nelle informazioni di una Security Association ed è inserito nell'header IPsec – Gli end-point devono anche accordarsi sui due valori
di SPI da usare● Alla ricezione di un pacchetto, l'SPI contenuto
nell'header IPsec indica la SA che contiene le informazioni necessarie per elaborare il pacchetto
● Per inviare un pacchetto, un nodo consulta il Security Policy Database (SPD), che indica per ciascun tipo di traffico (indirizzi IP src e dst, porti src e dst, etc.) la SA da usare per elaborare il pacchetto
IPsec
● IPsec prevede due modalità di funzionamento– Transport mode
● Protegge il traffico tra due host– Tunnel mode
● Protegge il traffico tra due network gateway
IPsec – Transport mode
● L'host mittente aggiunge un header IPsec addizionale tra l'header ed il payload IP
● È possibile proteggere l'integrità dell'header IP, ma non è possibile cifrarlo– È impiegato per il routing
IP header IP payload
IP header IPsec header IP payload
IPsec – Tunnel mode
● Il gateway inserisce un header IP aggiuntivo prima dell'header IPsec
● L'header IP esterno è usato per l'instradamento verso il gateway che funge da end-point del tunnel– L'header IP interno può essere cifrato– Il gateway estrae il pacchetto incapsulato e lo inoltra
all'host destinazione
IP header IP payload
IPsec header IP header IP payloadOuter IP header
IPsec
● Il formato dell'header IPsec dipende dal protocollo utilizzato per la sicurezza dei dati
● Sono previsti due protocolli:– Authentication Header (AH)
● Fornisce autenticazione ma non segretezza– Encapsulating Security Protocol (ESP)
● Fornisce autenticazione e segretezza
Authentication Header (AH)
● Una checksum calcolata con un algoritmo crittografico protegge l'integrità del payload IP e dell'header IP (esclusi campi che variano ad ogni hop come il TTL e l'Header Checksum)
– Payload length: dimensione dell'header IPsec– SPI: Security Parameter Index– Sequence Number: protezione contro replay attack
Payloadlength Reserved SPINext
headerSequenceNumber
Authenticationdata
1 1 2 4 4 variabile
IPsec header → Authentication Header
Authentication Header (AH)
● Transport mode
● Tunnel mode
IP header IP payload
IP header AH IP payload
Integrità protetta(eccetto i campi mutevoli nell'header IP)
AH IP header IP payloadOuter IP header
Integrità protetta(eccetto i campi mutevoli nell'header IP esterno)
Encapsulating Security Payload (ESP)
● Il payload IP è cifrato per garantire la segretezza● L'integrità dell'header IP è garantita implicitamente
– Il destinatario decifra il payload usando la chiave presente nella SA con il mittente
● Opzionalmente, può fornire autenticazione dell'header IP aggiungendo una checksum (che non viene cifrata) dopo il payload IP (cifrato)
SPI SequenceNumber
4 4
IPsec header → ESP Header
Encapsulating Security Payload (ESP)
● Transport mode
● Tunnel mode
IP header IP payload
IP header ESP Header IP payload
Encrypted
ESP Header IP header IP payloadOuter IP header
Encrypted
Protezione contro replay attack
● IPsec offre protezione contro i replay attack inserendo un Sequence Number nell'header IPsec
● Dato che IP non garantisce la consegna in ordine, è necessario mantenere un insieme di pacchetti ritenuti validi– Replay protection window (dim. min = 32, tipica = 64)
dropped dropped Se checksum corretta accetta, altrimenti scarta
Avanza finestra
dim = 16
Distributed Hash Tables
Strutture dati
● I vettori consentono un accesso agli elementi in un tempo O(1)– Cancellazione ed inserimento sono in genere O(n)
● Le liste consentono cancellazioni ed inserimenti in un tempo O(1) (ammesso che la posizione sia nota)– La ricerca richiede un tempo O(n)
● L'obiettivo è avere una struttura dati che consente accesso agli elementi, inserimento e cancellazione in un tempo O(1)– Ovvero indipendente dal numero di elementi presenti
nella struttura dati
Indirizzamento diretto● Supponiamo che:
– Ogni valore è associato ad una chiave (univoca)– Detto N il numero di tutte le possibili chiavi, esiste
una legge F che associa ad ogni chiave un intero tra 0 ed N-1 in maniera univoca
● Si può allora usare un vettore di dimensione N per memorizzare tutti i valori– Un valore può essere solo memorizzato
nell'elemento del vettore il cui indice è ottenuto applicando la legge F alla chiave associata al valore
● Se F è semplice da calcolare, la complessità delle operazioni è O(1)
Indirizzamento diretto
● Es. matricola c/m (chiave) – nome studente (valore)
● Il vettore dovrebbe contenere C milioni di locazioni– C è il numero di prefissi diversi
● L'indice potrebbe essere m+c*106
– es. c=0 per 534, c=1 per 691, c=2 per N46
Davide Bianchi534/003125
Gianni Lamberti534/003252
Valeria Rossi691/001542
Marco ReiN46/000194
534/003252
691/001542
N46/000194
534/003125
3125
3252
1001542
2000194
Chiavi Indici Vettore
Indirizzamento diretto
● Non è conveniente quando il numero delle possibili chiavi è molto maggiore del numero di valori effettivamente presenti nella struttura dati– Per ciascun corso di laurea, solo una piccola frazione
del milione di matricole possibili è effettivamente associati a studenti● Matricole non ancora assegnate, studenti laureati...
● In tali casi, il tentativo di velocizzare le operazioni sugli elementi della struttura dati comporta un notevole spreco di memoria
Tabelle hash
● Allochiamo un vettore di dimensione (molto) inferiore al numero di possibili chiavi
● La legge H che associa un indice a ciascuna chiave è detta funzione di hash– Non è iniettiva
● Può dunque succedere che a due chiavi distinte la funzione di hash associ lo stesso indice– I valori corrispondenti dovrebbero essere inseriti
nella stessa locazione del vettore– Tale situazione costituisce una collisione
Tabelle hash● Per gestire le collisioni, ogni locazione del vettore
può puntare ad una lista concatenata di valori● La dimensione del vettore è pari alla cardinalità del
codominio della funzione di hash
● Indice = |m+c*106|727
→ dimensione vettore = 727
Davide Bianchi534/003125
Gianni Lamberti534/003252
Valeria Rossi691/001542
Marco ReiN46/000194534/003252
691/001542
N46/000194
534/003125
217
344
463
Chiavi Indici Vettore di liste concatenate
Tabelle hash
● L'inserimento richiede un tempo O(1)– Se, ad esempio, è effettuato in testa alla lista
● La ricerca richiede lo scorrimento della lista– Tempo O(t), con t lunghezza media delle liste
● La cancellazione richiede O(1) se la posizione è nota, altrimenti O(t)
● Una buona funzione di hash H– Deve essere computazionalmente semplice– Deve distribuire le chiavi in maniera uniforme sugli
indici, in modo da minimizzare t
Distributed Hash Table (DHT)
● Una DHT è un'estensione di una Tabella Hash per applicazioni distribuite su diversi nodi
● Ogni nodo nella DHT è responsabile della memorizzazione di un certo intervallo di chiavi (e dei valori associati)
● Un host che vuole cercare una chiave in una DHT (lookup) contatta uno qualunque dei nodi della DHT– Il nodo inoltra la query al nodo della DHT
responsabile per la memorizzazione del valore associato alla chiave cercata
Distributed Hash Table (DHT)● Una DHT deve definire
– Come le chiavi sono assegnate ai nodi– Come un nodo può localizzare il nodo responsabile
di una data chiave per conoscerne il valore● Diverse DHT sono state definite e vengono usate
da applicazioni peer-to-peer (la chiave identifica una risorsa, il valore è l'indirizzo IP degli host che la possiedono)– CAN– Chord– Kademlia– ...
One-way cryptographic hash functions
● Oltre alla crittografia simmetrica e pubblica, le funzioni one-way cryptographic hash costituiscono un terzo meccanismo crittografico
● Queste funzioni trasformano un dato valore di lunghezza variabile in un valore di lunghezza fissata tale che– Il calcolo della funzione è semplice– Il calcolo della funzione inversa non è fattibile
● Funzioni hash opportune hanno queste caratteristiche– Il risultato, essendo distribuito in maniera uniforme sui
possibili valori, assomiglia ad un numero casuale che è difficile da correlare al valore di input
One-way cryptographic hash functions
● Le funzioni one-way cryptographic hash possono essere usate per calcolare la checksum che verifica l'integrità e l'autenticità di un messaggio
● Es. HMAC (Hashed Message Authentication Code)
XOR
key
ipad
||Message
H
XOR
key
opad
checksum
||: concatenazione
H: hash function (es. MD5 o SHA-1)
ipad: 0x3c3c3c...3c
opad: 0x5c5c5c...5c
H
||
Riferimenti
● Host Identity Protocol (HIP) – Towards the secure mobile Internet– Capp. 2 e 10