Sei sulla pagina 1di 64

Funzioni Crittografiche di Hash

Luca Grilli
INTRODUZIONE
Funzioni Crittografiche di Hash
Funzioni di Hash
Una funzione di hash (o semplicemente hash o
message digest) una funzione unidirezionale (o
one-way)
una funzione perch prende in input un messaggio e
produce un output che dipende dal messaggio
h: {0, 1}* {0, 1}
b
{0, 1}*: spazio delle stringhe binarie di lunghezza qualsiasi
{0, 1}
b
: spazio delle stringhe binarie di lunghezza b bit

considerata unidirezionale (one-way) perch
impraticabile capire quale input corrisponda ad un
dato output
Funzioni di Hash sicure
sia h() una funzione di hash
h() considerata sicura se presenta le seguenti
propriet
1. resistenza alla preimmagine: fissato un hash
computazionalmente impraticabile trovare un messaggio
m tale che h(m) =
2. resistenza alle collisioni: computazionalmente
impraticabile trovare due messaggi m
1
e m
2
aventi lo
stesso digest h(m
1
) = h(m
2
)
le propriet 1. e 2. implicano la seguente
3. resistenza alla seconda preimmagine: dato un messaggio
m, computazionalmente impraticabile trovare un
messaggio m avente lo stesso digest h(m) = h(m)

Terminologia
Si useranno i termini hash e message digest in modo
intercambiabile
la funzione di hash del NIST chiamata SHA-1: Secure
Hash Algorithm
mentre lacronimo MD degli algoritmi MD2, MD4 e MD5
sta per Message Digest

Tutti gli algoritmi di digest/hash basicalmente fanno la
stessa cosa
prendono in input un messaggio di lunghezza variabile, e
restituiscono in output una quantit avente lunghezza
prefissata
Sulla casualit (randomicit)
Dato un messaggio m, il digest h(m) viene calcolato in
modo deterministico

Tuttavia, loutput della funzione di hash dovrebbe
apparire il pi possibile casuale
dovrebbe essere impossibile, senza applicare la funzione di
hash, predire ogni porzione delloutput
per ogni sottoinsieme (di posizioni) di bit nel digest h(m)
soltanto procedendo in modo esaustivo dovrebbe essere
possibile ottenere due messaggi m
1
e m
2
tali che h(m
1
) e
h(m
2
) presentno gli stessi bit in quelle posizioni
Sulla casualit (randomicit)
una funzione di hash sicura con n bit dovrebbe
essere derivabile da una funzione di hash con pi di n
bit
prendendo un arbitrario sottoinsieme di n bit dal digest pi
grande
chiaramente, ci sono molti messaggi distinti che sono
mappati in uno stesso digest h(m)
m ha lunghezza arbitraria, mentre il digest h(m) ha una
lunghezza prefissata, ad esempio 128 bit
se m ha una lunghezza di 1000 bit e h(m) di 128 bit
ci sono in media 2
872
messaggi che sono mappati in uno
stesso digest
dopo molti tentativi, due messaggi aventi lo stesso digest
si trovano sicuramente
Sulla casualit (randomicit)
tuttavia, per molti tentativi si intende un numero
talmente grande che di fatto impossibile
considerando una buona funzione di digest a 128 bit,
necessario provare approssimativamente
2
128
possibili messaggi prima di ottenere un messaggio
avente un particolare digest, o
2
64
messaggi prima di trovarne due aventi lo stesso
digest (vedi prossime slide); trovare cio due messaggi
che collidono
Esempi di applicazioni
Unapplicazione delle funzioni di hash
crittografiche il calcolo dellimpronta digitale di
un programma o di un documento di cui si
desiderano monitorare eventuali modifiche
se il message digest h(p) del programma p noto
e se h(p) memorizzato in modo sicuro (cio non pu essere
modificato da utenti non autorizzati)
allora nessun utente non autorizzato pu modificare p
senza essere scoperto
perch non sar in grado di trovare un diverso
programma p tale che h(p) = h(p)
Probabilit di collisione
sia h:{0, 1}* {0, 1}
b
una funzione di hash
siano m
1
, m
2
, , m
N
N messaggi arbitrariamente
scelti in {0, 1}*

