Funzioni di hash sicure: MD5 e SHA-1
POLITECNICO
DI MILANO
Funzioni di hash sicure:
MD5 e SHA-1
Davide Cerri
CEFRIEL - Politecnico di Milano
[email protected]
http://www.cefriel.it/~cerri/
Funzioni di hash
Una funzione di hash (o message digest) è una
funzione H che, dato un input M di dimensione
qualsiasi, produce un output h (l’hash) di
dimensione fissa:
fissa
h = H(M)
Lo scopo di una funzione di hash è di creare
un’impronta
impronta (fingerprint) del messaggio.
Dato che l’output ha lunghezza fissa (in genere
dell’ordine di una o poche centinaia di bit),
esisteranno necessariamente diversi messaggi che
generano lo stesso hash... ma non è detto che si
riesca a trovarli...
Funzioni di hash sicure: MD5 e SHASHA-1
Davide Cerri
-2-
Davide Cerri
1
Funzioni di hash sicure: MD5 e SHA-1
Unidirezionalità
Una funzione di hash sicura deve essere
unidirezionale (one-way), cioè:
dato un qualsiasi M, deve essere computazionalmente
semplice calcolare H(M);
dato un qualsiasi h, deve essere computazionalmente
impraticabile calcolare un M tale che h = H(M);
L’idea è che l’hash di un messaggio sia in sostanza
una corrispondenza pseudocasuale, per cui non è
possibile prevedere in alcun modo il risultato se non
calcolando l’hash.
Messaggi diversi, anche per un solo bit, devono
generare hash non correlati.
correlati
Funzioni di hash sicure: MD5 e SHASHA-1
-3-
Davide Cerri
Assenza di collisioni (1)
Una funzione di hash sicura deve essere senza
collisioni (collision-resistant):
dato un qualsiasi M, deve essere computazionalmente
impraticabile trovare un M’≠ M tale che H(M’) = H(M)
(funzione debolmente senza collisioni);
collisioni
deve essere computazionalmente impraticabile
trovare una coppia (M, M’), con M’≠ M, tale che
H(M) = H(M’) (funzione fortemente senza collisioni).
collisioni
L’idea è che, anche se necessariamente esistono
messaggi diversi che producono lo stesso hash, non
è praticabile trovarli.
Funzioni di hash sicure: MD5 e SHASHA-1
Davide Cerri
-4-
Davide Cerri
2
Funzioni di hash sicure: MD5 e SHA-1
Assenza di collisioni (2)
Le due proprietà sull’assenza di collisioni (debole e
forte), corrispondono a due diversi tipi di attacchi a
forza bruta:
attacco a forza bruta “semplice”:
“semplice” trovare un
messaggio che produca un dato hash (cioè un hash
uguale a quello di un messaggio dato);
attacco del compleanno (birthday attack): trovare
due messaggi che producano lo stesso hash,
indipendentemente dal valore di questo hash.
La complessità dei due attacchi è molto diversa!
se l’hash è lungo m bit, la complessità del primo è 2m,
quella del secondo è 2m/2.
Funzioni di hash sicure: MD5 e SHASHA-1
-5-
Davide Cerri
Che cosa NON è un hash
Un hash non è né una firma né un MAC (Message
Authentication Code), di per sè non garantisce
autenticazione e/o integrità.
Nel calcolo di un hash non si inserisce nessuna
informazione segreta, per cui chiunque può generare
l’hash corretto di qualunque messaggio.
Una funzione di hash non è un algoritmo di
cifratura.
cifratura
Calcolare l’hash di un messaggio non equivale a
cifrarlo: il calcolo di un hash non include nessuna
chiave, e soprattutto è un’operazione non
invertibile.
invertibile
Funzioni di hash sicure: MD5 e SHASHA-1
Davide Cerri
-6-
Davide Cerri
3
Funzioni di hash sicure: MD5 e SHA-1
MD5 e SHA-1
Le due funzioni di hash sicure attualmente più
diffuse sono MD5 e SHASHA-1, che hanno una struttura
simile.
messaggio (+ padding)
costante
hash
512 bit
hash
512 bit
hash
512 bit
message digest
Funzioni di hash sicure: MD5 e SHASHA-1
-7-
Davide Cerri
MD5
MD5 (Message Digest 5) è stato progettato da Ron
Rivest, ed è definito in RFC 1321 (1992).
Il messaggio viene elaborato a blocchi di 512 bit.
L’hash è di 128 bit.
bit
Ad ogni iterazione si calcola una funzione che
prende in ingresso il blocco corrente del messaggio
e il valore dell’hash all’iterazione precedente.
L’hash finale è quello risultante dall’ultima
iterazione.
Non è più considerato molto sicuro (128 bit di hash
non sono molti).
Funzioni di hash sicure: MD5 e SHASHA-1
Davide Cerri
-8-
Davide Cerri
4
Funzioni di hash sicure: MD5 e SHA-1
MD5: padding
Prima di iniziare l’elaborazione, si aggiunge al
messaggio un padding in modo che la lunghezza
totale risulti un multiplo di 512 bit:
si aggiunge un bit a 1 e poi tanti bit a 0 quanto basta
perché la lunghezza risulti di 64 bit minore rispetto a
un multiplo di 512 bit (se la lunghezza originale è già
corretta si aggiungono comunque 512 bit);
si aggiungono 64 bit contenenti la lunghezza originale
del messaggio (modulo 264). 1-512 bit
64 bit
messaggio originale
1000............0 lunghezza
multiplo di 512 bit
Funzioni di hash sicure: MD5 e SHASHA-1
-9-
Davide Cerri
Elaborazione MD5 (1)
Un’iterazione MD5 (cioè l’elaborazione su un blocco
del messaggio) è composta da 4 passi.
passi
Indichiamo con:
di: i-esima parola (32 bit) del digest (i=0-3);
mi: i-esima parola di un blocco di messaggio (i=0-15);
Ti = 232 sen i , (i=1-64);
↵x: rotazione sinistra di x posizioni (su 32 bit);
+: somma modulo 232;
∧, ∨, ∼, ⊕: rispettivamente AND, OR, NOT, XOR
(calcolati bit a bit).
Funzioni di hash sicure: MD5 e SHASHA-1
Davide Cerri
- 10 -
Davide Cerri
5
Funzioni di hash sicure: MD5 e SHA-1
Elaborazione MD5 (2)
Il valore del digest viene così inizializzato:
inizializzato
d0 = 0x67452301, d1 = 0xEFCDAB89,
d2 = 0x98BADCFE, d3 = 0x10325476.
Ogni passo prende in ingresso il valore corrente del
digest e il blocco corrente del messaggio,
messaggio e
modifica (fornendolo in uscita) il valore corrente del
digest.
Il valore del digest in uscita dal quarto passo viene
poi sommato (indipendentemente per le 4 parole
d0, d1, d2, d3) al valore di ingresso al primo passo
dell’iterazione corrente; il risultato è il valore di
uscita dell’iterazione.
Funzioni di hash sicure: MD5 e SHASHA-1
- 11 -
Davide Cerri
Elaborazione MD5 (3)
Ogni passo è composto da 16 operazioni.
operazioni
La i-esima (i=0-15) operazione ha la forma:
d(-i) mod 4 = d(1-i) mod 4 + (d(-i) mod 4 + fp(d(1-i) mod 4 ,
d(2-i) mod 4 , d(3-i) mod 4) + mj + Tk)↵Sp(i mod 4)
ogni operazione:
aggiorna uno dei 4 blocchi del digest (in ogni passo
ogni blocco del digest viene aggiornato 4 volte);
utilizza uno dei 16 blocchi del messaggio mj (in ogni
passo ogni blocco viene usato una volta);
utilizza una delle 64 costanti Tk;
utilizza una funzione fp diversa per ogni passo;
effettua una rotazione il cui valore è determinato da
una funzione Sp diversa per ogni passo;
Funzioni di hash sicure: MD5 e SHASHA-1
Davide Cerri
- 12 -
Davide Cerri
6
Funzioni di hash sicure: MD5 e SHA-1
Elaborazione MD5 (4)
A (e.g. d0)
B (e.g. d1)
C (e.g. d2)
+
mj
+
Tk
+
D (e.g. d3)
fp
schema di una
operazione MD5
↵Sp(i mod 4)
+
A’ (e.g. d3)
B’ (e.g. d0)
Funzioni di hash sicure: MD5 e SHASHA-1
C’ (e.g. d1)
D’ (e.g. d2)
- 13 -
Davide Cerri
Elaborazione MD5: passo 1
Definiamo F(x,y,z) = (x ∧ y) ∨ (∼x ∧ z).
Per i=0-15 si esegue:
d(-i) mod 4 = d(1-i) mod 4 + (d(-i) mod 4 + F(d(1-i) mod 4 ,
d(2-i) mod 4 , d(3-i) mod 4) + mi + Ti+1)↵S1(i mod 4)
dove S1(0) = 7, S1(1) = 12, S1(2) = 17, S1(3) = 22.
Le prime 5 di 16 operazioni sono quindi:
d0 = d1 + (d0 + F(d1, d2, d3) + m0 + T1)↵7
(i=0)
d3 = d0 + (d3 + F(d0, d1, d2) + m1 + T2)↵12 (i=1)
d2 = d3 + (d2 + F(d3, d0, d1) + m2 + T3)↵17 (i=2)
d1 = d2 + (d1 + F(d2, d3, d0) + m3 + T4)↵22 (i=3)
(i=4)
d0 = d1 + (d0 + F(d1, d2, d3) + m4 + T5)↵7
Funzioni di hash sicure: MD5 e SHASHA-1
Davide Cerri
- 14 -
Davide Cerri
7
Funzioni di hash sicure: MD5 e SHA-1
Elaborazione MD5: passo 2
Definiamo G(x,y,z) = (x ∧ z) ∨ (y ∧ ∼z).
Per i=0-15 si esegue:
d(-i) mod 4 = d(1-i) mod 4 + (d(-i) mod 4 + G(d(1-i) mod 4, d(2-i) mod 4,
d(3-i) mod 4) + m(5i+1) mod 16 + Ti+17)↵S2(i mod 4)
dove S2(0) = 5, S2(1) = 9, S2(2) = 14, S2(3) = 20.
Le prime 5 di 16 operazioni sono quindi:
d0 = d1 + (d0 + G(d1, d2, d3) + m1 + T17)↵5 (i=0)
d3 = d0 + (d3 + G(d0, d1, d2) + m6 + T18)↵9 (i=1)
d2 = d3 + (d2 + G(d3, d0, d1) + m11 + T19)↵14 (i=2)
d1 = d2 + (d1 + G(d2, d3, d0) + m0 + T20)↵20 (i=3)
d0 = d1 + (d0 + G(d1, d2, d3) + m5 + T21)↵5 (i=4)
Funzioni di hash sicure: MD5 e SHASHA-1
- 15 -
Davide Cerri
Elaborazione MD5: passo 3
Definiamo H(x,y,z) = x ⊕ y ⊕ z.
Per i=0-15 si esegue:
d(-i) mod 4 = d(1-i) mod 4 + (d(-i) mod 4 + H(d(1-i) mod 4, d(2-i) mod 4,
d(3-i) mod 4) + m(3i+5) mod 16 + Ti+33)↵S3(i mod 4)
dove S3(0) = 4, S3(1) = 11, S3(2) = 16, S3(3) = 23.
Le prime 5 di 16 operazioni sono quindi:
d0 = d1 + (d0 + H(d1, d2, d3) + m5 + T33)↵4 (i=0)
d3 = d0 + (d3 + H(d0, d1, d2) + m8 + T34)↵11 (i=1)
d2 = d3 + (d2 + H(d3, d0, d1) + m11 + T35)↵16 (i=2)
d1 = d2 + (d1 + H(d2, d3, d0) + m14 + T36)↵23 (i=3)
d0 = d1 + (d0 + H(d1, d2, d3) + m1 + T37)↵4 (i=4)
Funzioni di hash sicure: MD5 e SHASHA-1
Davide Cerri
- 16 -
Davide Cerri
8
Funzioni di hash sicure: MD5 e SHA-1
Elaborazione MD5: passo 4
Definiamo I(x,y,z) = y ⊕ (x ∨ ∼z).
Per i=0-15 si esegue:
d(-i) mod 4 = d(1-i) mod 4 + (d(-i) mod 4 + I(d(1-i) mod 4, d(2-i) mod 4,
d(3-i) mod 4) + m(7i) mod 16 + Ti+49)↵S4(i mod 4)
dove S4(0) = 6, S4(1) = 10, S4(2) = 15, S4(3) = 21.
Le prime 5 di 16 operazioni sono quindi:
d0 = d1 + (d0 + I(d1, d2, d3) + m0 + T49)↵6
(i=0)
d3 = d0 + (d3 + I(d0, d1, d2) + m7 + T50)↵10 (i=1)
d2 = d3 + (d2 + I(d3, d0, d1) + m14 + T51)↵15 (i=2)
d1 = d2 + (d1 + I(d2, d3, d0) + m5 + T52)↵21 (i=3)
d0 = d1 + (d0 + I(d1, d2, d3) + m12 + T53)↵6 (i=4)
Funzioni di hash sicure: MD5 e SHASHA-1
- 17 -
Davide Cerri
SHA-1
SHASHA-1 (Secure Hash Algorithm 1) è stato progettato
dal NIST (l’algoritmo SHA originale è stato sostituito
con SHA-1 dal NIST stesso per via di una
vulnerabilità non pubblicata).
Il messaggio (che deve essere di lunghezza inferiore
a 264 bit) viene elaborato a blocchi di 512 bit.
L’hash è di 160 bit.
bit
Ad ogni iterazione si calcola una funzione che
dipende dal blocco corrente del messaggio e dal
valore dell’hash all’iterazione precedente; il
risultato viene sommato (per singola parola) al
valore dell’iterazione precedente.
Funzioni di hash sicure: MD5 e SHASHA-1
Davide Cerri
- 18 -
Davide Cerri
9
Funzioni di hash sicure: MD5 e SHA-1
SHA-1: inizializzazione
Al messaggio viene aggiunto un padding (uguale a
quello di MD5)
Le 5 parole di 32 bit del digest (A, B, C, D, E)
vengono inizializzate con: A = 0x67452301,
B = 0xEFCDAB89, C = 0x98BADCFE, D = 0x10325476,
E = 0xC3D2E1F0.
Ogni iterazione calcola dei valori di A, B, C, D, E
che vengono sommati ai precedenti prima di
passare all’iterazione successiva.
Alla fine, la concatenazione di A, B, C, D, E
costituisce il digest del messaggio.
Funzioni di hash sicure: MD5 e SHASHA-1
- 19 -
Davide Cerri
SHA-1: schema iterazione (1)
Il blocco corrente di messaggio (512 bit) viene
utilizzato per costruire una stringa di 5 x 512 bit (80
parole di 32 bit).
Le prime 16 parole coincidono con il blocco del
messaggio, le successive sono calcolate così:
Wi = (Wi-3 ⊕ Wi-8 ⊕ Wi-14 ⊕ Wi-16)↵1 (i=16-79)
la rotazione di un bit è stata aggiunta in SHA-1
(è l’unica differenza tra SHA e SHA-1).
Si scorre la stringa di 80 parole una parola alla volta
(80 operazioni), calcolando i nuovi valori A’, B’, C’,
D’, E’. Alla fine, i nuovi valori verranno aggiunti agli
A, B, C, D, E precedenti.
Funzioni di hash sicure: MD5 e SHASHA-1
Davide Cerri
- 20 -
Davide Cerri
10
Funzioni di hash sicure: MD5 e SHA-1
SHA-1: schema iterazione (2)
Ogni iterazione è composta da 80 operazioni.
Per i=0-79:
B’, C’, D’, E’ sono calcolati così:
B’ = A
C’ = B↵30
D’ = C
E’ = D
A’ viene calcolato così:
A’ = E + (A↵5) + Wi + Ki + fi(B, C, D)
dove Ki vale: 230 2 (i = 0 − 19 )
 
