Crittografia Corso di Laurea Specialistica in Informatica Firme Digitali e Funzioni di Hash Alberto Leporati Dipartimento di Informatica, Sistemistica e Comunicazione Università degli Studi di Milano Bicocca e-mail: alberto.leporati@unimib.it leporati@disco.unimib.it
Firme digitali Uno schema per le firme digitali è una quintupla (P,A,K,S,V) dove: P è l insieme dei possibili messaggi da firmare A è l insieme delle possibili firme K è l insieme delle possibili chiavi S = {sig: Pä K Ø A} è l insieme delle funzioni di firma V = {ver: Pä Aä K Ø {vero,falso}} è l insieme delle funzioni di verifica Alberto Leporati Corso di Crittografia 2
Firme digitali come per le funzioni di cifratura e decifratura, fissando una chiave k œ K si selezionano due funzioni: sig k : P Ø A ver k : P ä A Ø {vero,falso} tali che " x œ P e " y œ A ver k (x, y) = vero ñ y = sig k (x) una coppia (x, y) siffatta viene detta un messaggio firmato Alberto Leporati Corso di Crittografia 3
Firme digitali differenze rispetto alle firme autografe: la firma y è separata dal documento x la firma non è sempre uguale: cambia al variare del documento la firma digitale autentica il mittente del messaggio: solo chi conosce una certa informazione segreta può aver prodotto la firma del messaggio Alberto Leporati Corso di Crittografia 4
Firme digitali supponiamo che Alice voglia firmare un messaggio m: sceglie una coppia (sig k, ver k ) di algoritmi tiene segreto sig k, e rende pubblico ver k calcola σ = sig k (m) supponiamo ora che Bob voglia verificare la firma calcolata da Alice: considera la coppia (m, σ) preleva l algoritmo ver k accetta la firma come valida se e solo se ver k (m,σ) = vero Alberto Leporati Corso di Crittografia 5
Firme digitali possibili obiettivi di Eve: rottura totale dello schema: in qualche modo, Eve riesce a determinare la chiave segreta k (e quindi la funzione di firma sig k ) di Alice existential forgery: avendo osservato alcune coppie (x 1, y 1 ),, (x i, y i ) di messaggi con le relative firme, quando arriva un nuovo messaggio Eve riesce a produrre una firma valida (solo per quel messaggio, o per una classe di messaggi simili tra loro) Alberto Leporati Corso di Crittografia 6
Firme digitali ogni crittosistema a chiave pubblica può essere usato come schema per le firme digitali: si firma usando la chiave privata si verifica usando la chiave pubblica quindi, solo chi possiede la chiave privata è in grado di firmare chiunque può verificare la firma in questo modo, si riesce ad autenticare il mittente di un messaggio usando solo un crittosistema a chiave pubblica (vedere prossime slide) Alberto Leporati Corso di Crittografia 7
Firme digitali supponiamo che Alice voglia inviare a Bob il messaggio m Alice possiede una coppia (E A, D A ) di funzioni di cifratura e decifratura tiene segreta D A rende pubblica E A Bob possiede la coppia di funzioni (E B, D B ) tiene segreta D B rende pubblica E B Alberto Leporati Corso di Crittografia 8
Firme digitali Alice cifra il messaggio m per Bob, e poi lo firma, calcolando D A (E B (m)) e invia il risultato a Bob Bob verifica la firma di Alice applicando E A, e poi decifra: D B (E A (D A (E B (m)))) = m problema: anche Eve conosce E A! può applicare E A, e poi usare D E per sostituirsi ad Alice soluzione corretta: Alice firma il messaggio m e poi lo cifra per Bob: E B (D A (m)) Alberto Leporati Corso di Crittografia 9
Schema di firma di El Gamal pubblicato nel 1985 una versione modificata è stata adottata come standard (DSA Digital Signature Algorithm) dal NIST è non deterministico Ø ci sono molte firme valide per ogni messaggio sia p un numero primo sia g un generatore di p * i messaggi da firmare sono elementi di p * le firme sono coppie (γ, δ), con γ œ p * e δœ p-1 Alberto Leporati Corso di Crittografia 10
Schema di firma di El Gamal supponiamo che Alice voglia firmare un messaggio m œ p *; anzitutto genera la propria coppia di chiavi: sceglie una chiave segreta a, con 0 < a < p-1 calcola β = g a mod p la chiave pubblica è la terna (p, g, β) per firmare m : sceglie a caso k œ p-1 * calcola γ= g k mod p e δ= (m aγ )k -1 mod (p-1) la coppia (γ, δ) è la firma di m Alberto Leporati Corso di Crittografia 11
Schema di firma di El Gamal Bob accetta la firma come valida se e solo se β γ γ δ ª g m mod p supponiamo che la firma sia stata prodotta correttamente; allora: β γ γ δ ª g aγ ÿ g kδ ª g m mod p la congruenza g aγ + kδ ª g m mod p vale se e solo se aγ + kδ ª m mod p-1, ovvero se e solo se γ e δ sono stati calcolati come nella slide precedente Ø Bob accetta e rifiuta correttamente Alberto Leporati Corso di Crittografia 12
Schema di firma di El Gamal: sicurezza supponiamo che Eve voglia produrre una firma per m, senza conoscere a se Eve sceglieγ e vuole calcolare il δ corrispondente, deve calcolare il logaritmo discreto log γ g m β -γ se Eve sceglieδe vuole calcolare γ, deve risolvere l equazioneβ γ ÿγ δ ª g m mod p, rispetto a γ problema diverso dal logaritmo discreto non si conosce un metodo di risoluzione polinomiale problema poco studiato Alberto Leporati Corso di Crittografia 13
Schema di firma di El Gamal: sicurezza se Eve sceglieγ e δ, e vuole calcolare un m corrispondente, deve calcolare il logaritmo discreto log g β γ ÿγ δ tuttavia, Eve può calcolare γ, δ e m insieme: supponiamo di scrivere γ = g i ÿβ j mod p, con 0 i, j p-2 la condizione di verifica è: g m ªβ γ ÿ (g i ÿβ j ) δ mod p che equivale a: g m - iδ ªβ γ + jδ mod p Alberto Leporati Corso di Crittografia 14
Schema di firma di El Gamal: sicurezza se imponiamo m iδª0 mod p-1 e γ + jδª0 mod p-1 allora questa congruenza vale dati i e j, se MCD(j, p-1) = 1 è facile trovare m, δ e γ che verificano queste due congruenze: γ = g i ÿβ j mod p δ = -γÿj -1 mod p-1 m= -γÿiÿ j -1 mod p-1 si verifica facilmente che i valori (γ, δ) sono una firma valida per m Alberto Leporati Corso di Crittografia 15
Firme digitali problema: usando un crittosistema a chiave pubblica per firmare, le firme hanno la stessa dimensione del messaggio! es: firma digitale dell immagine ISO di un CD con El Gamal le firme hanno dimensione doppia! ci vorrebbe una funzione che: prende in ingresso un messaggio di dimensione arbitraria produce un output piccolo sia one-way soluzione: le funzioni di hash prevengono anche l attacco allo schema di El Gamal Alberto Leporati Corso di Crittografia 16
Funzioni di hash calcolano un impronta (o message digest) dei dati di input l impronta è piccola, e solitamente di lunghezza prefissata es: 128 bit per MD5, 160 bit per SHA-1 possono essere usate per verificare l integrità dei dati (cioè come MAC Message Authentication Codes) vengono usate nelle firme digitali: anziché firmare tutto m, si firma la sua impronta h(m) Ø la firma è piccola, e sempre della stessa lunghezza Alberto Leporati Corso di Crittografia 17
Funzioni di hash come per i crittosistemi, le funzioni di hash possono essere selezionate da una famiglia, scegliendo una chiave definizione: una famiglia hash è una quadrupla (X, Y, K, H) dove: X è l insieme dei possibili messaggi Y è l insieme delle possibili impronte K è l insieme delle chiavi H = {h k : X Ø Y k œ K} è l insieme delle funzioni di hash Alberto Leporati Corso di Crittografia 18
Funzioni di hash l insieme X può essere finito (es: {0,1} n ) oppure infinito l insieme Y è sempre finito se X è finito, si assume X Y ; anzi, spesso, si assume X 2 Y in tal caso, h: X Ø Y viene detta anche funzione di compressione (da non confondere con i formati di compressione zip, arj, ecc.) Alberto Leporati Corso di Crittografia 19
Funzioni di hash deve essere difficile risolvere i seguenti problemi preimage: input: h: X Ø Y e y œ Y output: x œ X tale che h(x) = y Ø h deve essere una funzione one-way second preimage: input: h: X Ø Y e x œ X output: x œ X tale che x x e h(x ) = h(x) collision: input: h: X Ø Y output: x, x œx tale che x x e h(x ) = h(x) Alberto Leporati Corso di Crittografia 20
Collisioni osservazione: collision è più facile di second preimage algoritmo per collision si suppone di poter valutare h per q volte FindCollision (h, q) scegli X 0 Œ X, con X 0 = q for each x œ X 0 do y x = h(x) if y x = y x per qualche x x then return (x, x ) else return fallimento Alberto Leporati Corso di Crittografia 21
Collisioni teorema: posto M = Y, la probabilità di successo di FindCollision è: ε = M 1 M 2 M q + 1 1 L M M M dimostrazione: sia X 0 = {x 1,, x q } per 1 i q, sia E i l evento h(x i ) {h(x 1 ),, h(x i-1 )} allora Pr[E 1 ] = 1, e 1 2 Pr[ E 1 E 2 L E q ] = L M M M M M q + M 1 da cui segue il risultato. É Alberto Leporati Corso di Crittografia 22
Collisioni allora, la probabilità di non avere collisioni è: 1 1 2 q 1 1 1 L 1 = M M M i q 1 i= 1 M se x è un numero reale piccolo, allora 1- x º e -x quindi, Pr[no collisioni] pertanto, Pr[almeno una q i 1 = 1 e i M collisione] = = 1 e 1 M q 1 i = e q ( i= 1 2 q ( q 1 ) M e 2 =ε q M 1) Alberto Leporati Corso di Crittografia 23
Collisioni da cui: q ( q 2 M e q q 2 q 1) ( q 2 M q 2 = = 1) M 1 2 = M ln ε ln(1 1 ln 1 1 ε 1 ε ) ε questo termine lo ignoriamo Alberto Leporati Corso di Crittografia 24
Collisioni se ε = ½, allora q º 1.17 ovvero: calcolando l hash di circa elementi scelti a caso abbiamo una collisione con probabilità ½ quindi: Y = {0,1} 40 Ø M = 2 40 Ø M = 2 20 @ 10 6 (insicura!) M M Y = {0,1} 128 Ø M = 2 128 Ø M = 2 64 (sicura per poco tempo!) solitamente si richiede: Y = {0,1} 160 Ø M = 2 160 Ø M = 2 80 Alberto Leporati Corso di Crittografia 25
Collisioni esempio: paradosso del compleanno Quante persone occorre avere in una stanza in modo che abbia un probabilità uguale a ½ di trovare due persone con lo stesso compleanno? M = 365 Ø q @ 23 nonostante il nome, non è un paradosso, è solo un risultato controintuitivo Alberto Leporati Corso di Crittografia 26
Funzioni hash iterate data una funzione di compressione compress: {0,1} m+t Ø {0,1} m, con t 1 mostriamo come usarla per costruire una funzione di hash h, usando la tecnica delle funzioni hash iterate la tecnica consiste di tre fasi: pre-elaborazione elaborazione trasformazione dell output (opzionale) pre-elaborazione: data una stringa di input x, di lunghezza x m+t+1, si costruisce una stringa y tale che y ª 0 mod t Alberto Leporati Corso di Crittografia 27
Funzioni hash iterate solitamente si usa una funzione di padding pad(x) che incorpora il valore x e pone (ad esempio) i bit rimanenti a zero; si pone quindi: y = x pad(x) si divide y in r blocchi di t bit ciascuno: y = y 1 y 2 y r la fase di pre-elaborazione deve assicurare che la funzione f: x Ø y da essa calcolata sia iniettiva, cioè: x x fl f(x) f(x ) altrimenti si potrebbero generare collisioni in h è possibile assicurare l iniettività, dato che y = rt x Alberto Leporati Corso di Crittografia 28
Funzioni hash iterate elaborazione: sia IV una stringa (pubblica) di m bit (valore di inizializzazione) si calcola: z 0 = IV z 1 = compress(z 0 y 1 ) z 2 = compress(z 1 y 2 ) z r = compress(z r-1 y r ) Alberto Leporati Corso di Crittografia 29
Funzioni hash iterate trasformazione dell output (opzionale): sia g : {0,1} m Ø {0,1} l una funzione (pubblica) si pone h(x) = g(z r ) la funzione di hash iterata costruita in questo modo è: i h : {0,1} {0,1 } i= U m + t + 1 l (quindi, prende in input una stringa x di lunghezza arbitraria m+t+1, e produce in output una stringa h(x) di lunghezza fissata l) Alberto Leporati Corso di Crittografia 30
Costruzione di Merkle-Damgård utilizza la tecnica delle funzioni di hash iterate si riesce a dimostrare che se compress è resistente alle collisioni allora anche la funzione hash h risultante è resistente alle collisioni supponiamo che x = n m+t+1 e che t 2 se dividiamo x in k blocchi di t-1 bit ciascuno: x = x 1 x 2 µ x k allora x k = t 1 d, con 0 d t 2 e il valore di h(x) è dato dall output del seguente algoritmo k = t n 1 Alberto Leporati Corso di Crittografia 31
Costruzione di Merkle-Damgård Merkle-Damgård(x) @ compress: {0,1} m+t Ø {0,1} m, con t 2 n = x ; k = n/(t-1) ; d = n k(t-1) for i = 1 to k-1 do y i = x i y k = x k 0 d @ padding y k+1 = rappresentazione binaria (di t-1 bit) di d z 1 = 0 m+1 y1 g 1 = compress(z 1 ) for i = 1 to k do z i+1 = g i 1 y i+1 g i+1 = compress(z i+1 ) return g k+1 @ h(x) = g k+1 Alberto Leporati Corso di Crittografia 32
Costruzione di Merkle-Damgård teorema [Stinson, pag. 129]: se compress è resistente alle collisioni, lo è anche h se t = 1, occorre una costruzione diversa supponiamo quindi che x = n m+2, e che compress: {0,1} m+1 Ø {0,1} m codifichiamo x con f(x), dove f è definita su {0,1} come segue: f(0)=0 f(1) = 01 il valore di h(x) è dato dall output del seguente algoritmo Alberto Leporati Corso di Crittografia 33
Costruzione di Merkle-Damgård Merkle-Damgård2(x) n = x y = 11 f(x 1 ) f(x 2 ) µ f(x n ) sia y 1, y 2,, y k la sequenza di bit di y g 1 = compress( 0 m y 1 ) for i = 1 = k-1 do g i+1 = compress( g i y i+1 ) return g k @ h(x) = g k Alberto Leporati Corso di Crittografia 34
Costruzione di Merkle-Damgård si ottiene una funzione di hash: i h : U {0,1} {0,1 } i= m + 2 l teorema [Stinson, pag. 132]: se compress è resistente alle collisioni, lo è anche h Alberto Leporati Corso di Crittografia 35
Funzioni di hash la prima funzione di hash, MD4, è stata proposta da Rivest nel 1990 MD5 è una modifica di MD4 (costanti diverse, più iterazioni) più resistente agli attacchi sono stati trovati metodi per generare collisioni nelle funzioni di compressione di MD4 e di MD5 (ma non nella versione completa di MD4 e di MD5) SHA è stata proposta come standard dal NIST nel 1993, ed è stata adottata nel documento FIPS 180 si conosce una tecnica per generare collisioni in SHA con 2 61 tentativi Ø più efficiente del birthday attack, che ne richiede 2 80 SHA-1 (descritto in FIPS 180-1) è una piccola modifica di SHA che non rende possibile questo attacco Alberto Leporati Corso di Crittografia 36
Funzioni di hash nel 2001 il NIST ha annunciato la proposta per le nuove funzioni SHA-256, SHA-354 e SHA-512 i numeri si riferiscono alla dimensione del message digest si basano sempre sulla tecnica delle funzioni hash iterate la loro descrizione è più complicata di quelle di MD5 e SHA-1 vediamo ora le funzioni hash attualmente più utilizzate: SHA-1 e MD5 Alberto Leporati Corso di Crittografia 37
SHA-1 message digest da 160 bit tutte le operazioni sono basate su word da 32 bit operazioni usate:,,.,, Ÿ (bit a bit) + (addizione intera modulo 2 32 ) rotl s (X) (rotazione a sinistra di X di s posizioni, con 0 s 31) indichiamo con m il messaggio si assume che m 2 64 1 Ø l = rappresentazione binaria di m è lunga al massimo 64 bit Alberto Leporati Corso di Crittografia 38
SHA-1: padding prima operazione: padding di m SHA-1-PAD(m) d = (447 - m ) mod 512 l = rappresentazione binaria di m, con l = 64 @ se l < 64 si aggiungono zeri a sinistra finché l = 64 y = m 1 0 d l osservazioni: l 1 si aggiunge sempre, anche se m = 0 m 1 0 d ha lunghezza ª 448 mod 512 y ha lunghezza ª 0 mod 512 Alberto Leporati Corso di Crittografia 39
SHA-1 dopo il padding, y può essere suddivisa in blocchi y = M 1 M 2 µ M n dove ogni blocco M i è di 512 bit definiamo le funzioni f 0,, f 79 come segue: B, C, D sono word (da 32 bit) l output è una word f i ( B, C, D ) = ( B C ) (( B ) D ) se 0 B C D se 20 ( B C ) ( B D ) ( C D ) se 40 B C D se 60 i 19 i i i 39 59 79 Alberto Leporati Corso di Crittografia 40
SHA-1 inoltre, definiamo le word costanti K 0,, K 79 come segue (espresse in esadecimale): K i = 5A827999 6ED9EBA1 8F1BBCDC CA62C1D6 se se se se 0 20 40 60 i i i i 19 39 59 79 si usano 5 registri H 0, H 1, H 2, H 3, H 4 da 32 bit (che alla fine conterranno il risultato), più 5 registri A, B, C, D, E (di 32 bit) di appoggio Alberto Leporati Corso di Crittografia 41
SHA-1: pseudocodice SHA-1(m) y = SHA-1-PAD(m) sia y = M 1 M 2 µ M n, dove ogni M i è un blocco di 512 bit H 0 = 67452301 H 1 = EFCDAB89 H 2 = 98BADCFE H 3 = 10325476 H 4 = C3D2E1F0 @ inizializzazione dei registri Alberto Leporati Corso di Crittografia 42
SHA-1: pseudocodice for i = 1 to n do sia M i = w 0 w 1 µ w 15, dove ogni w i è for t = 16 to 79 una word do w t = rotl 1 (w t-3 w t-8 w t-14 w t-16 ) A = H 0 ; B = H 1 ; C = H 2 ; D = H 3 ; E = H 4 for t = 0 to 79 do temp = rotl 5 (A) + f t (B, C, D) + E + w t + K t E = D; D = C; C = rotl 30 (B); B = A A = temp Alberto Leporati Corso di Crittografia 43
SHA-1: pseudocodice @ indentato sotto for t = 0 to 79 H 0 = H 0 + A H 1 = H 1 + B H 2 = H 2 + C H 3 = H 3 + D H 4 = H 4 + E return (H 0 H 1 H 2 H 3 H 4 ) come si vede, SHA-1 segue il modello delle funzioni hash iterate Alberto Leporati Corso di Crittografia 44
MD5 message digest da 128 bit è diventato uno standard de facto efficiente su macchine a 32 bit più lento ma più sicuro di MD4 operazioni usate (le stesse di SHA-1):,,.,, Ÿ (bit a bit) + (addizione intera modulo 2 32 ) rotl s (X) (rotazione a sinistra di X di s posizioni, con 0 s 31) indichiamo con mœ {0,1} b il messaggio Alberto Leporati Corso di Crittografia 45
MD5: padding la lunghezza b di m è arbitraria, nel caso in cui b 2 64 1 (circa 2.15 miliardi di GB), si considera la rappresentazione binaria solo dei 64 bit meno significativi di b prima operazione: padding di m MD5-PAD(m) d = (447 - m ) mod 512 l = rappresentazione binaria di b, con l = 64 @ se l < 64 si aggiungono zeri a sinistra finché l = 64 y = m 1 0 d l Alberto Leporati Corso di Crittografia 46
MD5: padding il padding è uguale a quello di SHA-1 unica differenza: la doppia word che contiene la rappresentazione binaria di b viene attaccata al contrario (prima la word meno significativa) analogamente, in MD5 all interno di ogni word compare prima il byte meno significativo nei byte, invece, compare prima il bit più significativo queste incongruenze sono state corrette con SHA-1 valgono le stesse osservazioni fatte per SHA-1: l 1 si aggiunge sempre, anche se m = 0 m 1 0 d ha lunghezza ª 448 mod 512 y ha lunghezza ª 0 mod 512 Alberto Leporati Corso di Crittografia 47
Alberto Leporati Corso di Crittografia 48 la lunghezza di y è anche un multiplo di 16 word (= 16 x 4 byte = 16 x 4 x 8 bit = 512 bit) quindi, dopo il padding, y può essere suddivisa in word: y = M 0 M 1 µ M -1 dove è un multiplo di 16 definiamo le funzioni F, G, H, I come segue: ) ( ),, ( ),, ( ) ( ) ( ),, ( ) ( ) ( ),, ( Z X Y Z Y X I Z Y X Z Y X H Z Y Z X Z Y X G Z X Y X Z Y X F = = = = MD5
MD5: pseudocodice X, Y, Z sono word (da 32 bit) l output è una word si usano 4 registri A, B, C, D da 32 bit (che alla fine conterranno il risultato) più 4 registri AA, BB, CC, DD (di 32 bit) di appoggio inoltre, si usa un array T[1..64] di 64 word il valore di T[i] è dato dalla parte intera di: 4294967296 ÿ sin(i) dove i è espresso in radianti l elaborazione avviene un blocco di 16 word alla volta; il blocco attuale è contenuto in un buffer X[0..15] di 16 word Alberto Leporati Corso di Crittografia 49
MD5: pseudocodice MD5(m) y = MD5-PAD(m) sia y = M 0 M 1 µ M N-1, dove ogni M i è una word di 32 bit, ed N è un multiplo di 16 A = 01234567 B = 89ABCDEF C = FEDCBA98 D = 76543210 @ sono gli stessi valori @ usati per H0, H1, H2, H3 @ in SHA-1 Alberto Leporati Corso di Crittografia 50
MD5: pseudocodice for i = 0 to N/16 1 do for j = 0 to 15 do X[j] = M[i*16 + j] AA = A BB = B CC = C DD = D @ per ogni blocco da 16 word @ copia il blocco in X @ salva il contenuto dei registri @ nei registri di appoggio @ seguono quattro round @ per modificare il valore dei registri @ A, B, C e D Alberto Leporati Corso di Crittografia 51
MD5: pseudocodice @ primo round @ [abcd k s i] è un abbreviazione per @ a = b + rotl s (a + F(b,c,d) + X[k] + T[i]) [ABCD 0 7 1] [DABC 1 12 2] [CDAB 2 17 3] [BCDA 3 22 4] [ABCD 4 7 5] [DABC 5 12 6] [CDAB 6 17 7] [BCDA 7 22 8] [ABCD 8 7 9] [DABC 9 12 10] [CDAB 10 17 11] [BCDA 11 22 12] [ABCD 12 7 13] [DABC 13 12 14] [CDAB 14 17 15] [BCDA 15 22 16] Alberto Leporati Corso di Crittografia 52
MD5: pseudocodice @ secondo round @ [abcd k s i] è un abbreviazione per @ a = b + rotl s (a + G(b,c,d) + X[k] + T[i]) [ABCD 1 5 17] [DABC 6 9 18] [CDAB 11 14 19] [BCDA 0 20 20] [ABCD 5 5 21] [DABC 10 9 22] [CDAB 15 14 23] [BCDA 4 20 24] [ABCD 9 5 25] [DABC 14 9 26] [CDAB 3 14 27] [BCDA 8 20 28] [ABCD 13 5 29] [DABC 2 9 30] [CDAB 7 14 31] [BCDA 12 20 32] Alberto Leporati Corso di Crittografia 53
MD5: pseudocodice @ terzo round @ [abcd k s i] è un abbreviazione per @ a = b + rotl s (a + H(b,c,d) + X[k] + T[i]) [ABCD 5 4 33] [DABC 8 11 34] [CDAB 11 16 35] [BCDA 14 23 36] [ABCD 1 4 37] [DABC 4 11 38] [CDAB 7 16 39] [BCDA 10 23 40] [ABCD 13 4 41] [DABC 0 11 42] [CDAB 3 16 43] [BCDA 6 23 44] [ABCD 9 4 45] [DABC 12 11 46] [CDAB 15 16 47] [BCDA 2 23 48] Alberto Leporati Corso di Crittografia 54
MD5: pseudocodice @ quarto round @ [abcd k s i] è un abbreviazione per @ a = b + rotl s (a + I(b,c,d) + X[k] + T[i]) [ABCD 0 6 49] [DABC 7 10 50] [CDAB 14 15 51] [BCDA 5 21 52] [ABCD 12 6 53] [DABC 3 10 54] [CDAB 10 15 55] [BCDA 1 21 56] [ABCD 8 6 57] [DABC 15 10 58] [CDAB 6 15 59] [BCDA 13 21 60] [ABCD 4 6 61] [DABC 11 10 62] [CDAB 2 15 63] [BCDA 9 21 64] Alberto Leporati Corso di Crittografia 55
MD5: pseudocodice A= A + AA B = B + BB C = C + CC D = D + DD return (A B C D) osservazione: i byte di A, B, C e D vanno stampati dal meno significativo al più significativo Alberto Leporati Corso di Crittografia 56
Uso delle funzioni di hash supponiamo che Alice voglia firmare un messaggio m, usando un crittosistema a chiave pubblica calcola h(m), dove h è una funzione di hash calcola D A (h(m)) spedisce a Bob il messaggio firmato (m, D A (h(m))) Bob, per verificare la firma: calcola x = h(m) calcola y = E A (D A (h(m))) accetta la firma come valida se e solo se x = y come MAC: Alice spedisce a Bob la coppia (m, h(m)) = (x, y) Bob accetta m come genuino solo se y = h(x) Alberto Leporati Corso di Crittografia 57
Digital Signature Algorithm (DSA) siano: p un primo da L bit tale che il logaritmo discreto sia intrattabile in p *, dove L ª 0 mod 64 e 512 L 1024 q un primo da 160 bit che divide p-1 α œ p * una radice q-esima di 1 modulo p α ha ordine q, cioèα q ª 1 mod p basta prendere un generatore g di p *, e porre α = g (p-1)/q mod p lo spazio dei messaggi è P = {0,1}* Alberto Leporati Corso di Crittografia 58
Digital Signature Algorithm (DSA) lo spazio delle firme è A = p *µ p * Ø ogni firma è lunga 320 bit lo spazio delle chiavi è: K = {(p, q, α, β) : β ªα a mod p} con 0 a q-1 chiave pubblica: (p, q, α, β) chiave privata: a per firmare m œ P, Alice sceglie a caso r, con 1 r q-1, e calcola: sig k (m, r) = (γ, δ) Alberto Leporati Corso di Crittografia 59
Digital Signature Algorithm (DSA) dove: γ = (α r mod p) mod q δ = (SHA-1(m) + aγ )ÿ r -1 mod q se viene γ = 0 oppure δ = 0 si sceglie un nuovo valore r per verificare che (γ, δ) œ q *µ q * è una firma per m œ {0,1}*, si calcola: e 1 = SHA-1(m) ÿδ -1 mod q e 2 = γÿδ -1 mod q Alberto Leporati Corso di Crittografia 60
Digital Signature Algorithm (DSA) e si accetta la firma come valida (cioè ver k (x, (γ, δ)) = vero) se e solo se: (α e 1β e 2 mod p) mod q = γ la verifica della validità del criterio di accettazione richiede alcuni conti (delicati) modulo p e modulo q DSA è stato proposto nel 1991 dalla NSA, ed è diventato uno standard del NIST a causa del progresso degli algoritmi per il calcolo del logaritmo discreto, nell ottobre 2001 il NIST ha proposto di fissare L = 1024 Alberto Leporati Corso di Crittografia 61
PKI (Public Key Infrastructures) problema della crittografia a chiave pubblica: il canale non è autenticato chi riceve un messaggio non può essere certo del mittente chi spedisce un messaggio, non può essere certo del destinatario le firme digitali (prima firmo, poi cifro) risolvono il problema? Alice deve mandare un messaggio m a Bob chiede a Bob la chiave pubblica quando Bob spedisce E B, Eve la intercetta e la sostituisce con E E Alberto Leporati Corso di Crittografia 62
PKI (Public Key Infrastructures) Alice manda E E (D A (m)) a Eve Eve calcola E A (D E (E E (D A (m)))) e ricava m Eve spedisce a Bob E B (D A (m)) Alice e Bob non si accorgono di nulla le firme digitali assicurano che m è stato prodotto da Alice, non che è stato spedito da Alice! il problema è: quando ad Alice arriva una chiave pubblica, come fa a essere certa che è quella di Bob? Alberto Leporati Corso di Crittografia 63
PKI (Public Key Infrastructures) soluzione: Certification Authorities (CA) Alice e Bob si iscrivono presso la CA per iscriversi devono mostrare dei documenti di identità la CA fornisce a ciascuno una coppia (chiave pubblica, chiave privata) la CA mette le chiavi pubbliche in un elenco, ad es. disponibile su Internet quando Alice vuole la chiave pubblica di Bob, la preleva dall elenco Alberto Leporati Corso di Crittografia 64
PKI (Public Key Infrastructures) così facendo, però, la CA diventa un collo di bottiglia per le comunicazioni! prima soluzione: la CA delega e autorizza altre CA CA si forma una gerarchia di CA (PKI Infrastruttura a chiave pubblica) CA CA problema: mantenere aggiornate le informazioni quando viene fatta una modifica in una CA, questa si deve propagare velocemente alle altre Alberto Leporati Corso di Crittografia 65
PKI (Public Key Infrastructures) seconda soluzione: all atto dell iscrizione, ogni utente riceve un certificato: sig CA (Bob, E B, data iniziale, data finale) che indica: qual è la chiave pubblica a chi si riferisce l intervallo temporale in cui il certificato è valido volendo, si possono aggiungere altre informazioni utili Alberto Leporati Corso di Crittografia 66
PKI (Public Key Infrastructures) il certificato è firmato dalla CA la chiave segreta della CA deve essere molto difficile da falsificare la chiave pubblica della CA deve essere facilissima da trovare (quotidiani, riviste, radio, televisione, telefono, Internet, SMS, ) Ø quando la CA cambia chiavi, bisogna aggiornarle dappertutto quando Alice vuole la chiave di Bob, Bob le dà il proprio certificato fornito dalla CA Alberto Leporati Corso di Crittografia 67
PKI (Public Key Infrastructures) per imbrogliare, Eve dovrebbe costruire un certificato del tipo: sig CA (Bob, E E, data iniziale, data finale) se Bob pensa che la propria chiave segreta sia compromessa, può revocare le chiavi (e quindi il certificato) quando Bob revoca le chiavi, la CA mette il certificato corrispondente in una lista, che si chiama Certificate Revocation List (CRL) quando Alice riceve il certificato da Bob, deve controllare che non sia nella CRL Alberto Leporati Corso di Crittografia 68
PKI (Public Key Infrastructures) la CRL può essere pubblicata dalla CA oppure distribuita a tutti gli utenti problema: distribuzione rapida delle modifiche problema a monte: bisogna fidarsi della CA le persone possono essere corrotte, e comunque non riescono a svolgere il lavoro a mano i computer hanno un sacco di problemi di sicurezza altro modello: Web of Trust adottato da PGP non richiede alcuna autorità centrale Alberto Leporati Corso di Crittografia 69
Web of Trust idea: ciascuno assegna un punteggio alle persone con cui comunica il punteggio può essere dato direttamente oppure calcolato il calcolo del punteggio si basa su regole del tipo: se mi fido di A (punteggio alto) e A si fida di B, il punteggio di B sale se mi fido di A e A non si fida di B, il punteggio di B scende quindi, il punteggio di B è calcolato come combinazione lineare su tutte le persone che lo conoscono (e che io conosco) Alberto Leporati Corso di Crittografia 70