DOMANDA: quanto deve valere N per avere una
probabilit del 50% che due messaggi m
i
, m
j

abbiano lo stesso hash?
Probabilit di collisione 1
a
Stima
una prima stima di N, per difetto, la seguente
k = 2
b
: numero totale di possibili hash
1/k: probabilit che una coppia di messaggi collida

HP: gli eventi considerati sono mutuamente esclusivi
Prob{h(m
i
) = h(m
j
) OR h(m
p
) = h(m
q
)} =
Prob{h(m
i
) = h(m
j
)} + Prob{h(m
p
) = h(m
q
)}
a rigore tale ipotesi non soddisfatta, molti eventi hanno
intersezione non nulla la stima ottenuta della probabilit
per eccesso ci si traduce in una stima per difetto di N
(Prob{E
1
OR E
2
} = Prob{E
1
} + Prob{E
2
} Prob{E
1
E
2
})


Probabilit di collisione 1
a
Stima
si ha una probabilit del 50% se si considerano k/2
coppie

N(N 1)/2 = k/2

ipotizzando N >> 1 si ha
N = k
1/2
= 2
b/2
Probabilit di collisione 2
a
Stima
una stima pi accurata di N la seguente
P: probabilit che almeno una coppia di messaggi
collida
P
*
: probabilit che tutte le coppie di messaggi abbiano
digest diversi, quindi P = 1 - P
*


HP: gli eventi considerati sono indipendenti
Prob{h(m
i
) h(m
j
) AND h(m
p
) h(m
q
)} =
Prob{h(m
i
) h(m
j
)} Prob{h(m
p
) h(m
q
)}
a rigore tale ipotesi non soddisfatta, gli eventi non sono del
tutto indipendenti la stima ottenuta della probabilit P
per difetto ci si traduce in una stima per eccesso di N
(Prob{E
1
AND E
2
} = Prob{E
1
} Prob{E
2
|E
1
})
Probabilit di collisione 2
a
Stima
nellHP di eventi indipendenti si ha

P = 1 P
*
= 1 (1 1/k)
N(N 1)/2
ipotizzando k >> 1 risulta
P ~ 1 e
N(N 1)/2k


ponendo pertanto P 1/2 si ottiene
e
N(N 1)/2k
1/2 = e
ln2

Probabilit di collisione 2
a
Stima
da cui si ottiene
N(N 1)/2 (ln2)k

ipotizzando N >> 1 si ha
N (2ln2)
1/2
k
1/2
= (2ln2)
1/2
2
b/2

Probabilit di collisione 3
a
Stima
il valore esatto di N si pu ottenere facendo ricorso al paradosso del
compleanno
P: probabilit che almeno una coppia di messaggi collida
P
*
: probabilit che tutte le coppie di messaggi abbiano digest
diversi, quindi P = 1 - P
*
k = 2
b
: numero totale di possibili hash

si considerino inoltre le seguenti probabilit
P
2*
: probabilit che h(m
2
) sia diverso da h(m
1
)
P
3*
: probabilit che h(m
3
) sia diverso da h(m
2
) e da h(m
1
)

P
i*
: probabilit che h(m
i
) sia diverso da h(m
j
) 1 j i 1

P
N*
: probabilit che h(m
N
) sia diverso da h(m
j
) 1 j N 1

Probabilit di collisione 3
a
Stima
risulta che
P
*
= P
2*
P
3*
P
i*
P
N*
=
= (k 1)/k (k 2)/k (k N + 1)/k =
= k!/(k
N
(k N)!)



|
|
.
|

\
|
=