230 3  (i = 20 − 39)
2
30
5  (i = 40 − 59 )
e fi(B, C, D) vale:
(B ∧ C ) ∨ (~ B ∧ D )
30
10  (i = 60 − 79 )
(i = 0 − 19 )
(i = 20 − 39,
(B ∧ C ) ∨ (B ∧ D ) ∨ (C ∧ D )
B⊕C ⊕ D
Funzioni di hash sicure: MD5 e SHASHA-1
2
i = 60 − 79 )
(i = 40 − 59 )
- 21 -
Davide Cerri
SHA-1: schema operazione
A
B
C
D
schema di una
operazione SHA-1
fi
+
↵30
B’
Funzioni di hash sicure: MD5 e SHASHA-1
Davide Cerri
+
↵5
A’
E
C’
- 22 -
D’
+
Wi
+
Ki
E’
Davide Cerri
11
Funzioni di hash sicure: MD5 e SHA-1
MD5 vs. SHA-1
MD5
SHA-1
128 bit
160 bit
lunghezza massima
messaggio
illimitata
264 -1 bit
dimensione blocco
messsaggio
512 bit
512 bit
numero operazioni
64
80
numero costanti additive
64
4
numero funzioni primitive
4
4 (di cui 2 uguali)
lunghezza hash
Funzioni di hash sicure: MD5 e SHASHA-1
Davide Cerri
- 23 -
Davide Cerri
12
Scarica

Funzioni di hash sicure: MD5 e SHA-1