=
N
k
k
N
N k k
k
P
N N
!
)! (
!
*
stima esatta di P
*
Probabilit di collisione 3
a
Stima
si osservi che il precedente valore di P
*
pu
approssimarsi come
P
*
~ e
N(N 1)/2k
si ottiene pertanto quanto ottenuto nella 2
a
stima

P ~ 1 e
N(N 1)/2k





Il problema del compleanno
Considerando un gruppo di N persone, qual la
probabilit che ci siano due persone con lo stesso
compleanno (stesso mese e giorno di nascita)?

basta utilizzare la relazione precedente ove
N: numero delle persone nel gruppo
K = 365: numero di giorni in un anno


|
|
.
|

\
|
=
N
k
k
N
P
N
!
1
Il problema del compleanno
al variare di N si ottengono le seguenti probabilit
N P
2 0.0027
3 0.0082
4 0.0163
21 0.4437
22 0.4757
23 0.5073
40 0.8912
41 0.9031
Lunghezza di un message digest


DOMANDA
Quanti bit deve avere loutput di una funzione di
hash in modo tale che nessuno sia in grado di
trovare due messaggi aventi lo stesso digest?

Lunghezza di un message digest
Se il digest ha b bit, per trovare due messaggi
aventi lo stesso digest, necessario
considerare circa 2
b/2
messaggi
64 bit digest ricerca esaustiva in uno spazio di
circa 2
32
elementi pu essere fattibile
per tale motivo, loutput di una funzione di hash
di almeno 128 bit
si ritiene che una ricerca in uno spazio di 2
64
elementi
sia impraticabile dato lattuale stato dellarte
Importanza resist. alle collisioni
Per quale ragione importante che una funzione
crittografica di hash sia resistente alle collisioni?
che debba essere resistente alla preimmagine
scontato,
ma la resistenza alle collisioni veramente
necessaria?

Risposta
in alcune circostanze riuscire a trovare due messaggi
con lo stesso digest pu comportare dei seri problemi
di sicurezza

Resistenza Collisioni Esempio
Alice genera uninformazione x
A
e
incarica Bob di calcolare un messaggio m
A

il cui contenuto deve dipendere da x
A
secondo dei criteri
prestabiliti

Bob elabora x
A
, ottiene m
A
e lo sottopone ad Alice
Alice verifica la correttezza di m
A
, calcola limpronta h(m
A
),
la firma con la sua chiave privata e invia a Trudy il
messaggio in chiaro m
A
e la sua firma (cio la firma della
sua impronta)
Trudy legge il messaggio m
A
e sia accerta che proviene da
Alice verificando la firma
usando la chiave pubblica di Alice verifica la firma, cio decifra con
la chiave pubblica la firma e
verifica che quanto ottenuto coincida con h(m
A
)

Resistenza Collisioni Esempio
Alice Bob Trudy
info x
A
m
A
= f(x
A
)
legge m
A

impronta h(m
A
)
firma h(m
A
)
s
A
= E(PR
A
, h(m
A
)) m
A
, s
A
impronta h(m
A
)
verifica firma
D(PU
A
, s
A
) =?= h(m
A
)
m
A

Resistenza Collisioni Scenario
Se la funzione di hash non resistente alle
collisioni, Bob potrebbe realizzare questo attacco:
calcola due messaggi m
A
e m
A
aventi lo stesso hash,
tali che
m
A
il messaggio che si aspetta Alice
m
A
il messaggio con contenuto falsato deciso da Bob
sottopone ad Alice m
A
,
ma quando viene inviato a Trudy lo intercetta e lo
sostituisce con m
A
Trudy verifica la firma e non pu rendersi conto
dellinganno

Resistenza Collisioni Esempio
Alice Bob Trudy
info x
A
calcola m
A
e m
A
tali che
h(m
A
) = h(m
A
)
m
A

legge m
A

impronta h(m
A
)
firma h(m
A
)
s
A
= E(PR
A
, h(m
A
))
m
A
, s
A
sostituisce m
A
con m
A

m
A
, s
A
impronta h(m
A
)
verifica firma
D(PU
A
, s
A
) =?= h(m
A
)
la verifica della firma da esito
positivo poich h(m
A
) = h(m
A
)
1
a
strategia di attacco (inefficiente)
per calcolare due messaggi con lo stesso hash,
Bob pu seguire il seguente approccio a forza
bruta:
1. dato x
A
, calcola prima il messaggio m
A
come
desidarato da Alice;
2. genera un messaggio falsato m
A

3. esegue il test h(m
A
) =?= h(m
A
)
4. in caso negativo ritorna al punto 2.

ma in questo modo sono necessari circa 2
b

tentativi e non 2
b/2

2
a
strategia di attacco (efficiente)
supponiamo invece che Bob sia in grado di
generare molte coppie (m
A
, m
A
) tali che:
m
A
: un messaggio che Alice approva
m
A
: un messaggio falsato secondo le intenzioni di Bob
cio Bob applica il seguente approccio a forza
bruta:
1. dato x
A
, genera una coppia (m
A
, m
A
)
2. esegue il test h(m
A
) =?= h(m
A
)
3. in caso negativo ritorna al punto 1.

per individuare una coppia di messaggi collidenti
sono necessari 2
b/2
tentativi

Generare coppie (m
A
, m
A
)

DOMANDA: Come pu Bob generare 2
b/2

coppie (m
A
, m
A
) tali che
m
A
possa essere letta e approvata da Alice, e
m
B
possa essere letta da Trudy e non destare
sospetti?
Generare coppie (m
A
, m
A
)
SOLUZIONE: basta creare due lettere, una per
Alice e una per Trudy, in cui
molte parole (sostantivi, verbi) non sono fissate,
ma possono essere scelte da un insieme di 2 o pi
elementi
senza alterare il significato della lettera e senza
introdurre errori grammaticali
con un banale programma semplice generare
tutte le possibili varianti delle due lettere
Esempio
Si supponga che
x
A
sia un messaggio che Alice invia a Bob in cui gli
chiede di redigere una lettera per richiedere il
licenziamento di Fred; la lettera dovr poi essere
inviata a Trudy (capo del personale)
Bob, amico di Fred, vuole invece inviare a Trudy
una lettera in cui si richiede una promozione di
Fred!
Schema per generare m
A
I am writing {this memo| } to {demand | request |
inform you} that {Fred | Mr. Fred Jones} {must | } be
{fired | terminated} {at once | immediately}. As the {July
11 | 11 July} {memo | memorandum} {from | issued by}
{personnel | human resources} states, to meet {our | the
corporate} {quarterly | third quarter} budget {targets |
goals}, {we must eliminate all discretionary spending | all
discretionary spending must be eliminated}.
{Despite | Ignoring} that {memo | memorandum |
order}, Fred {ordered | purchased} {PostIts | nonessential
supplies} in a flagrant disregard for the company's
{budgetary crisis | current financial difficulties}.

Schema per generare m
A
I am writing {this letter | this memo | this
memorandum | } to {officially | } commend Fred {Jones
| } for his {courage and independent thinking |
independent thinking and courage}. {He | Fred} {clearly
| } understands {the need | how} to get {the | his} job
{done | accomplished} {at all costs | by whatever
means necessary}, and {knows | can see} when to
ignore bureaucratic {nonsense | impediments}. I {am
hereby recommending | hereby recommend} {him |
Fred} for {promotion | immediate advancement} and
{further | } recommend a {hefty | large} {salary |
compensation} increase.
Due lettere (m
A
, m
A
)
I am writing to demand that Mr. Fred Jones must be
terminated at once. As the July 11 memorandum from
human resources states, to meet the corporate quarterly
budget targets, all discretionary spending must be
eliminated.
Despite that order, Fred ordered nonessential supplies
in a flagrant disregard for the company's budgetary crisis.

I am writing this memorandum to officially commend Fred
Jones for his independent thinking and courage. He
understands the need to get his job done by whatever
means necessary, and knows when to ignore bureaucratic
nonsense. I hereby recommend him for promotion and
further recommend a hefty compensation increase.
IMPIEGHI
Funzioni Crittografiche di Hash
Impieghi degli Algortmi di Hash
Disponendo di un segreto condiviso

un algoritmo di hash pu sostituire un
algoritmo crittografico a chiave segreta in
tutte le sue applicazioni
Autenticazione a Chiave Segreta
Calcolo di MAC
Cifratura (e Decifratura)
Autenticazione a Chiave Segreta*
HP: K
AB
segreto condiviso tra Alice e Bob
Alice Bob
r
A
r
A
cifrato con K
AB
r
B
r
B
cifrato con K
AB
* N.B.: lo schema illustrato presenta delle debolezze
che possono essere rimosse con opportuni accorgimenti
Autenticazione con Message Digest*
HP: K
AB
segreto condiviso tra Alice e Bob
MD: generico algoritmo di digest
Alice Bob
r
A
MD(K
AB
|r
A
)

r
B
* N.B.: lo schema illustrato presenta delle debolezze
che possono essere rimosse con opportuni accorgimenti
MD(K
AB
|r
B
)

Generare un MAC usando (solo) Hash
Ovviamente necessario disporre di un
segreto condiviso K
AB
MD(m) calcolabile da tutti coloro che conoscono
m e lalgoritmo di digest MD
la soluzione pi immediata considerare
MD(K
AB
|m) quale MAC di m
tale soluzione teoricamente corretta
presenta una debolezza derivante da una comune
vulnerabilit dei principali algoritmi di digest quali
MD4, MD5, SHA-1
Sulla vulnerabilit di MD4, MD5, SHA-1
MD4, MD5 e SHA-1 seguono il seguente schema generale
dallinput m si ottiene un messaggio m
p
avente
lunghezza pari ad un multiplo intero di 512 bit
mediante un opportuno padding che include, tra laltro, la
lunghezza originaria di m
m
p
viene decomposto in chunk (pezzi) da 512 bit
il digest viene ottenuto mediante una procedura iterativa
il digest alln-esima iterazione dipende esclusivamente
dalln-esimo chunk e
dal digest ottenuto all(n 1)-esima iterazione
il digest risultante di m il digest ottenuto allultima
iterazione
Sulla vulnerabilit di MD4, MD5, SHA-1
si assuma che un attaccante, Trudy, intercetti la
coppia (m, MD(K
AB
|m)) inviata da Alice a Bob

Trudy, senza conoscere il segreto K
AB
, pu
calcolare il MAC MD(K
AB
|m*)
ove m* un qualsiasi messaggio ottenuto
concatenando m
p
con una qualsiasi stringa
binaria, cio
m* = m
p
|s per ogni se{0, 1}*
ovviamente Trudy deve conoscere lalgoritmo MD
Sulla vulnerabilit di MD4, MD5, SHA-1

DOMANDA: Come si pu procedere per evitare
tale debolezza?

Diverse soluzioni, prive di punti deboli, sono state
proposte
HMAC quella che ha riscosso maggior successo
nelle prossime slide si esamineranno tali soluzioni,
ordinate dalla pi semplice a quella pi complessa e
che offre maggiori garanzie
1
a
Soluzione Mettere K
AB
in coda
Una semplice soluzione consiste nel posizionare il
segreto K
AB
alla fine del messaggio m e non il viceversa
cio il MAC dato da MD(m|K
AB
)
e non da MD(K
AB
|m)

Tale soluzione considerata sicura
a patto che lalgoritmo di digest MD sia molto resistente
alle collisioni,
cio se fossero noti due messaggi m
1
e m
2
aventi lo stesso
digest MD(m
1
) = MD(m
2
)

per la vulnerabilit vista prima risulterebbe
MD(m
1
|K) = MD(m
2
|K) K
2
a
Soluzione Usare met bit di MD
Unaltra soluzione definire il MAC come un
opportuno sottoinsieme del digest MD
nel caso di digest a 128 bit
il MAC di m pu ottenersi considerando i 64 bit meno
significativi di MD(K
AB
|m)
un attaccante non pu considerare il MAC come il digest
ottenuto alliterazione corrispondente al chunk che
completa m
p
quindi non pu calcolare il MAC di un qualunque messaggio
m* del tipo m* = m
p
|s senza conoscere K
AB
precisamente lattaccante procedendo per tentativi ha 1
chance su 2
64
di ottenere laltra met di MD(K
AB
|m)

2
a
Soluzione Usare met bit di MD
si osservi inoltre che considerare solo 64 bit
anzich i 128 del digest non comporta in pratica
una perdita di sicurezza
se lattaccante non conosce K
AB
lunica cosa che
pu fare generare un MAC random a 64 bit e
sperare che sia quello corretto!
3
a
Soluzione K
AB
in testa e in coda
Altra possibilit porre il segreto K
AB
sia in
testa che in coda al messaggio m
cio il MAC dato da MD(K
AB
|m|K
AB
)
K
AB
in testa conferisce la resistenza alle collisioni
anche nel caso in cui fossero noti, per lalgoritmo di
digest MDdue messaggi con lo stesso digest
K
AB
in coda rende innocua la vulnerabilit, degli
algoritmi MD, esaminata in precedenza


4
a
Soluzione HMAC
HMAC (keyed-Hash Message Authentication
Code) segue approssimativamente questo
schema generale
nel seguito sar illustrato in dettaglio
concatena il segreto K
AB
in testa al messaggio
calcola il digest di tale combinazione
concatena il segreto K
AB
in testa a tale digest
calcola nuovamente il digest di questultima
combinazione
HMAC applica due volte lalgoritmo di digest

Efficienza di HMAC
HMAC meno efficiente delle precedenti
soluzioni
deve effettuare due volte il calcolo del digest
Tuttavia, il secondo digest pu essere calcolato
rapidamente
linput ha lunghezza contenuta: un segreto
concatenato ad un digest
Cifratura/Decifratura tramite MD

DOMANDA
Come possibile ottenere un algoritmo di
cifratura/decifratura utilizzando un algoritmo di
digest?
un digest ha lunghezza fissa e non invertibile!
la decifratura deve essere linverso della cifratura!

Cifratura/Decifratura tramite MD

RISPOSTA
Si pu realizzare un cifrario a flusso, utilizzando un
algoritmo MD per generare un keystream (flusso
di bit pseudorandom dipendente dalla chiave)
In altri termini, si pu procedere in modo simile a
quanto visto per la modalit operativa OFB
(Output Feedback Mode)
Generazione del flusso OTP
Il one-time pad (keystream) dato dalla sequenza
OTP = OTP(K, IV) = b
0
|b
1
|b
2
| |b
i
|b
i+1
|
dove
b
0
= MD(K, IV)
b
1
= MD(K, b
0
)

b
i
= MD(K, b
i-1
)
K IV
OTP gen
OTP = b
0
|b
1
|b
2
|
m c = OTP m
Generaz. del flusso OTP Osservazioni
Valgono tutte le osservazioni viste per OFB
OTP generabile in anticipo rispetto
non richiesta la conoscenza del messaggio
se un avversario in grado di indovinare il testo in
chiaro (o una sua parte) potrebbe
sommarlo ( XOR) al testo cifrato e
aggiungere ( XOR) un qualsiasi messaggio ingannando il
destinatario
tale attacco allintegrit pu essere rilevato
applicando un controllo di integrit sicuro (MAC),
tuttavia pu anche essere evitato utilizzando una soluzione
simile alla modalit operativa CFB (Cipher Feedback Mode)
OTP dipendente dal messaggio
m = m
0
m
1
m
i
m
i+1
blocchi di testo in chiaro
c = c
0
c
1
c
i
c
i+1
blocchi di testo cifrato

il one-time pad (keystream) dato dalla sequenza
OTP = OTP(K, IV) = b
0
|b
1
|b
2
| |b
i
|b
i+1
|
dove
Testo in chiaro One-Time-Pad Testo cifrato
m
0
b
0
= MD(K, IV)
c
0
= m
0
b
0
m
1
b
1
= MD(K, c
0
)
c
1
= m
1
b
1




m
i
b
i
= MD(K, c
i-1
)
c
i
= m
i
b
i
Hash mediante cifratura

Si visto che, in linea di principio, un algoritmo di
digest pu sostituire un algoritmo di
cifratura/decifratura a chiave segreta in tutte le
sua applicazioni

Naturalmente, vale anche il viceversa, cio
disponendo di un algoritmo di cifratura a chiave
segreta possibile ottenere un algoritmo di digest
Esempio UNIX Password Hash
UNIX usa un algoritmo di cifratura a chiave segreta per
calcolare lhash di una password dutente
non memorizza le password in chiaro!
in fase di autenticazione, riapplica tale algoritmo alla
password inserita e verifica la corrispondenza con quella
memorizzata

Fase 1 pwd K
pwd

a partire dalla password pwd viene calcolata una
chiave segreta K
pwd

Fase 2
modified
DES
0
64-bit
K
pwd
c = E(K
pwd
, 0
64-bit
)

UNIX Password Hash Fase 1
K
pwd
si ottiene da pwd
considerando i primi 8 caratteri di pwd
i caratteri rimanenti sono ignorati
la stringa di 56 bit ottenuta viene espansa a 64 bit
inserendo i bit di parit per ogni gruppo di 7 bit
la codifica dei caratteri ASCII a 7 bit



UNIX Password Hash Fase 2
sia s il salt, numero di 12 bit generato in modo
random, associato allutente in esame la cui password
pwd
h(pwd) si ottiene come segue
si considera una versione modificata di DES che
dipende dal valore del salt s
il valore di s determina quali bit devono essere replicati nella
fase di espansione di R da 32 a 48 bit
lalgoritmo DES modificato usato, con la chiave
segreta K
pwd
, per cifrare la costante 0 (a 64 bit)
UNIX memorizza per ciascun utente la stringa s|h(pwd) nel
file passwd


UNIX Password Hash Algoritmo
Ogni volta che una password pwd dutente
viene impostata
un numero random di 12 bit, il salt, viene
generato
pwd viene convertita in una chiave segreta K
pwd
a
64 bit

lalgoritmo DES modificato, in base al valore di s,
viene usato con la chiave K
pwd
per cifrare la
costante 0 (a 64 bit)
il risultato e il salt vengono memorizzati nel file
passwd
Hash di grandi messaggi
UNIX password hash un metodo per
calcolare lhash di messaggi corti (56 bit)

Come possibile calcolare lhash di un
messaggio di lunghezza arbitraria utilizzando
un algoritmo di cifratura a chiave segreta?
Hash di grandi messaggi Idea base
m = m
1
m
2
m
3

m
i
usato come chiave segreta
nelli-esimo blocco di cifratura
linput della cascata una
costante nota
lhash h(m) loutput della
cascata

encrypt
encrypt
constant
key
key
m
1
m
2
h(m)

Hash di grandi messaggi Idea base
PROBLEMI
1. Se si desidera individuare un
messaggio m avente un dato
digest possibile applicare un
attacco simile a quello visto per
DES doppio con chiavi distinte
2. h(m) pu risultare troppo corto
in genere la lunghezza di un blocco
di 64 bit 2
32
tentativi sono
sufficienti per trovare due messaggi
collidenti

encrypt
encrypt
constant
key
key
m
1
m
2
h(m)

Algoritmo di Hash migliorato
encrypt
encrypt
constant
key
key
m
1
m
2
h(m)

Il problema 1. risolvibile
sommando ( XOR) linput e
loutput di ciascun round

Riguardo al problema 2.,
un hash di lunghezza doppia
ottenibile calcolando
un altro hash h(m) con la stessa
tecnica,
ma partendo da una costante
diversa


Bibliografia
[DES81] DES Modes of Operation, FIPS PUB 81, National
Bureau of Standards, U.S. Department of Commerce, 1981.
[KPS02] C. Kaufman, R. Perlman, M. Speciner. Network
Security Private Communication in a Public World.
Prentice Hall.
[PFL08] C. P. Pfleeger, S. L. Pfleeger. Sicurezza in
Informatica. Pearson, Prentice Hall.
[STA07] W. Stallings. Sicurezza delle reti. Pearson, Prentice
Hall.
[Wiki-it] http://it.wikipedia.org/wiki/
[Wiki-en] http://en.wikipedia.org/wiki/
[ISECOM] Institute for Security and Open Methodologies

Potrebbero piacerti anche