UNIVERSITÀ DEGLI STUDI DI PERUGIA Facoltà di Scienze Matematiche, Fisiche e Naturali Corso di laurea specialistica in Informatica Appunti di Crittografia Studente: Professore: Davide Tortoioli Prof. Massimo Giulietti Anno Accademico 2009/2010 Indice 1 Crittografia Classica 1.1 1.2 1.3 4 Block Cipher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.1.1 Shift Cipher (Cifrario di Cesare) . . . . . . . . . . . . . . . . . . 5 1.1.2 Substitution Cipher . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.1.3 Affine Cipher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.1.4 Vigenère Cipher . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.1.5 Hill Cipher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.1.6 Permutation Cipher . . . . . . . . . . . . . . . . . . . . . . . . . 12 Stream Cipher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 1.2.1 LFSR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Crittoanalisi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 1.3.1 Crittoanalisi del Substitution Cipher . . . . . . . . . . . . . . . . 17 1.3.2 Crittoanalisi dell’Affine Cipher . . . . . . . . . . . . . . . . . . . 18 1.3.3 Crittoanalisi di Vigenère . . . . . . . . . . . . . . . . . . . . . . . 20 1.3.4 Crittoanalisi di Hill . . . . . . . . . . . . . . . . . . . . . . . . . . 22 1.3.5 Crittoanalisi di LFSR . . . . . . . . . . . . . . . . . . . . . . . . 24 2 Teoria di Shannon 26 2.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 2.2 Richiami di Probabilità . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 2.3 Segretezza Perfetta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 2.4 One-Time Pad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 2.5 Crittosistemi Prodotto . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 2.5.1 35 Crittosistemi Prodotto Idempotente . . . . . . . . . . . . . . . . 3 Crittografia Simmetrica 3.1 37 Substitution-Permutation Network (SPN) . . . . . . . . . . . . . . . . . 37 3.1.1 40 Considerazione sulle S-box . . . . . . . . . . . . . . . . . . . . . . 1 Indice 3.2 3.3 3.4 3.5 3.6 Indice Crittoanalisi Lineare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 3.2.1 Piling-Up Lemma . . . . . . . . . . . . . . . . . . . . . . . . . . 42 3.2.2 Approssimazione lineare di un S-box . . . . . . . . . . . . . . . . 44 3.2.3 Attacco lineare ad un SPN . . . . . . . . . . . . . . . . . . . . . 46 Campi Finiti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 3.3.1 Costruzione di un campo finito . . . . . . . . . . . . . . . . . . . 52 DES (Data Encryption Standard) . . . . . . . . . . . . . . . . . . . . . . 56 3.4.1 Descrizione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 3.4.2 Analisi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 3.4.3 Varianti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 AES (Advanced Encryption Standard) . . . . . . . . . . . . . . . . . . . 63 3.5.1 Caratteristiche Generali . . . . . . . . . . . . . . . . . . . . . . . 63 3.5.2 Struttura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 3.5.3 Substitution Bytes . . . . . . . . . . . . . . . . . . . . . . . . . . 64 3.5.4 Shift Rows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 3.5.5 Mix Columns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 3.5.6 Key Schedule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 Modi Operativi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 4 Funzioni Hash Crittografiche 70 4.1 Funzioni Hash e Data Integrity . . . . . . . . . . . . . . . . . . . . . . . 70 4.2 Sicurezza di una funzione hash . . . . . . . . . . . . . . . . . . . . . . . 71 4.2.1 Random Oracle Model . . . . . . . . . . . . . . . . . . . . . . . . 72 4.2.2 Algoritmi nel Random Oracle Model . . . . . . . . . . . . . . . . 73 4.2.3 Comparazione dei criteri di sicurezza . . . . . . . . . . . . . . . . 76 Funzioni Hash Iterative . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 4.3.1 Costruzione Merkle-Damgard (MD) . . . . . . . . . . . . . . . . 78 4.3.2 SHA-1 (Secure Hash Algorithm) . . . . . . . . . . . . . . . . . . 80 4.3.3 MAC (Message Authentication Codes) . . . . . . . . . . . . . . . 82 4.3.4 Un pò di storia . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 4.3 5 Crittografia Asimmetrica 89 5.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 5.2 Ulteriore teoria dei numeri . . . . . . . . . . . . . . . . . . . . . . . . . . 93 5.2.1 Algoritmo Euclideo . . . . . . . . . . . . . . . . . . . . . . . . . . 93 5.2.2 Metodo dell’elemento primitivo . . . . . . . . . . . . . . . . . . . 97 5.2.3 Teorema Cinese dei Resti . . . . . . . . . . . . . . . . . . . . . . 100 2 Indice Indice 5.2.4 5.3 5.4 Teorema di Eulero . . . . . . . . . . . . . . . . . . . . . . . . . . 102 RSA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 5.3.1 Complessità . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 5.3.2 Test Probabilistici di primalità . . . . . . . . . . . . . . . . . . . 106 5.3.3 Algoritmi di Fattorizzazione . . . . . . . . . . . . . . . . . . . . . 110 Crittosistema ElGamal . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 5.4.1 Algoritmi di risoluzione del DL-Problem . . . . . . . . . . . . . . 123 6 Firma Digitale 129 6.1 Schema SHA1WithRSA . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 6.2 Schema Elgamal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 6.3 Schema SHA1WithDSA . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 6.4 Funzionamento Pratico . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 7 Elliptic Curve Cryptography (ECC) 137 7.1 Curve Ellittiche nei Reali . . . . . . . . . . . . . . . . . . . . . . . . . . 137 7.2 Curve Ellittiche in Fp . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 7.3 Curve Ellittiche in F2m . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 7.4 Applicazione in Crittografia . . . . . . . . . . . . . . . . . . . . . . . . . 145 7.5 7.4.1 Generazione Chiavi . . . . . . . . . . . . . . . . . . . . . . . . . . 147 7.4.2 ECDSA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 Vantaggi e Svantaggi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 7.5.1 Vantaggi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 7.5.2 Svantaggi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 3 Capitolo 1 Crittografia Classica L’obiettivo fondamentale della crittografia è far si che due persone, comunemente chiamate Alice e Bob, possano comunicare attraverso un canale insicuro, in un modo tale da non permettere a Oscar (intruso o opponent) di capire ciò che i due si stanno dicendo. Per fare questo Alice cifra, con una funzione, il messaggio, usando una chiave predeterminata, e trasmette il risultato attraverso il canale insicuro. Oscar può ascoltare la comunicazione, quindi conosce il testo cifrato ma non deve essere in grado di risalire, tramite di esso, al testo in chiaro. Quando Bob riceve il messaggio cifrato gli applica una funzione di decodifica, utilizzando la stessa chiave, e ottiene il messaggio in chiaro. Quest’idea è formalmente descritta usando la seguente notazione matematica. Definizione 1 (Crittosistema). Un crittosistema è una 5-tupla (P, C, K, E, D) dove le seguenti condizioni sono soddisfatte: 1. P è un insieme finito dei possibili plain text 2. C è un insieme finito dei possibili cipher text 3. K è un insieme finito delle possibili chiavi 4. ∀k ∈ K c’è una funzione di cifratura ek ∈ E e una corrispondente funzione di de-cifratura dk ∈ D dove ek : P → C e dk : C → P e ∀x ∈ P si ha che dk (ek (x)) = x 4 1.1. Block Cipher Capitolo 1. Crittografia Classica La proprietà più importante è la 4. Essa specifica che, se un plaintext x viene cifrato tramite ek e il risultante ciphertext viene decifrato tramite dk , allora il risultato di dk deve essere x. Questo proprietà (formale), però, non basta noi vogliamo anche che: 1. Le funzioni ek e dk siano computazionalmente facili da calcolare 2. Sia computazionalmente difficile ricavare k da ek (m) Alice e Bob devono seguire uno specifico protocollo per usare uno specifico crittosistema. Per prima cosa, devono scegliere in maniera random una chiave k ∈ K. Questo viene fatto o quando entrambi sono nello stesso luogo e senza nessuno che li osserva, o mediante l’utilizzo di un canale sicuro. Successivamente supponiamo che Alice voglia inviare un messaggio a Bob. Il messaggio è rappresentato dalla stringa x = x1 x2 .....xn per ogni intero n ≥ 1, dove ogni simbolo in chiaro xi ∈ P con 1 ≤ i ≤ n. Ogni xi viene cifrato ottenendo yi = ek (xi ) e il risultato y = y1 y2 .....yn viene inviato nel canale. Quando Bob riceve la stringa decifra ogni yi con la funzione dk ottenendo xi = dk (yi ) con 1 ≤ i ≤ n. 1.1 Block Cipher Sono quei tipi di cifrari per i quali la chiave di cifratura rimane costante nel tempo. La lunghezza della chiave determina la lunghezza del blocco. x1 → ek (x1 ) x2 → ek (x2 ) .. . xm → ek (xm ) 1.1.1 Shift Cipher (Cifrario di Cesare) È un cifrario che si basa sull’aritmetica modulare. 5 1.1. Block Cipher Capitolo 1. Crittografia Classica Definizione 2 (Congruenza). Siano a e b due interi e m un intero positivo. Diciamo che a ≡ b (mod m) se m | b − a. Si dice quindi che a è congruo b modulo m. Due interi sono congrui modulo m sse divisi per m danno lo stesso resto. Definizione 3 (Aritmetica Modulare). L’aritmetica modulare è definita dall’insieme Zm = {0, 1, 2, ...., m − 1} e dalle operazioni + e · che sono identiche a quelle dell’aritmetica normale, quindi godono anche delle stesse proprietà, con la differenza che il risultato viene ridotto modulo m. Il cifrario è cosı̀ definito: 1. P = {A, B, C, D, ...., W, X, Y, Z} = {0, 1, 2, 3, 4, ...25} = Z26 2. C = Z26 3. K = Z26 4. ek (x) = x + k (mod 26) 5. dk (y) = y − k (mod 26) La proprietà formale è soddisfatta, come la proprietà sulla complessità computazionale ma la 2 no; infatti con un semplice attacco di forza bruta è possibile determinare la chiave. Il problema è dovuto al fatto che il numero delle chiavi è molto piccolo, e quindi in poco tempo posso provarle tutte. 1.1.2 Substitution Cipher Questo crittosistema risolve il problema dovuto al fatto di avere poche chiavi ma comunque non garantisce la sicurezza. È cosı̀ definito: 1. P = {A, B, C, D, ...., W, X, Y, Z} = {0, 1, 2, 3, 4, ...25} = Z26 2. C = Z26 3. K = S26 4. ek (x) = eπ (x) = π(x) con π ∈ Sn 5. dk (y) = dπ (y) = π −1 (y) 6 1.1. Block Cipher Capitolo 1. Crittografia Classica Definizione 4 (Sn ). È l’insieme delle funzioni biiettive. Sn = {π : {1, 2, 3, ..., n} → {1, 2, 3, ..., n}| π BIIET T IV A} La cardinalità è: |Sn | = n! perché il primo elemento del dominio posso di associarlo a n elementi, il secondo a n − 1.... l’n-esimo a 1. Nel nostro caso, quindi, |S26 | ∼ 4 · 1026 . Questo significa che un attacco di forza bruta diventa difficile da portare a termine, ma il cifrario è comunque soggetto ad altri attacchi di tipo statistico, ossia posso basarmi sulle frequenze delle lettere dell’alfabeto o sulle doppie o sulle regole semantiche del linguaggio (esempio se c’è la q c’è anche la u vicino). Quindi non è sufficiente avere un gran numero di chiavi per essere sicuri. 1.1.3 Affine Cipher È una generalizzazione dello Shift Cipher ed è cosı̀ definito: 1. P = {A, B, C, D, ...., W, X, Y, Z} = {0, 1, 2, 3, 4, ...25} = Z26 2. C = Z26 2 | gcd(a, 26) = 1} 3. K = {(a, b) ∈ Z26 a 4. ek (x) = e(a,b) (x) = ax + b (mod 26) 5. dk (y) = d(a,b) (y) = a−1 (y − b) a (mod 26) gcd: Significa Greatest Common Divisor, ossia il massimo comune divisore La funzione ek è detta funzione affine; con a = 1 otteniamo lo Shift Cipher. Affinché questo sistema funzioni, però, bisogna garantire che ek sia INIETTIVA, cioè due elementi del dominio devono avere due immagini diverse nel codominio altrimenti la fase di decodifica è impossibile, perché non ho più la certezza di riottenere il testo in chiaro. Teorema 1 (F. INIETTIVA). Sia e(a,b) : Zm → Zm , x 7−→ ax + b (mod m). e(a,b) IN IET T IV A ⇐⇒ gcd(a, m) = 1 Dimostrazione. =⇒ Supponiamo f INIETTIVA e mostriamo che gcd(a, m) = 1. ASSURDO: gcd(a, m) = d > 1 a· m + b ≡ b (mod m) d 7 1.1. Block Cipher Capitolo 1. Crittografia Classica Se d > 1 significa che divide a e quindi posso semplificare ottenendo a0 · m + b ≡ b (mod m) Poiché m ≡ 0 (mod m) l’espressione diventa b ≡ b (mod m) Questo significa che ho x = m d e x = 0 che mi danno lo stesso risultato, quindi la funzione non è INIETTIVA ma poiché è stato supposto vero, si è arrivati alla contraddizione e si è dimostrata l’implicazione. ⇐= Supponiamo che gcd(a, m) = 1 e mostriamo che f è INIETTIVA . ASSURDO: f NON INIETTIVA ax + b ≡ ax0 + b (mod m) con x 6≡ x0 ax ≡ ax0 (mod m) ax − ax0 ≡ 0 a(x − x0 ) ≡ 0 (mod m) (mod m) (mod m) ⇐⇒ m | a(x − x0 ) Siccome gcd(a, m) = 1 si ha che m | (x − x0 ) e quindi x ≡ x0 (mod m) Definizione 5 (Inverso Moltiplicativo). L’inverso moltiplicativo è quell’elemento a−1 tale che a−1 a ≡ 1 (mod m). Si può calcolare sse f è INIETTIVA. La cardinalità di K è |K| = 12 · 26 dove 26 sono i valori che può assumere b e 12 i valori plausibili per a (cioè quelli primi con m). Il numero di valori che può assumere a dipende da m ed è definito da φ(m), la funzione di eulero. Definizione 6 (Funzione Toziente di Eulero). Sia m ≥ 2, m ∈ Z φ(m) = #{a | 1 ≤ a < m ∧ gcd(a, m) = 1} 8 1.1. Block Cipher Capitolo 1. Crittografia Classica Teorema 2 (Funzione Toziente di Eulero). Fattorizziamo m con pi primi distinti m = P1r1 · P2r2 · ..... · Pnrn φ(m) = Πni=1 (Piri − Piri −1 ) 1.1.4 Vigenère Cipher Sia nello Shift Cipher che nel Substitution Cipher ogni carattere viene mappato in un unico carattere. Per questa ragione questi crittosistemi appartengono alla categoria dei crittosistemi a sostituzione Mono alfabetica. Il cifrario di Vigenère invece adotta una sostituzione Poli alfabetica ossia in punti diversi del testo, una stessa lettera può essere associata a due lettere diverse. Questo cifrario è cosı̀ definito: m 1. P = Z26 x = (x1 , x2 , ....., xm ) m 2. C = Z26 y = (y1 , y2 , ....., ym ) m 3. K = Z26 k = (k1 , k2 , ....., km ) 4. ek (x) = e(k1 ,k2 ,....,km ) (x1 , x2 , ....., xm ) = (x1 +k1 (mod 26), ......, xm +km (mod 26)) 5. dk (y) = d(k1 ,k2 ,....,km ) (y1 , y2 , ....., ym ) = (y1 − k1 (mod 26), ......, ym − km (mod 26)) Il problema di questo cifrario è che la sostituzione dipende dalla posizione del plintext rispetto alla chiave, ossia se una lettera compare più volte nella stessa posizione rispetto alla chiave, avrà la stessa codifica. 9 1.1. Block Cipher 1.1.5 Capitolo 1. Crittografia Classica Hill Cipher Questo crittosistema è un’altro esempio di cifrario poli alfabetico. Esso è cosı̀ definito: m 1. P = Z26 x = (x1 , x2 , ....., xm ) m 2. C = Z26 y = (y1 , y2 , ....., ym ) 3. K = {K ∈ Mmxm | det(K) 6= 0 ∧ det(K) IN V ERT IBILE in Z26 } 4. eK (x) = (x1 , x2 , ....., xm ) · K 5. dK (y) = (y1 , y2 , ....., ym ) · K −1 (mod 26) (mod 26) Bisogna garantire l’iniettività di eK , affinché non sia possibile che due caratteri ricevano la stessa codifica; questo è possibile verificando che la matrice K sia invertibile. In R eK è invertibile o iniettiva se det(M ) 6= 0. In Zn questa condizione non è sufficiente. Teorema 3 (Funzione Invertibile). eK è invertibile/iniettiva ⇐⇒ det(K) 6= 0 e è anche un elemento invertibile in Zn Ossia la funzione è invertibile sse la matrice K è invertibile, cioè KK −1 = K −1 K = In Per la fase di decodifica bisogna calcolare la matrice inversa K −1 . Esistono due metodi: • Metodo della matrice dei cofattori • Algoritmo Jordan-Gauss Metodo della matrice dei cofattori Sia A la matrice da invertire x1,1 · · · . .. A = .. . xi,1 · · · la sua inversa è la seguente: 10 x1,j .. . xi,j 1.1. Block Cipher Capitolo 1. Crittografia Classica T cof (A, x1,j ) .. . cof (A, xi,j) A−1 cof (A, x1,1 ) · · · 1 .. ... = . det(A) cof (A, xi,1 ) · · · dove la notazione det(A) indica il determinante di A e l’esponente T indica l’operazione di trasposizione. Il cofattore in posizione (i, j) è definito come: cof (i, j) = (−1)i+j · det(minor(A, i, j)) dove minor(A, i, j) rappresenta la matrice ottenuta da A cancellando la riga i-esima e la colonna j-esima. Algoritmo Jordan-Gauss Funziona nel modo seguente: sia A una matrice invertibile. Costruiamo la matrice B = (A | I) con n righe e 2n colonne, costruita affiancando A e la matrice identità I. A questo punto applichiamo l’algoritmo di Gauss-Jordan alla nuova B. Poiché A è invertibile, le sue colonne sono indipendenti, e quindi conterranno tutte dei pivot alla fine dell’algoritmo. Quindi il risultato sarà una matrice del tipo (I | C). Ebbene la matrice C è proprio l’inversa di A. L’esempio seguente mostra che l’inversa di A è C ! 1 2 A= 2 3 C= (A | I) = 1 2k1 0 2 3k0 1 −2 −4k − 2 0 0 4k8 ! −4 = 2 −1 −2 −4k − 2 0 = ! ! −3 2 2 3k0 −2 0k6 −4 0 4k8 −4 1 ! = ! = −2 −4k − 2 0 0 −1k − 2 1 1 0k − 3 2 0 1k − 2 1 ! = ! = (I | C) Nel primo passaggio si è moltiplicata la prima riga per -2 e la si è sommata alla seconda riga. Nel secondo passaggio si è moltiplicata la seconda riga per -4 e la si è sommata alla prima riga. Infine nell’ultimo passaggio si è divisa la prima riga per -2 e la seconda per 4. 11 1.1. Block Cipher 1.1.6 Capitolo 1. Crittografia Classica Permutation Cipher Il cifrario si basa sull’anagrammare le lettere di un blocco, seguendo una certa funzione ∈ Sm . È possibile ridurlo ad un Hill Cipher. m 1. P = Z26 x = (x1 , x2 , ....., xm ) m 2. C = Z26 y = (y1 , y2 , ....., ym ) 3. K = Sm 4. ek (x) = eπ (x1 , x2 , ....., xm ) = (xπ(1) , xπ(2) , ....., xπ(m) ) 5. dk (y) = dπ (y1 , y2 , ....., ym ) = (yπ−1 (1) , yπ−1 (2) , ....., yπ−1 (m) ) È un cifrario debole perché il numero di chiavi non è eccessivamente elevato: m!. ESEMPIO: Scegliamo m = 6 Vogliamo codificare OGGI È MARTEDI Prendiamo la chiave k = (135624) OGGIEM → IMOGGE Riduzione all’Hill Cipher Questa trasformazione può essere vista come una moltiplicazione tra il vettore e un’opportuna matrice invertibile. (14 6 6 8 4 12) · 001000 000100 000010 = (8 12 14 6 6 4) 100000 000001 010000 k = (135624) La chiave k dipende dalle posizioni degli uno nelle colonne. Una matrice cosı̀ fatta riduce enormemente il numero di chiavi, perché si usano solo 1 e 0 secondo un certo criterio mentre potrei scegliere da 0 a 25 in maniera del tutto casuale, purché la funzione risulti una biiezione. 12 1.2. Stream Cipher 1.2 Capitolo 1. Crittografia Classica Stream Cipher Gli Stream Cipher si differiscono dai Block Cipher per i fatto che la chiave cambia nel tempo. x1 → ez1 (x1 ) x2 → ez2 (x2 ) .. . xm → ezm (xm ) Stream Cipher Sincroni: La successione z1 , z2 , ..., zn , che costituisce la chiave, non dipende dai testi in chiaro ma soltanto da una “master key”. Esso è definito dalla 7-tupla (P, C, K, L, E, D, G) dove • P: Insieme dei plaintext • C: Insieme dei ciphertext • K: Insieme delle possibili “master key” • L: Insieme delle possibili chiavi “parziali” • E: Insieme delle funzioni di cifratura ∀z ∈ L, ∃ez : P → C • D: Insieme delle funzioni di de-cifratura ∀z ∈ L, ∃dz : C → P • G: Insieme delle possibili successioni g : K → LN k 7−→ (z1 , z2 , ...., zn ) 13 1.2. Stream Cipher 1.2.1 Capitolo 1. Crittografia Classica LFSR L’acronimo sta per Linear Feedback Shift Register, ed è cosı̀ definito: • P = C = L = Z2 = {0, 1} • ez (x) = x + z (mod 2) → x ⊗ z • dz (y) = y + z (mod 2) → y ⊗ z • K = Z22m con m ∈ Z, m > 0 k = (k1 , k2 , ..., km | c0 , c1 , ..., cm−1 ) con c0 obbligatoriamente 1, altrimenti non considero le m posizioni precedenti ma le m − 1. • g : K → LN (k1 , k2 , ..., km | c0 , c1 , ..., cm−1 ) 7−→ (z1 , z2 , ..., zm ) ( g= se i ≤ m z i = ki zi+m = Pm−1 j=0 (cj · zi+j ) (mod 2) else N.B.: Le funzioni ez ed dz sono di facile implementazione hardware. Per quanto riguarda g la prima parte della chiave mi serve per inizializzare la successione. ESEMPIO: m=4 k = (1, 0, 0, 0 | 1, 1, 0, 0) zi+4 = c0 · zi + c1 · z(i+1) + c2 · z(i+2) + c3 · z(i+3) → zi + z(i+1) z1 = 1 z2 = 0 g= z3 = 0 z4 = 0 zi+4 = zi + z(i+1) (mod 2) Successione: 1 0 0 0 1 0 0 1 1 0 1 0 1 1 1 | 1 0 0 0 Mi fermo nel costruire la successione quando ripeto la sequenza iniziale. Nel caso preso in esempio ho trasformato una chiave da 8 in una da 15. 14 1.2. Stream Cipher Capitolo 1. Crittografia Classica Osservazione 1. La sequenza iniziale z1 , z2 , ..., zm si ripete al più dopo 2m −1 passi, perché le possibili sequenze binarie lunghe m sono 2m ; il −1 indica la chiave con tutti gli ci = 0, che non posso usare altrimenti la successione sarà composta da tutti 0. Per raggiungere il periodo massimo bisogna impostare adeguatamente gli ci . Come si fa a capire quando una g è buona? Definizione 7 (Polinomio caratteristico di un LFSR). Il POLINOMIO CARATTERISTICO di un LFSR è cosı̀ definito: f (x) = c0 + c1 · x + c2 · x2 + · · · + cm−1 · xm−1 + xm ∈ Z2 [X] Teorema 4 (Polinomio Caratteristico). Se il Polinomio Caratteristico è irriducibile (cioè non si può scrivere come il prodotto di due o più polinomi) allora la sequenza iniziale si ripete dopo i passi con i | 2m − 1 ESEMPIO: m=4 k = (1, 0, 0, 1 | 1, 0, 1, 1) Successione: 1 0 0 1 0 1 1 | 1 0 0 1 → PERIODO 7 7 6 | 24 − 1 → POLINOMIO RIDUCIBILE f (x) = 1 + x2 + x3 + x4 ———————– m=4 k = (1, 0, 0, 1 | 1, 1, 1, 1) Successione: 1 0 0 1 0 | 1 0 0 1 → PERIODO 5 5 | 24 − 1 → POLINOMIO IRRIDUCIBILE f (x) = 1 + x + x2 + x3 + x4 Quando il periodo è il più lungo possibile? Definizione 8 (Divisione fra Polinomi). Dati due polinomi f e g con g 6= 0 esistono e sono unici q e r tali che f =g·q+r con deg(r) < deg(g) . 15 1.2. Stream Cipher Capitolo 1. Crittografia Classica ESEMPIO: x4 + x2 + x x2 + 1 −x4 − x2 x2 x x4 + x2 +x≡x (mod x2 + 1) Definizione 9 (Polinomio Primitivo). Sia f (x) un polinomio a coefficienti m binari (Z2 [x]) se i monomi 1, x, x2 , x3 , · · · , x2 −2 sono distinti modulo f (x). ESEMPIO: f (x) = 1 + x + x2 + x3 + x4 è primitivo? 1 (mod f (x)) = 1 x (mod f (x)) = x x2 (mod f (x)) = x2 x3 (mod f (x)) = x3 x4 (mod f (x)) = 1 + x2 + x3 x5 (mod f (x)) = 1 Questo polinomio non è primitivo, infatti come si può vedere, il periodo è minore di 2m − 1 Teorema 5 (Periodo massimo). Il periodo di LFSR è 2m − 1 ⇐⇒ il suo polinomio caratteristico è primitivo. Teorema 6 (Esistenza Polinomio Primitivo). ∀m, ∃ almeno un polinomio primitivo di grado m. Semplificazione Hardware È molto semplice costruire un dispositivo hardware che implementa tale cifrario. Infatti basta utilizzare uno Shift Register e delle porte logiche XOR. ESEMPIO: k = (1, 0, 1, 0, 1, 1, 0 | 1, 0, 1, 0, 1, 0, 1) Utilizzo uno shift register da 7 bit e 4 porte. 16 1.3. Crittoanalisi 1.3 Capitolo 1. Crittografia Classica Crittoanalisi Con il termine crittoanalisi si intende lo studio dei metodi per ottenere il significato di informazioni cifrate senza avere accesso all’informazione segreta che è di solito richiesta per effettuare l’operazione. Tipicamente si tratta di trovare una chiave segreta. La crittoanalisi è la controparte della crittografia. Definizione 10 (Principio di Kerkoffs). Un crittosistema deve essere sicuro anche se il suo funzionamento è di pubblico dominio, con l’eccezione della chiave. La sicurezza di un crittosistema dipende solo dalla segretezza della chiave. Esistono 4 tipologie di attacchi ad un crittosistema (attack model): • Cipher Text Only: L’hacker dispone soltanto di ek (x) • Known Plaintext: L’hacker dispone di x e di ek (x) • Chosen Plaintext: L’hacker può inviare un messaggio cifrato a bob. Può quindi scegliere x e ricavarne ek (x) • Chosen Ciphertext: L’hacker può scegliere il testo cifrato y e ricavarne dk (y) Se il sistema è sicuro per la soluzione più facile per l’hacker (Chosen Ciphertext) lo sarà ancora di più per quelle più difficili. 1.3.1 Crittoanalisi del Substitution Cipher Esso è fragile all’attacco Cipher Text Only. Assumiamo che il testo in chiaro sia un testo in Inglese senza spazi. Molte tecniche di crittoanalisi usano proprietà statistiche della lingua Inglese. Questo perché una sostituzione mono alfabetica non altera queste proprietà che sono: • Frequenze delle lettere Le lettere possono essere divise, in base alle frequenza, in 5 gruppi: 1. E: La lettera con frequenza maggiore 2. T,A,O,I,N,S,H,R: Con frequenza compresa tra 0.06 e 0.09 3. D,L: Con frequenza intorno a 0.04 4. C,U,M,W,F,G,Y,P,B: Con frequenza compresa tra 0.015 e 0.028 17 1.3. Crittoanalisi Capitolo 1. Crittografia Classica 5. V,K,J,X,Q,Z : Che hanno frequenza minore di 0.01 • Digrams e Trigrams Sono sequenze di 2-3 lettere, tipo TO, ON, THE, AND ecc... Quando si riceve un testo si calcolano le frequenze delle lettere nel testo cifrato. Poiché le frequenze non vengono alterate siamo sicuri che la lettera che compare con il maggior numero di frequenze è sicuramente la E. Successivamente si cerca di trovare un assegnamento per il secondo gruppo procedendo per tentativi. Si ripete il procedimento fino alla fine. Chiaramente una cosa del genere è possibile se il testo cifrato che riusciamo a recuperare è ragionevolmente lungo; infatti se il testo è corto è possibile che le frequenze risultino sballate. Un’analisi del genere ci permette di ridurre di molto il tempo di decrittazione ottenuto con un algoritmo di forza bruta. 1.3.2 Crittoanalisi dell’Affine Cipher Esso, come il precedente, è fragile all’attacco Cipher Text Only, però l’Affine è più fragile in quanto basta indovinare due lettere e si riesce a trovare la chiave. Esso effettua una sostituzione mono alfabetica, quindi si presta bene anche ad un attacco di tipo Cipher Text Only. In realtà è più facile rompere l’Affine piuttosto che il Substitution; siccome la chiave è fatta di due incognite mi basta azzeccare due lettere per avere un sistema di due equazione e due incognite e quindi anche una sua soluzione, che sarà la chiave. Supponiamo di voler decifrare il seguente testo 18 1.3. Crittoanalisi Capitolo 1. Crittografia Classica F M XV EDKAP HF ERBN... Per prima cosa calcoliamo le frequenze: D=7 E=5 H=5 K=5 R=8 IPOTESI: E → R cioè 4 → 17 T → D cioè 19 → 3 Quindi otteniamo il sistema seguente: ( 17 = 4a + b (mod 26) 3 = 19a + b (mod 26) Dato che ho due uguaglianze per il momento tralascio b ed eseguo la differenza tra le due ( −14 = 15a (mod 26) ( −−−−−−− ( a = 12 · 7 a = 12 · 15−1 (mod 26) −−−−−−− (mod 26) = 84 (mod 26) = 6 −−−−−−− Il metodo per trovare l’inverso di un numero (a−1 ) verrà presentato più avanti. a = 6 non è un valore accettabile perché deve essere primo con 26 (gcd(6, 26) 6= 1). IPOTESI: E → R cioè 4 → 17 T → K cioè 19 → 10 19 1.3. Crittoanalisi Capitolo 1. Crittografia Classica Quindi otteniamo il sistema seguente: ( 17 = 4a + b (mod 26) 10 = 19a + b (mod 26) Dato che ho due uguaglianze per il momento tralascio b ed eseguo la differenza tra le due ( −7 = 15a (mod 26) − − −− ( a = 19 · 7 ( a = 19 · 15−1 (mod 26) −−−−−−− (mod 26) = 133 (mod 26) = 3 −−−−−−− a = 3 è accettabile quindi calcoliamo b per sostituzione da una delle due uguaglianze 17 = 4 · 3 + b → b = 5 Quindi si ha che dk (y) = (y − 5) · 3−1 → (y − 5) · 9 1.3.3 Crittoanalisi di Vigenère Anch’esso è fragile ad un attacco Cipher Text Only, ma poiché adotta una sostituzione poli alfabetica il procedimento di crittoanalisi e leggermente più complicato ma comunque computazionalmente leggero. La fragilità di vigenère è dovuta al fatto che se si riesce ad individuare m poi, il problema, si riconduce ad una sostituzione mono alfabetica di tipo shift, cioè la più semplice da rompere. Osservazione 2 (Kasiski). Se nel testo cifrato compare più volte una stessa sequenza di 3 o più lettere questo probabilmente non è casuale ma indica che la sequenza occupa la stessa posizione nell’ambito del proprio blocco. Quindi possiamo affermare che m divide la distanza tra le posizioni delle due sequenze identiche. Test di Kasiski: Si considerano nel ciphertext tutte le distanze δ1 , δ2 , · · · , δn fra sequenze di lettere uguali e lunghe almeno 3. Si ipotizza che m = gcd(δ1 , δ2 , · · · , δn ) 20 1.3. Crittoanalisi Capitolo 1. Crittografia Classica Osservazione 3 (Friedman). Se m è la lunghezza della chiave allora le sequenze cosı̀ ottenute s1 = y1 , ym+1 , y2m+1 · · · s2 = y2 , ym+2 , y2m+2 · · · .. . sm = ym , y2m , y3m · · · prese singolarmente sono il risultato di una sostituzione mono alfabetica, di tipo shift, perché ad ogni posizione nella sequenza aggiungo sempre la stessa quantità. Ora bisogna capire quando una sostituzione è mono alfabetica. Una sostituzione è mono alfabetica quando la distribuzione delle frequenze “somiglia” a quella del linguaggio naturale, oppure quando l’ indice di coincidenza del linguaggio naturale è molto vicino a quello del testo cifrato. Indice di coincidenza: Probabilità che prese due lettere a caso, queste siano uguali (dipende dal linguaggio). Calcolo dell’indice per il linguaggio naturale Ind.co. = P rob. 2 A + P rob. 2 B + · · · + P rob. 2 Z = PA2 + PB2 + · · · + PZ2 = (0, 082)2 + (0, 015)2 + · · · + (0, 001)2 = 0, 065 Calcolo dell’indice per il Ciphertext Ricordiamo: n k = n! k!·(n−k)! n 2 e di conseguenza = n(n−1) 2 che indica il numero di modi per scegliere due caratteri. PA 2 n 2 PB 2 n 2 Ind.co. = Ind.co. = + 1 n(n−1) 2 + ··· + X · PZ 2 n 2 fx · (fx − 1) x∈Z26 Se questo numero è molto vicino a 0.065 allora la sostituzione è mono alfabetica. Test di Friedman: Si cerca m andando per tentativi. Si considerano le sequenze 21 1.3. Crittoanalisi Capitolo 1. Crittografia Classica s1 , s2 , · · · , sm . Si calcola l’indice di coincidenza di ciascuna sequenza si . Se tale indice ∀i è vicino a 0,065 allora si accetta m come lunghezza della chiave. A questo punto il gioco è fatto, perché in questo caso per rompere il cifrario basta indovinare una sola lettera. Sia α la lettera più frequente nella sequenza i-esima, allora ipotizzo E→α 4 → nα nα = 4 + ki ki = nα − 4 Ripeto il procedimento ∀i cioè per ogni sequenza. 1.3.4 Crittoanalisi di Hill Effettuare un attacco di tipo Cipher Text Only è impraticabile, in quanto questo cifrario somiglia molto a Vigenère ma usa una trasformazione più complicata. È invece vulnerabile ad un attacco Known Plaintext. ESEMPIO: m=2 f riday → P QCF KU (5, 17, 8, 3, 0, 24) → (15, 16, 2, 5, 10, 20) Conoscendo queste poche informazioni l’hacker può impostare un sistema di 4 equazioni e 4 incognite e risolvere il problema. Sappiamo che: (5, 17) · (8, 3) · ab ! = (15, 16) cd ab cd Da qui costruiamo il seguente sistema: 22 ! = (2, 5) 1.3. Crittoanalisi Capitolo 1. Crittografia Classica 5a + 17c = 15 5b + 17d = 16 8a + 3c = 2 8b + 3d = 5 Otteniamo due sistemi più piccoli: ( ( 5a + 17c = 15 5b + 17d = 16 8a + 3c = 2 8b + 3d = 5 Risolviamo il primo: ( 5a + 17c = 15 8a + 3c = 2 = Poiché 26 ≡ 0 n n 13a + 20c = 17 = n 2 · (13a + 20c = 17) = n 26a + 40c = 34 (mod 26) 40c = 34 = n n 14c = 8 = 7c = 4 = n c = 4 · 7−1 = 4 · 15 = 8 Quindi ( ( c=8 = 5a + 17 · 8 = 15 ( c=8 = 5a = 9 ( c=8 a = 9 · 5−1 = 9 · 21 = c=8 a=7 Risolviamo il secondo: ( 5b + 17d = 16 8b + 3d = 5 ( ( = −−−−−−− 3d = 5 − 8b 5b + 17 · (45 − 72b) = 16 −−−−− ( ( = b = 19 ( = −−−−− d = (5 − 8b) · 9 = 45 − 72b 5b + 11 − 2b = 16 −−−−− ( = d = 45 − 72 · 19 ( = 3b = 5 −−−−− b = 19 d=3 Ora conosciamo la matrice chiave e per verifica controlliamo che (0, 24) · 7 19 83 23 ! = (10, 20) = = 1.3. Crittoanalisi 1.3.5 Capitolo 1. Crittografia Classica Crittoanalisi di LFSR Il cifrario è fragile ad un attacco di tipo Known Plaintext. Supponiamo di intercettare il seguente testo cifrato y = 101101011110010 Non esiste un metodo semplice per effettuare un attacco Cipher Text Only specialmente se il periodo è molto grande, mentre invece è molto semplice effettuare un attacco Known Plaintext. m=5 x = 011001111111000 ⊗ y = 101101011110010 z = 110100100001010 Già abbiamo recuperato metà chiave, infatti k = (1, 1, 0, 1, 0 | c0 , c1 , c2 , c3 , c4 ) Poiché (zm+1 , zm+2 , · · · , z2m ) = (c0 , c1 , · · · , cm−1 ) · z1 , z2 , · · · , zm z2 , z2 , · · · , zm+1 .. . zm , zm+1 , · · · , z2m Applicato all’esempio diventa 11010 101 (0, 1, 0, 0, 0) = (c0 , c1 , c2 , c3 , c4 ) · 0 1 0 100 001 00 01 10 00 Per ricavare gli ci , ho troviamo la matrice inversa e la moltiplichiamo per il (0, 1, 0, 0, 0) oppure risolviamo il seguente sistema: 24 1.3. Crittoanalisi 0 = c0 + c1 + c3 1 = c0 + c2 0 = c1 + c4 0 = c0 + c3 0 = c2 Capitolo 1. Crittografia Classica 0 = c0 + c1 + c3 1 = c0 0 = c1 + c4 0 = 1 + c3 0 = c2 0 = 1 + c1 + c3 1 = c0 0 = c1 + c4 1 = c3 0 = c2 0 = 1 + c1 + 1 1 = c0 0 = c1 + c4 1 = c3 0 = c2 0 = c1 1 = c0 0 = c4 1 = c3 0 = c2 k = (1, 1, 0, 1, 0 | 1, 0, 0, 1, 0) Teorema 7. Dato un LFSR di ordine m i valori z1 , z2 , · · · , z2m danno luogo ad un sistema lineare in c0 , c1 , · · · , cm−1 avente un’unica soluzione. 25 Capitolo 2 Teoria di Shannon 2.1 Introduzione Nel 1949, Claude Shannon pubblicò un articolo chiamato “Comunication Theory of Secret System”. Questo articolo ebbe un’enorme influenza nel campo della crittografia. In questo capitolo verranno presentate molte delle idee di Shannon. Per prima cosa consideriamo alcuni approcci per valutare la sicurezza di un crittosistema. I criteri di valutazioni più comuni sono: Computational Security . Un crittosistema viene definito computazionalmente sicuro se il miglior algoritmo conosciuto, per rompere il crittosistema, richiede un numero esponenziale di operazioni. Provable Security . Un altro approccio è provare matematicamente la sicurezza utilizzando la tecnica della riduzione, che ci permette di accostare questo problema ad un problema NP-Complete. Unconditional Security . Un crittosistema è definito sicuro se non può essere rotto con una quantità infinita di risorse. Shift Cipher, Substitution Cipher e Vigenère sono computazionalmente sicuri contro un attacco Ciphertext Only, ma sono insicuri contro un attacco Known Plaintext; One-Time Pad è unconditional security.. 2.2 Richiami di Probabilità Variabile Aleatoria Discreta . È una coppia (X , p) tale che • Dominio: X = {x1 , x2 , · · · , xn } • Distribuzione di Probabilità: p : X → [0, 1] con 26 Pn i=1 p(xi ) =1 2.2. Richiami di Probabilità Capitolo 2. Teoria di Shannon Prodotto di Var. Aleatorie Discrete : Date due variabili aleatorie X e Y il prodotto è X · Y = {(xi , yj )} → prodotto cartesiano dei domini. Ogni coppia ha una p(xi , yj ) che è il prodotto delle due prob. se le variabili sono indipendenti. Definizione 11 (Variabili Indipendenti). X e Y sono INDIPENDENTI se p(X = xi ∧ Y = yi ) = p(X = xi ) · p(Y = yi ) ESEMPIO (Non Indipendenti): X = {1, 2, 3, 4, 5, 6} p(X = xi ) = 1 6 Y = {P ARI, DISP ARI} p(Y = yi ) = 1 2 p(X = 2 ∧ Y = DISP ARI) = 0 6= 1 6 · 1 2 Probabilità Condizionata . p(X = xi | Y = yi ) = con p(Y = yi ) > 0 È l’intersezione 27 p(X = xi ∧ Y = yi ) p(Y = yi ) 2.3. Segretezza Perfetta Capitolo 2. Teoria di Shannon Teorema di Bayes . p(Y = yi ) · p(X = xi | Y = yi ) = p(X = xi ∧ Y = yi ) p(X = xi ) · p(Y = yi | X = xi ) = p(Y = yi ∧ X = xi ) Poiché le due quantità sono uguali otteniamo: 2.3 p(X = xi | Y = yi ) = p(X = xi ) · p(Y = yi | X = xi ) p(Y = yi ) p(Y = yi | X = xi ) = p(Y = yi ) · p(X = xi | Y = yi ) p(X = xi ) Segretezza Perfetta Le variabili aleatorie di un crittosistema sono: • X = {x1 , x2 , · · · , xn } → possibili testi in chiaro • K = {k1 , k2 , · · · , kh } → possibili chiavi • Y = {y1 , y2 , · · · , yn } → possibili testi cif rati Chiaramente X e Y sono indipendenti tra loro, mentre Y è dipendente proprio da X e Y. p(Y = yi ) = X p(X = xj , K = kl ) = (xj ,kl )|ekl (xj )=yi X p(X = xj ) · p(K = kl ) (xj ,kl )|ekl (xj )=yi Definizione 12 (Segretezza Perfetta). Un crittosistema realizza segretezza perfetta se ∀i, j p(X = xi | Y = yj ) = p(X = xi ) Cioè la conoscenza del cipher text non mi da nessuna informazione aggiuntiva. Conoscerla o meno è indifferente. Introduciamo il concetto di Matrice di Codifica che ci servirà a trovare le probabilità. 28 2.3. Segretezza Perfetta Capitolo 2. Teoria di Shannon Definizione 13 (Matrice di codifica). È una matrice le cui colonne corrispondono a testi in chiaro e le righe alle possibili chiavi. La cella (xi , kj ) contiene la codifica ekj (xi ). Osservazione 4 (Cardinalità di P e C). Su ogni riga una y ∈ Y può comparire al massimo una volta, altrimenti ek non è invertibile/iniettiva. Ne consegue che |P| ≤ |C| Consideriamo p1 = p(X = x1 ) p̄1 = p(K = k1 ) p1 = p(X = x2 ) .. . p̄2 = p(K = k2 ) pn = p(X = xn ) p̄k = p(K = kh ) Sappiamo che : p(X = xi | Y = yj ) = p(X = xi ) → p(X = xi ∧ Y = yj ) = p(X = xi ) p(Y = yj ) p(X = xi ∧ Y = yj ) → N ella colonna di xi considero le caselle dove compare yj e sommo le probabilita0 corrispondenti p(Y = yj ) → Sommo le probabilita0 di tutte le caselle dove compare yj ESEMPIO (Shift Cipher con alfabeto ∈ Z4 ): p1 , p2 , p3 , p4 dipendono dal linguaggio p̄1 , p̄2 , p̄3 , p̄4 = 1 4 p(X = 2 | Y = 3) = p(X = 2 ∧ Y = 3) = p(Y = 3) p1 4 p3 4 + p2 4 + p3 p4 4 4 = p3 4 1 4 = p3 = p(X = 2) Bisogna fare questo controlla ∀x, y; comunque lo shift cipher realizza la segretezza perfetta. La Figura 2.3 mostra la matrice di codifica dell’esempio appena descritto. ESEMPIO 2: P = {0, 1} K = {k1 , k2 , k3 } C = {A, B, C, D} Se vedo passare A o D capisco già qual è la chiave. 29 2.3. Segretezza Perfetta Capitolo 2. Teoria di Shannon p(X = 0 | Y = A) = p(X = 1 | Y = A) = 1 8 1 8 = 1 6= p(X = 0) 0 1 8 = 0 6= p(X = 1) Questo cifrario non realizza la segretezza perfetta. Osservazione 5. Se c’è segretezza perfetta allora: • Ogni y ∈ C compare in ogni colonna almeno una volta. Se per assurdo non comparisse mai si avrebbe p(X = xi | Y = yi ) = 0 Ossia l’hacker in fase di decodifica può scartare la xi • Ne segue che |C| ≤ |K| Teorema 8 (Segretezza Perfetta). Per semplicità supporremo che |P| = |C| = |K|. SEGRET EZZA P ERF ET T A ⇐⇒ p(K = kl ) = 30 1 |K| ∀x ∈ P, ∀y ∈ C ∃k ∈ K | y = ek (x) 2.3. Segretezza Perfetta Capitolo 2. Teoria di Shannon La prima affermazione significa che le chiavi sono equiprobabili. La seconda affermazione significa che ∀y ∈ C y compare esattamente una volta in ogni colonna. Poiché |P| = |C| compare solo una volta anche su ogni riga. Dimostrazione. ⇐= Calcoliamo p(X = xi | Y = yj ) p(X = xi | Y = yj ) = 1 pi · |K| p(X = xi ∧ Y = yj ) = = p(Y = yi ) p(Y = yj ) pi · 1 |K| 1 |K| pi · p1 |K| + p2 |K| 1 |K| + ··· + pn |K| = = pi = p(X = xi ) =⇒ Già sappiamo dall’Osservazione 5 che su ciascuna colonna ogni y compare almeno una volta. In realtà compare esattamente una volta in quanto abbiamo supposto |C| = |K|. Inoltre sappiamo dall’Osservazione 4 che ogni y ∈ C compare in ogni riga esattamente una volta in quanto |P| = |C|. Quindi abbiamo già dimostrato la seconda affermazione; ora mostriamo la seconda: IPOTESI: p(X = xi | Y = yj ) = pi p(X = xi | Y = yj ) = pi → p(X = xi ∧ Y = yj ) pi · p̄l = pi → = pi p(Y = yi ) p(Y = yj ) p̄l = 1 → p̄l = p(Y = yj ) p(Y = yj ) Siamo arrivati ad una conclusione che non dipende da xi . Quindi p(Y = yj ) è costante e ripartito per tutti gli elementi di |C|, cioè p̄l = 1 1 = |C| |K| perché abbiamo supposto |C| = |K|. 31 2.4. One-Time Pad 2.4 Capitolo 2. Teoria di Shannon One-Time Pad È un cifrario che realizza la segretezza perfetta. È identico a vigenère soltanto che usa una chiave grande quanto il messaggio da inviare. È cosı̀ definito: • P = Z2M • C = Z2M • K = Z2M • ek (x) = (x1 ⊗ k1 , · · · , xn ⊗ kn ) • dk (x) = (y1 ⊗ k1 , · · · , yn ⊗ kn ) Teorema 9. Il One-Time Pad realizza segretezza perfetta se ogni chiave compare con la stessa probabilità, cioè p̄l = 1 2M Dimostrazione. Fisso X = (x1 , x2 , · · · , xM ) e Y = (y1 , y2 , · · · , yM ). Mi chiedo, quante chiavi K = (k1 , k2 , ·, kM ) sono tali che ek (x) = y? x1 ⊗ k1 = y1 k1 = y1 ⊗ x1 x2 ⊗ k2 = y2 k2 = y2 ⊗ x2 (x1 ⊗ k1 , · · · , xn ⊗ kn ) = (y1 , y2 , · · · , yM ) → = .. . .. . xn ⊗ kn = yn kn = yn ⊗ xn Quindi k esiste ed è unica. Vantaggio: Segretezza Perfetta Svantaggio 1: Scambio della chiave di grande dimensione. Qui si crea un paradosso perché se io sono in grado di comunicare in modo sicuro la chiave tanto vale che comunico il messaggio Svantaggio 2: Una volta utilizzata la chiave deve essere cambiata in quanto la lunghezza del testo è variabile e in più il cifrario è vulnerabile ad un attacco known plaintext. 32 2.5. Crittosistemi Prodotto Capitolo 2. Teoria di Shannon Per questi motivi viene usato solo in ambito militare, ma non ha senso usarlo in ambito commerciale. La nuova frontiera della Crittografia Quantistica potrebbe risolvere lo svantaggio 1. 2.5 Crittosistemi Prodotto L’obiettivo è tentare di aumentare la sicurezza usando crittosistemi diversi o anche sempre lo stesso e ripeterlo più volte. Supponiamo |P| = |C| e siano S1 e S2 due crittosistemi cosı̀ definiti: S1 = (P, P, K1 , E1 , D1 ) S2 = (P, P, K2 , E2 , D2 ) S1 xS2 = (P, P, K1 xK2 , E, D) con K1 xK2 = {(k1 , k2 ) | k1 ∈ K1 ∧ k2 ∈ K2 } ek (x) = e(k1 ,k2 ) (x) = ek2 (ek1 (x)) dk (y) = d(k1 ,k2 ) (y) = dk1 (dk2 (y)) ESEMPIO: S1 = Vigenère S2 = Hill m, Zm, Zm, E , D ) S1 = (Z26 1 26 26 1 con ek (x) = e(k1 ,···,km ) (x1 , · · · , xm ) = (x1 +k1 (mod 26), · · · , xm +km (mod 26)) m , Z m , {K ∈ M S2 = (Z26 mm | gcd(det(K), 26) = 1}, E1 , D2 ) 26 con eK (x) = eK (x1 , · · · , xm ) = (x1 , · · · , xm ) · K m , Z m , {(k, K) | k ∈ Z m ∧ K ∈ M S1 xS2 = (Z26 mxm : gcd(det(K), 26) = 1}, E, D) 26 26 con ek (x) = e(k,K) (x1 , · · · , xm ) = (x1 + k1 , · · · , xm + km ) · K 33 2.5. Crittosistemi Prodotto Capitolo 2. Teoria di Shannon Proprietà dei Crittosistemi Prodotto • Associativa: (S1 xS2 )xS3 = S1 x(S2 xS3 ) • No Commutativa: S1 xS2 6= S2 xS1 come la composizione di funzioni Definizione 14 (S n ). Dato un crittosistema S si pone Sn = S · S · S} | · S{z n volte AES e DES sono di tipo S n . In generale può accadere che applicare n volte lo stesso crittosistema non aumenti la sicurezza. Non è detto che prendendo un S qualunque S n risulti più sicuro. Definizione 15 (Crittosistema Idempotente). S si dice idempotente se S 2 = S e quindi anche se S n = S. Definizione 16 (Crittosistemi Uguali). Due crittosistemi si considerano uguali se hanno uguali |P|, |C| e FUNZIONI DI CODIFICA e inoltre le probabilità su P e su C sono le stesse (cioè la probabilità che dato un testo in chiaro x ∈ P si ottenga un determinato y ∈ C, e la probabilità che dato un testo cifrato y ∈ C si ottenga un determinato x ∈ P, siano le stesse in entrambi i crittosistemi ∀x ∈ P e ∀y ∈ C). Teorema 10 (Cifrari Idempotenti). I cifrari Shift, Permutazione e Sostituzione sono idempotenti. Vigenère, Hill, Dimostrazione. Hill: m m S 2 = (Z26 , Z26 , {(A, B) | A, B ∈ Mmxm ∧ gcd(det(A), 26) = 1 e gcd(det(B), 26) = 1}, E, D) ek (x) = e(A,B) (x1 , · · · , xm ) = ((x1 , · · · , xm )·A)·B = (x1 , · · · , xm )·(AB) = (x1 , · · · , xm )·K La funzione codifica si riduce ad una moltiplicazione di un vettore per una matrice. Qual è la probabilità della funzione (y1 , · · · , ym ) → (x1 , · · · , xm ) · K? P rob. = |{A | gcd(det(A), 26) = 1|} 1 = = p(K = k) in S 2 {|A | gcd(det(A), 26) = 1|} {|A | gcd(det(A), 26) = 1|} 34 2.5. Crittosistemi Prodotto 2.5.1 Capitolo 2. Teoria di Shannon Crittosistemi Prodotto Idempotente Molti dei block cipher moderni sono dei product cipher. Questi product cipher, spesso, incorporano una sequenza di permutazioni e sostituzioni. Uno schema di uso comune è l’iterated cipher, cioè la stessa sequenza di operazioni viene ripetuta un certo numero di volte (round) con la possibilità di variare la round function e la chiave (key schedule). Il problema è: Come posso trovare S : S 6= S n ? Provo ad utilizzare come S un crittosistemi prodotto S = S1 xS2 , in modo tale da avere (S1 xS2 )2 6= S1 xS2 . Osservazione 6 (Crittosistema Prodotto Idempotente). Un crittosistema prodotto è idempotente se: • Se S1 xS2 = S2 xS1 • Se S12 = S1 , S22 = S2 Perché in tal caso: (S1 xS2 )2 = S1 xS2 xS1 xS2 = S1 xS1 xS2 xS2 = S12 xS22 = S1 xS2 Proposizione 1. Il prodotto di due crittosistemi idempotenti che commutano fra di loro è anch’esso idempotente. ESEMPIO: S1 = VIGENÈRE S2 =HILL S1 xS2 è idempotente? S1 e S2 sono idempotenti. Quindi devo controllare se commutano. S1 xS2 : x→x+k (mod 26) → A · (x + k S2 xS1 : x → Ax → Ax + k (mod 26)) = Ax + Ak Anche se formalmente sono diversi bisognerà controllare le probabilità, e vedremmo che in realtà le due funzioni di codifica sono uguali. 35 2.5. Crittosistemi Prodotto Capitolo 2. Teoria di Shannon ESEMPIO DI CRITTOSISTEMI CHE NON COMMUTANO: S1 = VIGENÈRE con m=2 S2 =PERMUTATION con chiave fissa (123) e m=3 Proviamo con le matrici di codifica che S1 xS2 6= S2 xS1 , prendendo in considerazione solo parole lunghe 3 per questioni di tempo e spazio. Come possiamo vedere i due cifrari hanno funzioni diverse quindi S1 xS2 non è IDEMPOTENTE. Come controprova occorrerebbe costruire la matrice di codifica di (S1 xS2 )2 e verificare effettivamente che è diversa da quella di S1 xS2 . La matrice è composta da 16 chiavi che è il prodotto del numero di chiavi del primo cifrario per il numero di chiavi del secondo: (123), 00, (123), 00 (123), 01, (123), 00 (123), 10, (123), 00 .. . (123), 11, (123), 11 Il trucco della permutazione a chiave fissa, che è apparentemente banale, è quello che viene usato nei crittosistemi simmetrici moderni. 36 Capitolo 3 Crittografia Simmetrica 3.1 Substitution-Permutation Network (SPN) Un SPN è uno speciale tipo di iterated cipher. L’idea che sta alla base dell’SPN è quella di considerare un crittosistema di tipo S n dove S = S1 xS2 xS3 con • S1 = VIGENÈRE • S2 = SUBSTITUTION (a chiave fissa) • S3 = PERMUTATION (a chiave fissa) Supponiamo di lavorare con un alfabeto binario (Z2 ) e che i blocchi siano lunghi n con n = lm dove n, l, m sono interi. Un SPN è creato mediante due operazioni: • πS : {0, 1}l → {0, 1}l • πP : {1, 2, · · · , lm} → {1, 2, · · · , lm} La permutazione πS viene anche detta S-box; la “S” indica che è una sostituzione e per di più è a chiave fissa. Essa viene usata per sostituire l bit con un differente insieme di l bit. πP è un’altra funzione usata per permutare lm bit. Definizione 17 (Substitution-Permutation Network). Siano l, m e N r interi positivi, sia πS : {0, 1}l → {0, 1}l una permutazione e sia πP : {1, 2, · · · , lm} → {1, 2, · · · , lm} un’altra permutazione. Siano P = C = {0, 1}lm , e sia K ⊆ ({0, 1}lm )N r+1 che consiste nei possibili key schedule che possono essere derivati da una chiave iniziale K usando un algoritmo per generare un key schedule. Data una stringa di lm bit x = (x1 , x2 , · · · , xlm ), può essere vista come una concatenazione di m stringhe di lunghezza l indicati con i simboli x<1> , · · · , x<m> dove 37 3.1. Substitution-Permutation Network (SPN) Capitolo 3. Crittografia Simmetrica x<i> = (x(i−1)l+1 , · · · , xil ) L’SPN consiste in N r round. In ogni round, eccetto per gli ultimi due vengono effettuate m sostituzioni usando πS e una permutazione usando πP . La Figura 3.1 mostra lo pseudo-codice del crittosistema. Figura 3.1: SPN Didattico - pseudo-codice La Figura 3.2 mostra lo schema di un SPN didattico con n = 16, m = 4, l = 4, N r = 5 la cui funzione πS è mostrata in Figura 3.3: Come si può notare l’SPN non è esattamente un cifrario di tipo S n perché: 1. Gli ultimi due round sono diversi dai precedenti • Nel penultimo manca la permutazione • L’ultimo è solo l’applicazione di Vigenère Il motivo è semplice se ci fossero gli altri passaggi, essendo a chiave fissa, l’hacker li conosce è potrebbe invertirli facilmente, mentre l’ultimo è ricavato solo in funzione della chiave che è l’unica cosa che l’hacker non conosce. Il penultimo è cosı̀ perché si vuole avere simmetria tra l’inizio e la fine, in modo tale da poter utilizzare lo stesso algoritmo sia per la codifica che per la decodifica. 2. Le chiavi dei vari round nella pratica non sono completamente indipendenti perché se n = 128 e N r = 16 significa che dovranno essere inviati 128 · 16 bit di chiave, che sono troppi. È per questo che si utilizza un algoritmo apposito che genera un key schedule a partire da una chiave di 16 bit. Si fa una cosa simile all’LFSR. 38 3.1. Substitution-Permutation Network (SPN) Capitolo 3. Crittografia Simmetrica Figura 3.2: SPN Didattico 39 3.1. Substitution-Permutation Network (SPN) Capitolo 3. Crittografia Simmetrica Figura 3.3: Funzione S-box 3.1.1 Considerazione sulle S-box Il fatto che vengano prese l S-box da m bit piuttosto che una sola da n bit è dovuto ad un problema implementativo. Supponiamo che il sistema cifri blocchi di 128 bit e che si voglia usare una sola S-box. La S-box è implementata tramite una tabella affinché sia una funzione molto irregolare e non identificabile tramite una formula precisa. Questo vale a dire che la tabella è composta da 2128 righe e 2 · 128 colonne, il che implica un enorme impiego di memoria e una ricerca molto inefficiente. Se invece si utilizzano, per esempio 4 S-box (l = 4) che operano su 4 bit ciascuna (m = 4) io avrò tabelle composte da 24 righe e 8 colonne. Poiché avrò 4 tabelle della stessa grandezza la quantità di memoria occupata è sempre la stessa ma la ricerca diventa molto più efficiente. Questo appena descritto è il meccanismo che usa DES mentre AES utilizza sempre la stessa S-box quindi è anche meno oneroso in termini di spazio. 40 3.2. Crittoanalisi Lineare 3.2 Capitolo 3. Crittografia Simmetrica Crittoanalisi Lineare La crittoanalisi lineare si basa su una osservazione del tutto generale ossia: Osservazione 7. Si consideri un cifrario a blocchi binario dove x = (x1 , x2 , · · · , xn ), k = (k1 , k2 , · · · , ks ) e y = (y1 , y2 , · · · , yn ). Se ∀x si ha che sommando alcuni bit di x, alcuni di y e alcuni di k il risultato è sempre 1 o sempre 0 xi1 ⊗ · · · ⊗ xik ⊗ yj1 ⊗ · · · ⊗ yjl ⊗ kt1 ⊗ · · · ⊗ ktv = 1/0 allora con una sola coppia (x, y) si ricostruisce la somma di alcuni bit di chiave. L’hacker si trova di fronte un sistema lineare con una sola soluzione, che è molto semplice da risolvere. Chiaramente questo è il caso più semplice per l’hacker in quanto il 100% delle volte viene 0 o 1, ma in realtà anche una percentuale 60-40 è rischiosa. Supponiamo che p(xi1 ⊗ · · · ⊗ xik ⊗ yj1 ⊗ · · · ⊗ yjl ⊗ kt1 ⊗ · · · ⊗ ktv = 1/0) LON T AN A DA 1 2 allora con molte coppie (x, y) è possibile ricostruire informazioni sulla chiave. ESEMPIO: 10000 coppie (x, y) p = 70% Si effettua una ricerca esaustiva sui bit di chiave: ∀k = (k̄t1 , · · · , k̄tv ) conto per quante delle 10000 coppie (x, y) vale xi1 ⊗ · · · ⊗ xik ⊗ yj1 ⊗ · · · ⊗ yjl ⊗ k̄t1 ⊗ · · · ⊗ k̄tv = 0 e per quante xi1 ⊗ · · · ⊗ xik ⊗ yj1 ⊗ · · · ⊗ yjl ⊗ k̄t1 ⊗ · · · ⊗ k̄tv = 1 Se la distribuzione di probabilità dei due valori è molto vicina a 50-50 allora posso dire che la chiave che ho supposto non è quella che lega x a y, mentre se la distribuzione è circa 70-30 posso ragionevolmente assumere che quella ipotizzata sia la parte di chiave reale. 41 3.2. Crittoanalisi Lineare Capitolo 3. Crittografia Simmetrica Può anche succedere che ho più k = (k̄t1 ⊗ · · · ⊗ k̄tv ) che mi danno una percentuale favorevole, in tal caso proseguo per tentativi nell’individuazione della chiave. Quando si utilizza un SPN la cosa è leggermente diversa. Si cercano relazioni del tipo: r−1 r−1 ⊗ · · · ⊗ uN = 0/1 xi1 ⊗ · · · ⊗ xik ⊗ uN j1 jl Supponiamo che r−1 r−1 ⊗ · · · ⊗ uN = 0/1) LON T AN A DA p(xi1 ⊗ · · · ⊗ xik ⊗ uN j1 jl 1 2 Supponiamo di avere a disposizione molte coppie (x, y). Per ogni possibile k̄ N r effettuo l’operazione inversa ottenendo ūN r−1 . Conto quante volte il risultato è 0 e quante è 1 ottenendo una certa distribuzione di probabilità; ritengo quindi di avere ottenuto l’uN r−1 esatto se la probabilità che ho ottenuto è molto lontana da 12 . Ora il problema è: Lontana quanto? Come ottenere la probabilità di cui si parla? 3.2.1 Piling-Up Lemma Definizione 18 (Polarizzazione o Bias). Sia X una variabile aleatoria discreta binaria. Si dice polarizzazione il valore (x) = p0 − Se (x) è vicina a − 12 o 1 2 1 con p0 = p(X = 0) 2 si dice che la variabile è polarizzata. Osservazione 8. Poiché 0 ≤ p ≤ 1 =⇒ − 12 ≤ (x) ≤ 1 2 =⇒ |(x)| ≤ 1 2 Definizione 19 (Piling-Up Lemma - lemma del tamponamento a catena). Siano Z1 , Z2 , · · · , Zn variabili aleatorie binarie indipendenti, e siano 1 , 2 , · · · , m le rispettive polarizzazioni =⇒ (Z1 ⊗ Z2 ⊗ · · · ⊗ Zn ) = 2n−1 · Πni=1 i Dimostrazione. Dimostriamolo per n = 2. Abbiamo quindi due variabili aleatorie binarie indipendenti Z1 , Z2 e p0 = p(Z1 = 0) p1 = p(Z1 = 1) = 1 − p0 42 3.2. Crittoanalisi Lineare Capitolo 3. Crittografia Simmetrica q0 = p(Z2 = 0) q1 = p(Z2 = 1) = 1 − q0 quindi 1 2 1 (Z2 ) = q0 − 2 (Z1 ) = p0 − Ora calcoliamo la probabilità che Z1 ⊗ Z2 = 0 p(Z1 ⊗ Z2 = 0) = p0 q0 + (1 − p0 )(1 − q0 ) (Z1 ⊗Z2 ) = p0 q0 +(1−p0 )(1−q0 )− 1 1 1 = p0 q0 +(1−q0 −p0 +p0 q0 )− = 2p0 q0 −q0 −p0 + 2 2 2 Dobbiamo mostrare che questa quantità sia uguale a 2n−1 · Πni=1 i , quindi 1 1 1 1 1 1 2n−1 ·Πni=1 i = 21 ·1 ·2 = 2(p0 − )(q0 − ) = 2(p0 q0 − q0 − p0 + ) = 2p0 q0 −q0 −p0 + 2 2 2 2 4 2 Dimostrazione. È indispensabili che le variabili siano indipendenti. ESEMPIO: Z1 , Z2 , Z3 IN DIP EN DEN T I con (Z1 ) = (Z2 ) = (Z3 ) = u1 = Z2 ⊗ Z3 u2 = Z1 ⊗ Z3 u3 = Z1 ⊗ Z2 Si ha quindi (u1 ) = 2 · (u2 ) = 2 · 1 4 1 4 · · 1 4 1 4 = = 1 8 1 8 43 1 4 3.2. Crittoanalisi Lineare (u3 ) = 2 · 1 4 · 1 4 = Capitolo 3. Crittografia Simmetrica 1 8 Poiché però u3 = u1 ⊗ u2 (u3 ) = 2 · 3.2.2 1 1 1 · = 6 8 8 8 Approssimazione lineare di un S-box Osservazione 9 (Problema S-box lineare). Se la funzione fosse lineare, cioè i risultati fossero, somme dei bit in ingresso, non ci sarebbe bisogno di rappresentarla tramite una tabella. Una funzione lineare ci permette di ottenere polarizzazione massima per le variabili aleatorie che consideriamo; questa situazione è particolarmente vantaggiosa per l’hacker. ESEMPIO: Supponiamo che y1 = x1 ⊗ x3 ⊗ x4 y2 = x1 ⊗ x4 y3 = x2 ⊗ x3 y4 = x3 ⊗ x4 Succederebbe: p(x1 ⊗ x3 ⊗ x4 ⊗ y1 = 0) = 1 cioè polarizzazione massima; significa che è molto facile da invertire. Serve che la funzione sia il meno lineare possibile. Per misurare il grado di linearità di una S-box si calcola la polarizzazione (xi1 ⊗ · · · ⊗ xik ⊗ yj1 ⊗ · · · ⊗ yjl ) prendendo gli xi e yj tali che ai = bj = 1. La formula completa è questa: (a1 x1 ⊗ a2 x2 ⊗ a3 x3 ⊗ a4 x4 ⊗ b1 y1 ⊗ b2 y2 ⊗ b3 y3 ⊗ b4 y4 ) che deriva da quella generale che è: n O ! ai Xi ⊗ i=1 n O i=1 44 ! bi Yi 3.2. Crittoanalisi Lineare Capitolo 3. Crittografia Simmetrica con ai , bj ∈ Z2 . Nel caso in cui || > 0 per qualche valore di ai e bj c’è una debolezza dell’S-box. Consideriamo l’S-box seguente Figura 3.4: Funzione S-box e consideriamo come variabile aleatoria α = x3 ⊗ x4 ⊗ y1 ⊗ y4 cioè quella ottenuta con i vettori a = (0, 0, 1, 1) e b = (1, 0, 0, 1). Si procede contando quante volte la variabile aleatoria ha valore 1 e quante 0, ottenendo 2 volte lo 0 e 14 volte l’1. Dunque la probabilità p(x3 ⊗ x4 ⊗ y1 ⊗ y4 = 0) = 2 16 e (α) = 2 1 3 − =− 16 2 8 Non è difficile quindi calcolare le polarizzazioni delle 28 = 256 possibilità date dalla scelta di ai e bj La Figura 3.5 mostra le occorrenze del valore 0 in tutti i casi possibili. Da notare che a e b sono rappresentati in esadecimale quindi x3 ⊗ x4 ⊗ y1 ⊗ y4 è rappresentato da a = 3 e b = 9 perché a = (0, 0, 1, 1) → (0, 0, 1, 1)2 = (3)16 45 3.2. Crittoanalisi Lineare Capitolo 3. Crittografia Simmetrica Figura 3.5: NL(a,b) cioè occorrenze dello 0 b = (1, 0, 0, 1) → (1, 0, 0, 1)2 = (9)16 Ora, dove nella tabella compaiono valori bassi significa che la polarizzazione è lontana da 1 2 e negativa, mentre dove sono alti è lontana ma positiva. Valori molto vicini al valore medio ci indicano variabili non polarizzate. Per ricavare la polarizzazione dalla tabella NL basta applicare la formula: (a, b) = N L(a, b) − 8 16 L’hacker quindi prenderà in considerazione quelle polarizzate per apportare il suo attacco. In particolare cercherà un percorso nello schema che collega le variabili polarizzate. 3.2.3 Attacco lineare ad un SPN L’attacco si basa sul trovare un insieme di approssimazioni lineari delle S-box che possono essere utilizzate per derivare un’approssimazione lineare dell’intero SPN. La figura 3.6 mostra il procedimento. Da notare che le frecce corrispondono alle variabili random che vengono coinvolte nell’approssimazione lineare, mentre le S-box che vengono coinvolte vengono chiamate active S-box. 46 3.2. Crittoanalisi Lineare Capitolo 3. Crittografia Simmetrica Figura 3.6: Procedimento dell’attacco all’SPN 47 3.2. Crittoanalisi Lineare Capitolo 3. Crittografia Simmetrica Supponiamo che le variabili aleatorie con polarizzazione maggiore, ottenute con il metodo precedente, sono • x1 ⊗ x3 ⊗ x4 ⊗ y2 → || = • x2 ⊗ y2 ⊗ y4 → || = 1 4 1 4 L’approssimazione considera 4 S-box attive: • Nella S12 la prima variabile polar. diventa: T1 = U51 ⊗ U71 ⊗ U81 ⊗ V61 con (T1 ) = 1 4 • Nella S22 la prima variabile polar. diventa: T2 = U62 ⊗ V62 ⊗ V82 con (T1 ) = − 41 • Nella S23 la prima variabile polar. diventa: T3 = U63 ⊗ V63 ⊗ V83 con (T1 ) = − 41 3 ⊗ V 3 ⊗ V 3 con (T ) = − 1 • Nella S43 la prima variabile polar. diventa: T4 = U14 1 14 16 4 Calcoliamo, dunque, la polarizzazione della somma: 3 1 1 1 (T1 ⊗ T2 ⊗ T3 ⊗ T4 ) = 2 · · − =− 4 4 32 3 Ora, le variabili T1 , T2 , T3 , T4 hanno una proprietà e cioè che il loro XOR può essere espresso in funzione del plaintext, ossia: • T1 = U51 ⊗ U71 ⊗ U81 ⊗ V61 = X5 ⊗ K51 ⊗ X7 ⊗ K71 ⊗ X8 ⊗ K81 ⊗ V61 • T2 = U62 ⊗ V62 ⊗ V82 = V61 ⊗ K62 ⊗ V62 ⊗ V82 • T3 = U63 ⊗ V63 ⊗ V83 = V62 ⊗ K63 ⊗ V63 ⊗ V83 3 ⊗ V 3 ⊗ V 3 = V 2 ⊗ K3 ⊗ V 3 ⊗ V 3 • T4 = U14 14 16 8 14 14 16 Le quattro variabili T1 , T2 , T3 , T4 hanno un valore di polarizzazione che, in valore assoluto, è molto alto. Il che significa che se andiamo a calcolare lo XOR delle variabili random otterremo delle cancellazioni (esempio V61 , V82 ), ottenendo 3 ⊗V3 X5 ⊗ X7 ⊗ X8 ⊗ V63 ⊗ V83 ⊗ V14 16 3 ⊗K51 ⊗ K71 ⊗ K81 ⊗ K62 ⊗ K63 ⊗ K14 Il prossimo passo è quello di sostituire i Vi3 con formule espresse in funzione di Ui4 , e cioè: V63 = U64 ⊗ K64 4 4 V83 = U14 ⊗ K14 48 3.2. Crittoanalisi Lineare Capitolo 3. Crittografia Simmetrica 3 V14 = U84 ⊗ K84 3 4 4 V16 = U16 ⊗ K16 la formula diventa 4 ⊗ U4 ⊗ X5 ⊗ X7 ⊗ X8 ⊗ U64 ⊗ U84 ⊗ U14 16 3 ⊗ K4 ⊗ K4 ⊗ K4 ⊗ K4 ⊗K51 ⊗ K71 ⊗ K81 ⊗ K62 ⊗ K63 ⊗ K14 6 8 14 16 Questa espressione è espressa solo in funzione di bit del plaintext, bit di UiN r−1 e bit di chiave. Supponiamo che i bit di chiave siano fissati la somma dei vari Kij ha valore 1 si 1 o 0 fisso, cioè conosciuto. Quindi la variabile che ha come polarizzazione = ± 32 riduce ad essere 4 4 X5 ⊗ X7 ⊗ X8 ⊗ U64 ⊗ U84 ⊗ U14 ⊗ U16 Il fatto che tale formula ha una polarizzazione lontana da 0 consente di effettuare l’attacco lineare di cui si è parlato precedentemente. Tale attacco è riportato formalmente in pseudo-codice nella Figura 3.7 Figura 3.7: Algoritmo attacco lineare T è il numero di coppie (x, y); T è l’insieme delle coppie (x, y); (L1 , L2 ) gli 8 bit di chiave espressi in esadecimale. 49 3.2. Crittoanalisi Lineare Capitolo 3. Crittografia Simmetrica L’algoritmo calcola il massimo valore, in realtà si deve cercare quella chiave che restituisce una percentuale molto vicina a 12 − o a 12 + . Però in tutto questo discorso c’è una forzatura perché le variabili aleatorie non sono proprio del tutto indipendenti in quanto le chiavi non sono del tutto indipendenti dato che fanno parte di un key schedule generato a partire da una chiave principale. 50 3.3. Campi Finiti 3.3 Capitolo 3. Crittografia Simmetrica Campi Finiti Definizione 20 (Gruppo). È un insieme dove abbiamo definita un’operazione. Formalmente è una tupla (G, ◦) dove • G: è un insieme • ◦: è un’operazione, cioè una legge che associa a due elementi di G un terzo elemento sempre di G. L’operazione deve avere le seguenti proprietà: 1. Associativa: (a ◦ b) ◦ c = a ◦ (b ◦ c) 2. Esistenza elemento neutro: ∃e ∈ G t.c.∀a ∈ G a ◦ e = e ◦ a = a 3. Esistenza elemento inverso: ∀a ∈ G ∃a−1 ∈ G t.c. a ◦ a−1 = a−1 ◦ a = e Definizione 21 (Gruppo Abeliano). Un gruppo abeliano è un gruppo dove vale anche la proprietà commutativa: a◦b=b◦a Definizione 22 (Campo). Un campo è un insieme su quale sono definite due operazioni. Formalmente è una tripla (K, +, ·) dove • K è un’insieme • +, · sono due operazioni con le seguenti proprietà: 1. (K, +): è un gruppo abeliano 2. Indichiamo con 0 l’elemento neutro di (K, +) allora (K \ {0}, ·) è un gruppo abeliano 3. Distributiva: a · (b + c) = a · b + a · c 51 3.3. Campi Finiti Capitolo 3. Crittografia Simmetrica ESEMPIO: (Z, +, ·) NO. Non è un campo perché manca la proprietà 3 del gruppo per la moltiplicazione. (Q, +, ·) SI (R, +, ·) SI (C, +, ·) SI Q, R, C sono tutti campi infiniti quindi non vanno bene per essere trattati da un computer. A noi servirebbe (Zm , +, ·), ma non sempre Zm e un gruppo perché manca l’inverso moltiplicativo; bisogna trovare un m che mi permette di avere tutti gli inversi moltiplicativi di tutti gli elementi in Zm . Già sappiamo che ∀a ∈ Zm a IN V ERT IBILE =⇒ gcd(a, m) = 1. Teorema 11. Zm è un campo ⇐⇒ m P RIM O Dimostrazione. La condizione gcd(a, m) = 1 ∀a < m si verifica esattamente quando m è primo. Il fatto che Zm sia un campo significa che posso fare sempre la divisione. L’ideale sarebbe avere un campo con 2k elementi, perché cosı̀ posso rappresentare tutti gli elementi del campo mediante una stringa binaria di k bit. Il problema è che Z2k non è un campo (con k > 1). 3.3.1 Costruzione di un campo finito Un campo finito con q = pk elementi si indica con Fq o con GF (q). PROBLEMA: Vogliamo costruire un campo che contenga pk elementi con p primo e k > 1. • Si parte da Zp = {0, 1, · · · , p − 1} • Si cerca un polinomio f (x) irriducibile su Zp di grado k • Si pone K = all’insieme dei polinomi di grado ≤ k (per comodità usiamo α non x). 52 3.3. Campi Finiti Capitolo 3. Crittografia Simmetrica • |K| = pk perché generalmente i polinomi sono della forma b0 + b1 α + b2 α2 , · · · , bk−1 αk−1 quindi pk possibilità di assegnamento dei valori bi . • Somma: Per la somma non ci sono problemi, infatti è la somma naturale. • Prodotto: Problemi perché facendo il prodotto naturale è possibile avere un polinomio di grado > k e quindi si esce dal campo. Si considera, dunque, il prodotto naturale e poi si riduce modulo f (x). ESEMPIO: p = 2, k = 3, pk = 8 • Z2 = {0, 1} • f (x) = x3 + x + 1. Per vedere se è irriducibile provo tutti i valori di Z2 e nessuno mi deve annullare il polinomio, il che significa che il polinomio non ha radici è quindi non è fattorizzabile. • K = {0, 1, α, α + 1, α2 , α2 + 1, α2 + α, α2 + α + 1} che nel computer posso rappresentare come {000, 001, 010, 011, 100, 101, 110, 111} in base a come prendo i bi • |K| = 8 perché i polinomi sono della forma b0 + b1 α + b2 α2 • Somma: (α2 + α) + (α + 1) = α2 + α + α + 1 = α2 + 1 cioè 110 ⊗ 011 = 101 • Prodotto: (α2 + α) · (α + 1) = α3 + α2 + α2 + α = α3 + α α3 + α ≡ 1 (mod α3 + α + 1) N.B.: Il prodotto non è l’∧ logico. Teorema 12. (K, +, ·) cosı̀ costruito è un campo con pk elementi. Per effettuare la divisione invece che farla veramente si possono calcolare preventivamente tutte le potenze fino a q − 1 e fare le divisioni per sostituzione, cioè: 53 3.3. Campi Finiti Capitolo 3. Crittografia Simmetrica α3 + α + 1 = 0 → α3 = α + 1 α4 = α · α3 = α(α + 1) = α2 + α α5 = α · α4 = α(α2 + α) = α3 + α2 = α2 + α + 1 α6 = α · α5 = α(α2 + α + 1) = α3 + α2 + α = α2 + 1 α7 = α · α6 = α(α2 + 1) = α3 + α = 1 Una volta trovato 1 possiamo fermarci tanto ritroveremo sempre polinomi già trovati. Una volta che ho queste informazioni, dopo aver fatto il prodotto naturale, per ogni monomio, riduco il grado a uno di questi fattorizzandolo, e poi applico le sostituzioni. N.B.: Se cambiamo polinomio irriducibile otteniamo due campi formalmente diversi; questi due campi però sono isomorfi, ossia c’è un modo univoco per associare un elemento del primo campo ad un elemento del secondo campo. Teorema 13. Due campi finiti con lo stesso numero di elementi sono isomorfi (hanno identiche proprietà matematiche). Questo significa avere diversità implementative nel senso che magari un polinomio piuttosto che un altro modifica il tempo necessario per fare i calcoli. Teorema 14. ∀p P RIM O, ∀k > 1 ∃ un polinomio irriducibile su Zp di grado k. (=⇒ ∀p P RIM O, ∀k > 1 ∃ un campo f inito con pk elementi) Teorema 15. Se q non è potenza di un numero primo allora non esiste un campo finito con q elementi. Elemento primitivo Sia Fq un campo finito con q = pk . Definizione 23. Sia ω ∈ Fq si dice primitivo se Fq = {ω, ω 2 , ω 3 , · · · , ω q−1 = 1} cioè gli altri elementi sono tutti sue potenze (esempio α di prima). Teorema 16. f (x) P RIM IT IV O (come polinomio) ⇐⇒ α è un’ elemento primitivo del campo finito costruito a partire da f. Dimostrazione. L’elemento primitivo α coincide con ω. 54 3.3. Campi Finiti Capitolo 3. Crittografia Simmetrica Teorema 17 (Dell’elemento primitivo). Un campo finito ammette sempre un elemento primitivo ⇐⇒ (Fq \ {0}, ·) è un gruppo ciclico. ESEMPIO: Gli elementi primitivi di Z7 sono: 1— NO (mai) 2— 2, 4, 1, 2 NO 3— 3, 2, 6, 4, 5, 1 SI 4— 4, 2, 1 NO 5— 5, 4, 6, 2, 3, 1 SI 6— 6, 1 SI L’inverso di un elemento lo possiamo trovare con l’algoritmo di Euclide, quello con le divisioni successive. ESEMPIO F9 : • q = 32 → p = 3, k = 2 • Z3 = {0, 1, 2} • f (x) = x2 + 1 • K = {0, 1, 2, α, α + 1, α + 2, 2α, 2α + 1, 2α + 2} 1 α+2 =? È l’elemento in F9 che moltiplicato per (α + 2) da 1. α2 + 1 = (α + 1) · (α + 2) + 2 55 3.4. DES (Data Encryption Standard) 3.4 Capitolo 3. Crittografia Simmetrica DES (Data Encryption Standard) DES è stato sviluppato dell’IBM, come modifica di un precedente cifrario chiamato Lucifer. Venne pubblica nei registri federali nel 1975. Rimase lo standard ufficiale fino al Gennaio 1999 quando venne crackato e rimpiazzato dall’AES. 3.4.1 Descrizione Il DES ha queste caratteristiche: • Key: 56 bit → |K| = 256 numero che non era trattabile negli anni ’70 ma che lo è diventato poi. • Lunghezza Blocco: 64 bit • N Round: 16 Funzione Round Quello che succede in ogni round è mostrato in Figura 3.8. Figura 3.8: Funzione Round Si divide il blocco in ingresso (64 bit) in due blocchi da 32 bit Li e Ri , e si applica la funzione round " # Li = Ri−1 Ri = Li−1 ⊗ f (Ri−1 , K i ) 56 3.4. DES (Data Encryption Standard) Capitolo 3. Crittografia Simmetrica La funzione round è invertibile anche se la f non lo è. Infatti " Ri−1 = Li Li−1 = Ri ⊗ f (Ri−1 , K i ) =⇒ Ri−1 = Li # Li−1 = Ri ⊗ f (Li , K i ) quindi il processo è globalmente invertibile. Non ho bisogno di calcolare f −1 , il che significa che può essere anche non iniettiva; inoltre l’algoritmo di cifratura e de-cifratura è lo stesso basta scambiare Li con Ri e viceversa. Il DES applica per 16 round questo schema (schema di Faistel). Prima dei 16 round viene applicata al plaintext una permutazione iniziale a chiave fissa, IP (x) = L0 R0 . Di conseguenza, dopo i 16 round, viene applicata IP −1 (y) = R16 L16 per mantenere la simmetria dell’algoritmo. L’applicazione di queste due permutazioni non ha nessun significato crittografico, cioè sono inutili non influenzano il livello di sicurezza dell’algoritmo. La funzione f : {0, 1}32 x {0, 1}48 → {0, 1}32 prende in input 32 bit e la round key. Il key schedule, (K 1 , K 2 , · · · , K 16 ), consiste di 16 round key di 48 bit ciascuna, derivare dai 56 della chiave master. L’output di tale funzione viene messo in ⊗ con Li−1 . Key Schedule Le 16 round key di 48 bit vengono generate a partire dalla master key (56 bit) tramite una selezione permutata. Funzione f La Funzione 3.9 mostra come funziona la f di cui si parlava prima. La funzione prende in ingresso un blocco di 32 bit e la raund key di 48 bit. Il blocco viene portato a 48 bit mediante la funzione di espansione E e poi viene messo in ⊗ con la chiave. Il tutto da origine a 48 bit che devono essere ridotti a 32. Questo viene fatto mediante l’uso di S-Box che prendono in input 6 bit e ne restituiscono 4. I 32 bit che ottengo li permuto con la permutazione a chiave fissa P . Espansione E: L’espansione del blocco chiamata E, non è altro che una ripetizione permutata dei 32 bit del blocco al quale vengono aggiunti, quindi ripetuti, 16 dei 32 bit. La tabella che regola questa funzione è la seguente: 57 3.4. DES (Data Encryption Standard) Capitolo 3. Crittografia Simmetrica Figura 3.9: Funzione f del DES Figura 3.10: Funzione E del DES 58 3.4. DES (Data Encryption Standard) Capitolo 3. Crittografia Simmetrica Questo significa che E è una funzione a chiave fissa. S-Box: Ogni S-Box è una funzione f : {0, 1}6 → {0, 1}4 Essa prende in input 6 bit, b0 , b1 , b2 , b3 , b4 , b5 e ne restituisce 4, secondo una regola fissa. Ogni S-Box implementa una diversa funzione, mentre nell’AES sono identiche. La Figura 3.11 mostra S2 . Figura 3.11: S2 - S-Box del DES b0 , b5 mi indicano la riga della tabella che devo guardare mentre b1 , b2 , b3 , b4 mi indicano la colonna. All’incrocio c’è il valore che deve essere restituito. ESEMPIO: 101101 → (11)2 = (3)10 e (0110)2 = (6)10 , quindi 3 riga e 6 colonna, tenendo conto che si parte da 0, quindi sarebbero 4 riga e 7 colonna. I 4 bit da restituire sono 0010. Da notare che la funzione f non è iniettiva proprio perché le S-Box non sono invertibili/iniettive, in quanto il condomino è più piccolo del dominio e quindi ci saranno valori ripetuti. Permutazione P: In uscita dalle S-Box avremo C = C<1> C<2> C<3> C<4> C<5> C<7> C<8> lunga 32 bit. A questi viene applicata la permutazione, a chiave fissa, P mostrata in Figura 3.12. Questo significa che C = c1 c2 c3 c4 · · · c32 diventa P (C) = c16 c7 c20 · · · c4 c25 . P (C) è finalmente l’output della funzione f . 59 3.4. DES (Data Encryption Standard) Capitolo 3. Crittografia Simmetrica Figura 3.12: Permutazione del DES 3.4.2 Analisi Trapdoor. Molti pensano che esista una “via d’uscita”, nel senso che chi inventò il cifrario ha previsto un metodo per decifrarlo in breve tempo avendo a disposizione certe risorse, è lo abbia detto solo al Dipartimento della Difesa Americana. Questo per motivi di sicurezza nazionale; nel senso che un comune hacker con limitate risorse e senza conoscere la trapdoor non può riuscire a crackarlo, e quindi poteva essere usato nelle transazioni commerciali; se però due terroristi si scambiavano informazioni tramite DES il Governo Americano riusciva a decifrare la comunicazione. Chiave 56 bit. Il maggiore problema è che la chiave è troppo corta. In realtà la chiave è lunga 64 bit ma 8 sono usati per il controllo di parità (sinceramente troppi due potevano anche bastare), e non si capisce il motivo. Negli anni ’70 non era possibile una ricerca esaustiva che esaminasse 256 possibili chiavi, ma dal 1999 in poi è diventato possibile. Prima sarebbero servite macchine del valore di milioni di dollari. Rispetto al precedente crittosistema, Lucifer, addirittura la chiave è stata ridotta da 128 a 56. Crittoanalisi Lineare. Di fatto è possibile. È stata studiata da Matsui (colui che la invento) ma non ebbe grande successo perché servono 243 coppie (x, y) e sono serviti 40 giorni per crearle e 10 per fare l’attacco. Un hacker non potrà mai avere una quantità di informazioni cosı̀ elevata. 60 3.4. DES (Data Encryption Standard) Capitolo 3. Crittografia Simmetrica Crittoanalisi Differenziale. Attualmente, è stato detto che le S-Box furono progettate cosı̀ proprio perché dovevano reggere ad alcuni tipi di attacchi. Quando Biham e Shamir inventarono, 20 anni dopo l’invenzione del DES, la tecnica della Crittoanalisi Differenziale si accorsero che questa era improponibile sul DES proprio per via delle S-Box. Questo significa che i ricercatori dell’IBM già conoscevano questa tecnica e l’hanno tenuta nascosta per 20 anni. 3.4.3 Varianti Doppio DES Raddoppio la chiave K = K1 K2 e applico il meccanismo due volte prima con K1 poi con K2 . Ossia EK2 (EK1 (X)) = Y Apparentemente questo risolve il problema, perché aumenta la complessità, infatti ora non è più proponibile (con gli strumenti di oggi) un attacco brute-force su 256 ·256 = 2112 possibili chiavi. In realtà è fragile all’attacco Meet in the middle. Esso è un attacco Known Plaintext. Funziona cosı̀: ∀(x, y) si calcolano tutti i possibili EK1 (X) e tutti i possibili DK2 (Y )∀ K1 , K2 . Si avrà che EK1 (X) = DK2 (Y ) è vero per tutte le coppie (x, y) solo per una coppia K1 , K2 che è la chiave. Chiaramente una sola coppia (x, y) non basta perché ci possono essere più K1 K2 che verificano la condizione, mentre crescendo il numero di coppie, la probabilità p(EK1 (X) = DK2 (Y )) diminuisce. Con una coppia sola p(EK1 (X) = DK2 (Y )) = 264 264 ·264 = 1 264 che sembra bassa, ma questo valore è la probabilità che prese a caso K1 e K2 si abbia EK1 (X) = DK2 (Y ) e quindi va moltiplicata per 2112 che è il numero delle possibili chiavi; si ottiene quindi: p(EK1 (X) = DK2 (Y )) = 1 · 2112 = 248 264 che è una probabilità molto elevata. Ma già con due coppie la probabilità decresce di molto infatti 61 3.4. DES (Data Encryption Standard) p(EK1 (X) = DK2 (Y )) = Capitolo 3. Crittografia Simmetrica 1 1 1 · 64 · 2112 = 2−16 = 16 64 2 2 2 3DES (Triplo DES) Si è capito che neanche il Doppio DES basta e quindi è stato creato il 3DES che è cosı̀ definito EK3 (EK2 (EK1 (X))) = Y Ossia ho tre chiavi da 56 bit, 168 in totale, che servono ha iterare il DES tre volte. La complessità comincia a diventare non trascurabile in quanto in totale sono 48 i round da fare. Se consideriamo che l’AES, che è lo standard attuale, ne effettua solo 10, capiamo che non vale la pena utilizzarlo, anche se (per il momento) non è stato trovato un attacco che lo viola. Dopotutto, visto che è già successo, nessuno ci vieta di pensare che tra qualche anno le risorse siano tali da rendere un attacco brute-force, su 2168 chiavi, proponibile. 62 3.5. AES (Advanced Encryption Standard) 3.5 Capitolo 3. Crittografia Simmetrica AES (Advanced Encryption Standard) Ne 1997 il NIST emise un bando per scegliere un algoritmo simmetrico che sarebbe diventato il nuovo standard e che avrebbe sostituito il precedente, cioè il DES. Il bando terminò l’anno successivo, ma fino al 2000 non si conobbe il vincitore; servirono 2 anni per decidere quale fosse l’algoritmo migliore. Venne scelto il Rijndael (dovuto ai nome degli inventori: Rijmen e Daemen, due ricercatori Olandesi), che diventò standard l’anno successivo. Gli algoritmi che raggiunsero la finale, oltre a questo, furono: MARS, RC6, Serpent e Twofish. 3.5.1 Caratteristiche Generali • Blocchi da 128 bit (16 byte) • Tipo SPN • Esistono 3 versioni 1. 128 bit → 10 round 2. 192 bit → 12 round 3. 256 bit → 14 round • È un cifrario orientato al byte (non al bit); un byte è identificato come un elemento di un campo finito, F256 . Per avere un campo di 256 elementi serve un polinomio irriducibile a coefficienti in Z2 di grado 8, perché 256 = 28 . Dal Teorema 13, sappiamo che non fa differenza quale tra i polinomi irriducibili si sceglie; infatti gli autori ne hanno scelto uno a caso e cioè f (x) = x8 + x4 + x3 + 1 Di conseguenza gli elementi del campo sono i polinomi di grado < 8. In generale al byte a7 a6 · · · a0 corrisponde f (x) = a7 x7 + a6 x6 + · · · + a0 • STATO: (Figura 3.13) è rappresentato mediante una matrice 4x4 che contiene 16 byte, cioè 16 elementi di F256 , quindi in totale 128 bit. 63 3.5. AES (Advanced Encryption Standard) Capitolo 3. Crittografia Simmetrica Figura 3.13: Stato AES 3.5.2 Struttura La struttura dell’AES è mostrata nella Figura 3.14. Come primo passaggio c’è il cosiddetto Processo di Whitening; esso prevede che vengano combinati i dati con porzioni della chiave mediante semplici operazioni di XOR, prima del primo passaggio di cifratura. Ogni round, tranne l’ultimo, prevede i seguenti passaggi: • Substitution Bytes, ed equivale alla fase di sostituzione presente nell’SPN. • Shift Rows, ed equivale alla permutazione. • Mix Columns, è una parte lineare e non è presente in un SPN classico. • XOR con la Round Key L’ultimo round differisce dai precedenti perché non effettua Mix Columns. 3.5.3 Substitution Bytes Questa fase è realizzata mediante S-Box. L’AES utilizza 16 S-Box uguali, ognuna che prende in input 1 byte, quindi S − Box : Z28 → Z28 . Ogni S-Box esegue questi passaggi: 1. Input: Riceve in input un byte che viene trasformato nel polinomio corrispondente α ∈ F256 . 2. Calcolo inverso: Viene calcolato 1 α (operazione fortemente non lineare). Poiché 0 non ha inverso esso viene restituito identico. 3. Conversione Polinomio α1 : 1 α diventa a7 a6 a5 a4 a3 a2 a1 a0 64 3.5. AES (Advanced Encryption Standard) Capitolo 3. Crittografia Simmetrica Figura 3.14: Struttura AES 65 3.5. AES (Advanced Encryption Standard) Capitolo 3. Crittografia Simmetrica 4. Esecuzione di una parte lineare: a7 a6 a5 a4 · a3 a2 a1 a0 11110001 11100011 11000111 10001111 + 00011111 00111110 01111100 11111000 1 1 0 0 = OU T P U T S − box 0 1 1 0 In realtà l’S-Box non svolge i calcoli ogni volta ma effettua una sostituzione avvalendosi della tabella in Figura 3.15, che è stata calcolata dagli autori. Figura 3.15: S-Box AES Teorema 18. Non esistono S-Box a 8 bit migliori di questa. Gli autori del Rijndael ha dimostrato questo teorema, e hanno mostrato che la massima polarizzazione possibile è 0, 1625. Questa è una polarizzazione molto bassa che non è sufficiente per portare a termine un attacco di crittoanalisi lineare. Gli autori hanno dovuto anche evitare, che ci fosse un cammino con poche S-Box attive. Infatti 66 3.5. AES (Advanced Encryption Standard) Capitolo 3. Crittografia Simmetrica avendo molte S-Box attive la polarizzazione della variabile decresce notevolmente in quanto è il prodotto delle polarizzazioni. Questo significa che per portare a termine un attacco di crittoanalisi lineare sull’AES servono 2150 coppie (x, y), che è un numero irragionevole. 3.5.4 Shift Rows Questa fase realizza la permutazione. Lo fa nel modo mostrato in Figura 3.16 Figura 3.16: Shift Rows La prima riga dello stato i-esimo rimane invariata; la seconda riga viene shiftata di una posizione verso sinistra; la terza di 2 e la quarta di 3. 3.5.5 Mix Columns È l’unica parte lineare. Serve per realizzare la cosiddetta diffusione, cioè fa aumentare il numero di S-Box attive in una crittoanalisi lineare. La prima matrice è quella che esce dallo Shift Rows e la seconda è una matrice fissa, rappresentata da polinomi. s0,0 s0,1 s0,2 s0,3 s s s s 1,0 1,1 1,2 1,3 s2,0 s2,1 s2,2 s2,3 s3,0 s3,1 s3,2 s3,3 x (x + 1) 1 1 1 x (x + 1) 1 · 1 1 x (x + 1) (x + 1) 1 1 x La moltiplicazione è fatta all’interno del campo. 3.5.6 Key Schedule Crea 11 Round Key da 128 bit a partire da una chiave master di 128 bit. La chiave può essere rappresentata dalla matrice 67 3.5. AES (Advanced Encryption Standard) Capitolo 3. Crittografia Simmetrica k0,0 k0,1 k0,2 k0,3 k k k k 1,0 1,1 1,2 1,3 k2,0 k2,1 k2,2 k2,3 k3,0 k3,1 k3,2 k3,3 Ci servirà anche la tabella Rcon che è la seguente e rappresenta una serie di costanti espresse in esadecimale. 01 02 04 08 10 20 40 80 1B 36 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Si lavora colonna per colonna in questo modo: indichiamo con Wi l’i-esima colonna della matrice di chiave. • Se Wi è la prima colonna di ogni round key allora Wi = (S − Box(ROT L1 (Wi−1 )) ⊗ Wi−4 ) ⊗ Rcon(j) Inizialmente j = 0, poi ad ogni iterata viene incrementato di uno. • Se Wi non è la prima colonna di ogni round key allora Wi = Wi−1 ⊗ Wi−4 68 3.6. Modi Operativi 3.6 Capitolo 3. Crittografia Simmetrica Modi Operativi • ECB Mode (Electronic CodeBook Mode): Classica modalità, in cui data una sequenza x1 x2 · · · xn di blocchi in chiaro, ogni xi viene cifrato con la stessa chiave K, producendo y1 y2 · · · yn . • CBC Mode (Cipher Block Chaining): Ogni blocco cifrato yi è messo in XOR con il blocco in chiaro successivo, prima di essere cifrato con la chiave K. Formalmente si utilizza un initialization vector IV = y0 , e si usa la seguente regola yi = eK (yi−1 ⊗ xi ) • OFB Mode (Output FeedBack Mode):Simile ad uno stream cipher. Il keystreem è generato a partire da un IV; si pone z0 = IV poi si segue la regola zi = eK (zi−1 ) La sequenza in chiaro viene poi cifrata seguendo la regola yi = xi ⊗ zi • CFB Mode (Cipher FeedBack Mode): È simile al precedente solo che IV = y0 . Il keystream segue la regola zi = eK (yi−1 ) Per cifrare si usa la regola yi = x i ⊗ zi 69 Capitolo 4 Funzioni Hash Crittografiche 4.1 Funzioni Hash e Data Integrity Una funzione hash crittografica è utilizzata per preservare l’integrità dei dati, autenticazione e firma digitale. Essa viene usata per costruire un fingerprint o un message digest, che è un estratto di un dato; se il dato viene alterato il fingerprint non sarà più valido in quanto un ricalcolo della stessa funzione hash sul dato alterato produrrà un diverso fingerprint. Sia h la funzione hash e x un dato qualsiasi. Il corrispondente fingerprint è dato da h(x) = y. Tipicamente l’estratto della funzione hash è di lunghezza finita e minore del dato originario: comunemente 160 bit. Le funzioni hash ricoprono un ruolo importante in quello che è il meccanismo della firma digitale. Esistono, anche, funzioni hash che utilizzano una chiave per effettuare il calcolo; esse vengono dette funzioni MAC (Message Authentication Code). Definizione 24 (Hash Family). Una hash family è una quaterna (X , Y, K, H) dove le seguenti condizioni sono soddisfatte: • X è l’insieme dei possibili messaggi • Y è l’insieme finito dei possibili message digest • K è il keyspace, cioè l’insieme finito delle possibili chiavi • H l’insieme delle possibili funzioni hash • ∀K ∈ K ∃hK ∈ H t.c. hK : X → Y In questa definizione X può essere finito o infinito, mentre Y è sempre finito. Nel caso in cui X fosse finito la funzione hash è chiamata funzione di compressione. In questa situazione assumiamo che |X | ≥ |Y|, ma nel proseguo assumeremo una condizione più restrittiva |X | ≥ 2|Y|. Una coppia (x, y) ∈ X xY si dice valida, sotto una chiave K, se hK (x) = y. 70 4.2. Sicurezza di una funzione hash Capitolo 4. Funzioni Hash Crittografiche Indichiamo con F X ,Y l’insieme di tutte le possibili funzioni che vanno da X a Y. Supponiamo che |X | = N e |Y| = M , allora |F X ,Y | = M N . Qualunque hash family F ⊆ F X ,Y è chiamata (N, M ) − hash f amily. Una funzione hash keyless è una funzione h : X → Y con X , Y gli stessi della Definizione 24; si può vedere come una funzione hash dove c’è solo una possibile chiave, quindi |K| = 1. 4.2 Sicurezza di una funzione hash Supponiamo che h : X → Y sia una funzione senza chiave, dove X = Z2n e Y = Z2m con n > m. Sia x ∈ X e y = h(x) ∈ Y. In molte applicazioni crittografiche delle funzioni hash, si desidera avere un solo modo per produrre una coppia (x, y) che è quello di fissare x e calcolare y = h(x), applicando semplicemente la funzione h su x. Ora definiremo 3 problemi; se una funzione hash è definita sicura allora dovrebbe essere difficile risolvere questi 3 problemi. Problema 1 (Preimage o Controimmagine). Data una funzione hash h : X → Y e un elemento y ∈ Y trovare x ∈ X t.c. h(x) = y. Dato un possibile message digest y, il problema Preimage chiede se x può essere trovato in modo tale da avere h(x) = y. Se tale problema può essere risolto, allora è stata trovata una coppia (x, y) valida. Una funzione hash, tale che il problema Preimage non può essere risolto in modo efficiente, è detta one-way o Preimage resistant. Problema 2 (Second Preimage o Seconda Controimmagine). Data una funzione hash h : X → Y e un elemento x ∈ X trovare x0 ∈ X t.c. x0 6= x∧h(x0 ) = h(x). Dato un messaggio x, il problema Second Preimage, chiede se è possibile trovare un altro messaggio x0 6= x tale che si abbia lo stesso message digest. Da notare che se è possibile risolvere tale problema significa che la coppia (x0 , h(x)) è valida. Una funzione hash, per la quale non è possibile risolvere in modo efficiente il problema Second Preimage, viene detta Second Preimage resistant. Problema 3 (Collision). Data una funzione hash h : X → Y trovare x, x0 ∈ X t.c. x0 6= x ∧ h(x0 ) = h(x). 71 4.2. Sicurezza di una funzione hash Capitolo 4. Funzioni Hash Crittografiche Il problema Collision chiede se è possibile trovare due messaggi diversi che mi danno lo stesso message digest. La soluzione del problema genera due coppie valide (x, y) e (x0 , y). Una funzione hash, per la quale non è possibile risolvere in modo efficiente il problema Collision, viene detta Collision resistant. 4.2.1 Random Oracle Model In questa sezione descriviamo un modello ideale di funzione hash. Se una funzione h è ben formata, si dovrebbe avere che l’unico modo efficiente per determinare h(x) sia proprio quello di valutare la funzione h in x. Chiaramente, questo deve rimanere vero anche se molti altri valori, h(x1 ), h(x2 ), · · · , h(xm ), sono già stati calcolati. Vediamo un esempio dove questa proprietà non è verificata. Supponiamo che h : Zn xZn → Zn sia la funzione lineare h(x, y) = ax + by (mod n) con a, b ∈ Zn e n ≥ 2 ∈ Z (intero). Supponiamo di aver ottenuto i valori h(x1 , y1 ) = z1 e h(x2 , y2 ) = z2 Siano r, s ∈ Zn , quindi avremo che h(rx1 + sx2 (mod n), ry1 + sy2 (mod n)) = a(rx1 + sx2 ) + b(ry1 + sy2 ) = r(ax1 + by1 ) + s(ax2 + by2 ) = rh(x1 , y1 ) + sh(x2 , y2 ) (mod n) (mod n) (mod n) Di conseguenza accade che, conoscendo due coppie valide, possiamo conoscere i message digest di altri messaggi senza applicare la funzione hash a tali messaggi. Il random oracle model, che fu introdotto da Bellare e Rogaway, fornisce un modello matematico di una funzione hash ideale. In questo modello, una funzione hash h : X → Y viene scelta a caso da F X ,Y , e viene permesso solo all’oracolo di accedere a tale funzione. Questo significa che non c’è un algoritmo o una formula che identifica h, e quindi l’unico modo per conoscere h(x) è interrogare l’oracolo. 72 4.2. Sicurezza di una funzione hash Capitolo 4. Funzioni Hash Crittografiche Chiaramente l’oracolo nella realtà non esiste; si può solo sperare che la funzione hash si comporti come un random oracle. Come conseguenza delle assunzioni fatte nel random oracle model, è ovvio che la seguente proprietà sia soddisfatta: Teorema 19. Sia h ∈ F X ,Y scelta casualmente, e sia X0 ⊆ X . Supponiamo che il valore h(x) sia già stato determinato (consultando un oracolo), se e solo 1 se x ∈ X0 . Allora p(h(x) = y) = M ∀x ∈ X \ X0 e ∀y ∈ Y. 4.2.2 Algoritmi nel Random Oracle Model Gli algoritmi che verranno descritti sono algoritmi randomizzati, ossia possono effettuare scelte random durante la loro esecuzione. L’algoritmo Las Vegas è uno di questi; esso può terminare senza aver trovato una soluzione ma se restituisce una soluzione di sicuro è corretta. Supponiamo 0 ≤ < 1 la probabilità che l’algoritmo restituisca la risposta corretta. In questa sezione useremo la notazione (, Q) − algorithm per indicare un algoritmo con probabilità di successo nel caso medio pari a che effettua al più Q interrogazioni all’oracolo. Consideriamo gli Algoritmi 4.1 e 4.2 che risolvono i primi due problemi. 73 4.2. Sicurezza di una funzione hash Capitolo 4. Funzioni Hash Crittografiche Teorema 20. Per ogni X0 ⊆ X con |X0 | = Q, la probabilità di successo nel caso medio, dell’Algoritmo 4.1, è 1 =1− 1− M Q f avorevoli (6=y) 1 Dimostrazione. Sia y ∈ Y fissato. Sia MM−1 = 1 − M = #casi la prob#casi possibili abilità che l’algoritmo fallisca, avendo effettuato una sola interrogazione all’oracolo. 1 Q Poichè faccio Q interrogazioni la probabilità diventa 1 − M . Quindi la probabilità 1 Q di successo è = 1 − 1 − M . Da notare che la precedente probabilità si approssima a Q M. Teorema 21. Per ogni X0 ⊆ X \x con |X0 | = Q−1, la probabilità di successo, dell’Algoritmo 4.2, è 1 Q−1 =1− 1− M Consideriamo l’Algoritmo 4.3 che risolve il terzo problema. Questo algoritmo è analizzato utilizzando una probabilità analoga al paradosso del compleanno. Questo dice che basta un gruppo di 23 persone per avere una probabilità pari a 1 2 di avere due persone che sono nate lo stesso giorno. Supponiamo che la funzione h ha come dominio l’insieme degli esseri umani viventi, e ∀x h(x) è il relativo compleanno. Trovare due persone con lo stesso compleanno equivale a trovare una collisione nella funzione hash. In questo caso, il paradosso del compleanno, dice che l’Algoritmo 4.3 ha probabilità di successo pari a 1 2 quando Q = 23 e M = 365. Teorema 22. Per ogni X0 ⊆ X \ x con |X0 | = Q, la probabilità di successo, dell’Algoritmo 4.3, è M −1 M −2 M −Q+1 =1− ··· M M M 74 4.2. Sicurezza di una funzione hash Capitolo 4. Funzioni Hash Crittografiche Dimostrazione. Sia X0 = {x1 , · · · , xQ }. Per ogni 1 ≤ i ≤ Q, sia Ei l’evento 00 h(xi ) ∈ / {h(x1 ), · · · , h(xi−1 )}00 p(Ei | E1 ∧ E2 ∧ · · · ∧ Ei−1 ) = M −i+1 M per 2 ≤ i ≤ Q. Quindi, si ha che M −1 M −2 M −Q+1 p(E1 ∧ E2 ∧ · · · ∧ EQ ) = ··· M M M La probabilità che si abbia almeno una collisione è 1 − p(E1 ∧ E2 ∧ · · · ∧ EQ ). Teorema 23 (Paradosso del Compleanno). Nel modello “random oracle” q 1 interrogazioni per avere una collisione con sono sufficienti Q = 2M ln 1− probabilità ≥ . Dimostrazione. Il Teorema 22 dice che la probabilità di non trovare nessuna collisione è 2 Q−1 i 1 Q−1 1− ··· 1 − = Πi=1 1 − 1− M M M M Pongo x = Mi . Se x è un numero reale piccolo, allora 1 − x ' e−x . Questa stima è derivata prendendo i primi due termini dell’espansione in serie x2 x3 − ··· 2! 3! Usando questa stima la probabilità di non trovare collisioni si approssima a i Q−1 ( −i M) Πi=1 1 − ' ΠQ−1 i=1 e M e−x = 1 − x + Per una proprietà delle potenze, il prodotto di potenze con uguale base è identico all’elevare la base alla la somma degli esponenti. Quindi e− PQ−1 i=1 i M =e −Q(Q−1) 2M Di conseguenza la probabilità di trovare almeno una collisione è 1−e −Q(Q−1) 2M Se noi chiamiamo questa probabilità con , segue che e −Q(Q−1) 2M '1−→ −Q(Q − 1) ' ln(1 − ) 2M 75 4.2. Sicurezza di una funzione hash Capitolo 4. Funzioni Hash Crittografiche 1 1− Se infine trascuriamo il termine −Q otteniamo r 1 Q ' 2M ln 1− Q2 − Q ' 2M ln Tornando al paradosso del compleanno, se prendiamo = 1 2 √ avremo Q ' 1.17 M , e dato che M = 365, Q ' 22.3. Quindi, come detto precedentemente, basta prendere 23 persone a caso per averne, con probabilità 1 2, almeno 2 tra di loro con lo stesso compleanno. L’attacco compleanno impone un lower bound alla grandezza del message digest. Un digest di 40 bit è molto insicuro, in quanto una collisione può essere trovata, con probabilità 1 2, con solo 220 (circa un milione) di hash casuali. La grandezza minima accettabile e 128 bit (264 hash) ma è raccomandato usare una dimensione ≥ 160. 4.2.3 Comparazione dei criteri di sicurezza Nel random oracle model, abbiamo visto che risolvere il problema della Collision è più facile che risolvere gli altri problemi. La domanda successiva è vedere se esiste una riduzione tra i tre problemi che può essere applicata ad una funzione hash arbitraria. È abbastanza facile vedere che si può ridurre il problema Collision al problema Second Preimage usando l’Algoritmo 4.4. Supponiamo che ORACLE-2ND-PREIMAGE è un (, Q) − algorithm che risolve il problema Second Preimage per una funzione hash fissata. Se ORACLE-2ND- PREIMAGE restituisce un valore x0 dato l’input (h, x), allora si ha che x0 6= x, perché tale algoritmo è di tipo Las Vegas. Come conseguenza, è chiaro che COLLISION-TO- 76 4.2. Sicurezza di una funzione hash Capitolo 4. Funzioni Hash Crittografiche 2ND-PREIMAGE è un (, Q) − algorithm che risolve il problema Collision per la stessa funzione hash. Questo significa che Collision Resistant =⇒ Second P reimage Resistant. Una domanda più interessante è se è possibile ridurre il problema Collision al problema Preimage. Questo è possibile se un algoritmo che risolve il problema Preimage con probabilità 1, viene usato per risolvere il problema Collision. Questa riduzione può essere fatta con certe assunzioni. Assumiamo che la funzione h : X → Y abbia X e Y, due insiemi finiti e che |X | ≥ 2|Y|. Supponiamo inoltre che ORACLE-PREIMAGE sia un (1, Q) − algorithm che risolve il problema Preimage. ORACLE-PREIMAGE prende in input un message digest y ∈ Y, e trova sempre un elemento ORACLE −P REIM AGE(y) ∈ X tale che h(ORACLE −P REIM AGE(y)) = y. Teorema 24. Supponiamo che h : X → Y sia una funzione hash con X e Y due insiemi finiti tale che |X | ≥ 2|Y|. Supponiamo che ORACLE-PREIMAGE sia un (1, Q) − algorithm che risolve Preimage, per una funzione fissata. Allora COLLISION-TO-PREIMAGE è un ( 21 , Q + 1) − algorithm che risolve Collision, per la funzione fissata. Questo significa che Collision Resistant =⇒ P reimage Resistant. 77 4.3. Funzioni Hash Iterative 4.3 Capitolo 4. Funzioni Hash Crittografiche Funzioni Hash Iterative Il problema implementativo delle funzioni hash è che devono trattare stringhe o file potenzialmente infiniti e comprimerli in 160 bit. Supponiamo che compress : Z2m+t → Z2m è una funzione di compressione collision resistant. 4.3.1 Costruzione Merkle-Damgard (MD) • compress : Z2m+t → Z2m • Suddivido: Data una stringa x t.c.|x| ≥ m + t + 1 bit la suddivido in blocchi di t − 1 bit con t ≥ 2. x = x1 || x2 || x3 || · · · || xk • Padding: Tutti gli xi sono di lunghezza t − 1 tranne forse xk che può essere |xk | ≤ t − 1. In questo caso riempo xk con tanti 0 quanti ne servono per raggiungere |xk | = t − 1. Considero, dunque, x̄ = x̄1 || x̄2 || x̄3 || · · · || x̄k || x̄k+1 Inserisco un ulteriore blocco x̄k+1 che è la rappresentazione binaria di t − 1 − |xk | cioè del numero di 0 che ho aggiunto. • Esecuzione: Pongo IV = 0000 · · · 0 → m + 1 bit Z1 = IV || x̄1 Z2 = compress(Z1 ) || 1 || x̄2 .. . Zi+1 = compress(Zi ) || 1 || x̄i+1 .. . Zk = compress(Zk−1 ) || 1 || x̄k Zk+1 = compress(Zk ) || 1 || x̄k+1 h(x) = compress(Zk+1 ) 78 4.3. Funzioni Hash Iterative Capitolo 4. Funzioni Hash Crittografiche Teorema 25 (Compress). Se compress è resistente alle collisioni, allora lo è anche h. Dimostrazione. Se ho x 6= x0 con h(x) = h(x0 ) allora trovo s e s0 tali che compress(s) = compress(s0 ). Supponiamo che x 6= x0 siano tali che h(x) = h(x0 ). Distinguiamo 3 casi: • Caso 1 : Se |x| 6≡ |x0 | (mod t − 1) (la differenza non è multiplo di t − 1). |x| 6≡ |x0 | (mod t − 1) ⇐⇒ |xk | = 6 |x0k | ⇐⇒ x̄k+1 6= x̄0k+1 h(x) = compress(compress(Zk ) || 1 || x̄k+1 ) h(x0 ) = compress(compress(Zk0 ) || 1 || x̄0k+1 ) Dato che h(x) = h(x0 ) allora trovo anche due sequenze lunghe m + t con stesso compress, ma invece s = compress(Zk ) || 1 || x̄k+1 s0 = compress(Zk0 ) || 1 || x̄0k+1 che sono diverse; quindi ho trovato una collisione. • Caso 2 : Se |x| ≡ |x0 | (mod t − 1) e |x| = |x0 | In questo caso è uguale anche l’ultimo blocco, e quindi anche il numero di passi. Poiché x 6= x0 deve esserci almeno una volta che Zi 6= Zi0 . Quindi: 0 ∃ Zi 6= Zi0 ∧ Zj = Zj0 ∀j > i =⇒ Zi+1 = Zi+1 =⇒ compress(Zi ) || 1 || x̄i+1 = compress(Zi0 ) || 1 || x̄0i+1 =⇒ compress(Zi ) = compress(Zi0 ) Ho trovato lo stesso valore di compress per due diversi input. • Caso 3 : Se |x| ≡ |x0 | (mod t − 1) e |x| < |x0 | In questo caso le due sequenze saranno cosı̀ fatte: x x0 Z10 79 4.3. Funzioni Hash Iterative Capitolo 4. Funzioni Hash Crittografiche Z20 .. . Z1 0 Z1+h Z2 0 Z2+h .. . Zk Zk+1 0 Zk+h 0 Zk+1+h 0 0 Poiché x 6= x0 deve esserci almeno una volta che Zi 6= Zi+h ∧ Zi+1 = Zi+h+1 allora 0 Zi+1 = Zi+h+1 =⇒ 0 ) || 1 || x̄i+h+1 compress(Zi ) || 1 || x̄i+1 = compress(Zi+h Ho trovato ancora una collisione per compress. 0 non siano mai diverse allora Supponiamo che Zi e Zi+h 0 Z2 = Z2+h =⇒ 0 compress(Z1 ) || 1 || x̄2 = compress(Z1+h ) || 1 || x̄2+h =⇒ 0 0 ) ) =⇒ compress(000 · · · 0 || x̄1 ) = compress(Z1+h compress(Z1 ) = compress(Z1+h Ho trovato una collisione comunque in quanto al secondo membro non siamo al primo passo quindi non saranno tutti 0; in particolare l’ultimo della sequenza è 1 di sicuro per via di come è costruito il metodo. 4.3.2 SHA-1 (Secure Hash Algorithm) SHA è lo standard NIST per le funzioni hash. Si basa sullo schema visto precedentemente. Le caratteristiche sono: • m = 160 • t = 512 • compress : Z2512+160 → Z2160 • Limitazione: |x| ≤ 264 − 1 ' 1, 8 · 1019 . Se si considera che 1Gb ' 1010 , x può essere al massimo 2 miliardi di Gb (non è alla fine una grande limitazione). 80 4.3. Funzioni Hash Iterative Capitolo 4. Funzioni Hash Crittografiche Questo succede per via del padding. Infatti l’ultimo blocco è di lunghezza 448 bit ed è composto da un 1 in prima posizione e da tutti 0. A questo viene aggiunta la rappresentazione binaria di |x| che al massimo può essere lunga 64 bit (512−448). La figura seguente mostra in dettaglio l’algoritmo. La differenza che c’è tra SHA-0 e SHA-1 è che nel secondo è stata introdotta la rotazione dei bit. 81 4.3. Funzioni Hash Iterative 4.3.3 Capitolo 4. Funzioni Hash Crittografiche MAC (Message Authentication Codes) Consiste nell’uso delle funzioni hash nei processi di autenticazione. Si fa l’hash di un file concatenato ad una chiave segreta. Solo chi conosce la chiave corretta può ricalcolare il giusto hash. L’idea banale è che invece di impostare IV = 000 · · · 0, lo si imposta IV = k. Questa soluzione però non funziona, in quanto l’hacker senza conoscere la chiave è in grado di mandare un secondo messaggio autentico. Se l’hacker effettua n ulteriori iterazioni di compress sull’hash spedito al destinatario, quello che ne risulta è un hash ancora valido; questo perché implicitamente utilizza la chiave segreta. Formalmente questa soluzione è definita cosı̀ h(k, x) = SHA − 1(k || x) Dato h(k, x) l’hacker può calcolare h(h(k, x) || x0 ) = compress(h(k, x) || x0 ), che è ancora un hash valido. Una soluzione sicuramente migliore è attaccare la chiave anche in fondo. Comunque quella definita come standard è il double hashing o HMAC. Esso è uno standard dal 2002. È cosı̀ definito: HM ACk (x) = SHA − 1((K ⊗ opad) || SHA − 1((K ⊗ ipad) || x)) dove ipad = 3636 · · · 36 e opad = 5C5C · · · 5C MAC Incondizionatamente Sicuri Incondizionatamente sicuri significa sicuri dal punto di vista formale (matematico). Un sistema di autenticazione MAC e una quaterna (X , Y, K, H) dove: • X : l’insieme dei possibili messaggi • Y: l’insieme delle etichette (o tag, o digest) • K: l’insieme delle possibili chiavi • H: famiglia di funzioni hash. H = {hK : X → Y | k ∈ K} (C’è una funzione per ogni chiave). Gli attacchi ad un sistema di autenticazione sono due tipi: 82 4.3. Funzioni Hash Iterative Capitolo 4. Funzioni Hash Crittografiche 1. Impersonification: Dal nulla l’hacker crea una coppia (x, y), la invia al destinatario sperando che venga accettata. y = hk0 (x) l’hacker spera di aver scelto la giusta k0 . 2. Substitution: L’hacker vede passare un messaggio, quindi conosce (x, y) con y = hk0 (x), e invia un’altra coppia (x0 , y 0 ) sperando che y 0 = hk0 (x0 ). Per descrivere un sistema del genere ci avvaliamo di una matrice di autenticazione, simile alla matrice di codifica già utilizzata. Le colonne sono identificate dai possibili messaggi, mentre le righe dalle possibili chiavi; all’incrocio della riga i-esima e della colonna j-esima c’è hki (xj ) = yij , ossia l’etichetta del messaggio xj creata con la chiave ki . ESEMPIO 1: X = Z3 = {0, 1, 2} Y = Z3 K = Z32 Confrontiamo due matrice di autenticazione; la prima è data dalla figura seguente, creata dalla funzione h(a,b) = ax + b (mod 3). la seconda è questa creata casualmente Vediamo quale delle due è migliore, dal punto di vista dei due attacchi: • Impersonification: Nella prima p((x, y) ACCET T AT A) = 1 3 ∀x ∈ X , ∀y ∈ Y. Nella seconda varia; per esempio p((0, 0) ACCET T AT A) = 1. L’hacker ha una sola possibilità di scelta che è k = (0, 2). La migliore delle due è senza dubbio la prima. 83 4.3. Funzioni Hash Iterative Capitolo 4. Funzioni Hash Crittografiche • Substitution: L’hacker vede passare la coppia (0, 1). L’obiettivo è trovare un altro messaggio con un’altra etichetta valida. Nella prima, le chiavi possibili sono 3, quindi la probabilità che il destinatario accetti la nuova etichetta e 3 9 = 13 . Nella seconda, le chiavi possibili sono 6; se l’hacker manda (1, 2) la probabilità che il destinatario la accetti è 65 . Quindi ancora una volta la prima è la migliore. Formalizziamo, dunque, quando una funzione hash è ottima. Impersonification. Definiamo P AY OF F (x, y) come la probabilità che (x, y) sia accettata. L’obiettivo è garantire che il massimo PAYOFF sia il più basso possibile. P AY OF F (x, y) = |{k ∈ K | hk (x) = y}| |K| Fissiamo y e facciamo variare solo x. Conto le chiavi che mandano le x nella y fissata. In pratica conto tutte le chiavi. X P P AY OF F (x, y) = y∈Y |{k ∈ K | hk (x) = y}| |K| y∈Y La somma di tutti i PAYOFF al variare di y è 1. 84 = |K| =1 |K| 4.3. Funzioni Hash Iterative Capitolo 4. Funzioni Hash Crittografiche =⇒ Almeno un valore di x è tale che P AY OF F (x, y) ≥ 1 |Y| sommo, e tutti sono < 1 |Y| . Questo perché se li non arrivo a 1; quindi max{P AY OF F (x, y)} ≥ In particolare vale = quando ogni P AY OF F (x, y) = 1 |Y| . 1 |Y| . Questo è il caso migliore perché non ce n’è uno che prevale sugli altri, come succedeva nella prima funzione dell’ESEMPIO 1. Substitution . P AY OF F (x0 , y 0 , x, y) è la probabilità che la coppia (x0 , y 0 ) sia accettata sapendo che (x, y) lo è. L’obiettivo è che il massimo di questi P AY OF F (x0 , y 0 , x, y) sia il più piccolo possibile. P AY OF F (x0 , y, x, y) = p((x0 , y 0 ) ACCET T AT A | (x, y) ACCET T AT A) = p((x0 , y 0 ) ACCET T AT A) ∧ (x, y) ACCET T AT A = p((x, y) ACCET T AT A) |{k∈K | y 0 =hk (x0 )∧y=hk (x)}| |K| |{k∈K | y=hk (x)}| |K| = |{k ∈ K | y 0 = hk (x0 ) ∧ y = hk (x)}| |{k ∈ K | y = hk (x)}| Come prima facciamo variare y 0 è contiamo le chiavi che verificano il numeratore. X P 0 0 P AY OF F (x , y , x, y) = y 0 ∈Y |{k ∈ K | y 0 = hk (x0 ) ∧ y = hk (x)}| |{k ∈ K | y = hk (x)}| y 0 ∈Y = |{k ∈ K | y = hk (x)}| =1 |{k ∈ K | y = hk (x)}| Come prima, il massimo max{P AY OF F (x0 , y 0 , x, y)} ≥ 1 |Y| Definizione 25 (Strongly Universal). Dato (X , Y, K, H) si dice Strongly Universal se valgono due proprietà: a) P AY OF F (x, y) = 1 |Y| ∀x ∈ X , ∀y ∈ Y b) P AY OF F (x0 , y 0 , x, y) = 1 |Y| ∀x, x0 ∈ X e ∀y, y 0 ∈ Y 85 4.3. Funzioni Hash Iterative Capitolo 4. Funzioni Hash Crittografiche Teorema 26 (Condizione equivalente). Una quaterna (X , Y, K, H) è STRONGLY UNIVERSAL ⇐⇒ ∀x, x0 ∈ X , x 6= x0 , ∀y, y 0 ∈ Y |{k ∈ K | hk (x) = y ∧ hk (x0 ) = y 0 }| = |K| |Y|2 Prese comunque x 6= x0 , y e y 0 il numero di chiavi che mandano x in y e x0 in y 0 sono |K| . |Y|2 Nell’ESEMPIO 1, k = 9 e y = 3 cioè 9 9 = 1 chiave. Se proviamo a controllare risulta proprio 1 quindi la prima tabella rappresenta un sistema MAC Strongly Universal. Dimostrazione. ⇐= a) P AY OF F (x, y) = |{k ∈ K | hk (x) = y}| = |K| |{k ∈ K | hk (x) = y}| |K| 0 0 y 0 ∈Y |{k ∈ K | y = hk (x ) ∧ y = hk (x)}| P P |K| |Y| · |K| |Y|2 |K| = |K| |Y| |K| = y 0 ∈Y = |K| |K| 1 1 · = |Y| |K| |Y| b) |{k ∈ K | hk (x) = y ∧ hk (x0 ) = y 0 }| P AY OF F (x , y , x, y) = = |{k ∈ K | hk (x) = y}| 0 0 |K| |Y| 1 · = |Y|2 |K| |Y| Generalizziamo l’ESEMPIO 1. X = Zp con p primo. Y = Zp K = Zp2 h(a,b) (x) = ax + b (mod p) Proposizione 2. Questa famiglia è Strongly Universal. 86 |K| |Y|2 |K| |Y| = |K| |Y|2 = 4.3. Funzioni Hash Iterative Capitolo 4. Funzioni Hash Crittografiche Dimostrazione. Fisso x, x0 , y, y 0 ∈ Zp ; cerco k = (a, b) ∈ Zp2 tali che ax + b = y 0 0 h(a,b) (x) = y ∧ h(a,b) (x ) = y = ax0 + b = y 0 Questo è un sistema lineare con 2 incognite (a e b). Si ha che x 1 det = x − x0 x0 1 x − x0 6= 0 perché x 6= x0 . Quindi ho un sistema di Kramer a una soluzione. Ho trovato una sola chiave infatti |K| = p2 =1 |Y 2 | = p2 Non ha senso applicare questo sistema, perché le possibili chiavi sono molte di più dei possibili messaggi. ESEMPIO 2: X = Z2l \ {0̄} Y = Zp K = Zpl hk (x) = h(k1 ,k2 ,···,kl ) (x1 , x2 , · · · , xl ) = k1 x1 + k2 x2 + · · · + kl xl (mod p). Anche in questo caso abbiamo più chiavi che messaggi, quindi non è applicabile, comunque, calcoliamo preventivamente |K| pl = = pl−2 |Y|2 p2 Conto le chiavi (k1 , · · · , kl ) tali che h(k1 ,···,kl ) (x1 , · · · , xl ) = y ∧h(k1 ,···,kl ) (x01 , · · · , x0l ) = y 0 al variare di y e y 0 . ( h(k1 ,···,kl ) (x1 , · · · , xl ) = y h(k1 ,···,kl ) (x01 , · · · , x0l ) = y0 ( = k1 x1 + k2 x2 + · · · + kl xl (mod p) = y k1 x01 (mod p) = y 0 + k2 x02 La matrice dei coefficienti è x1 x2 · · · xl x1 x2 · · · xl 87 ! + ··· + kl x0l 4.3. Funzioni Hash Iterative Capitolo 4. Funzioni Hash Crittografiche Per il teorema di Rouche-Capelli ha rango 2 quindi pl−2 soluzioni. Teorema 27. Un sistema (X , Y, K, H) che si Strongly Universal non è praticabile perché |K| ≥ |X | · |Y| Abbiamo ottenuto lo stesso risultato del ONE-TIME-PAD; abbiamo potenzialmente un sistema perfetto ma non lo possiamo usare. Ci dobbiamo accontentare di famiglie -Strongly Universal. Definizione 26. (X , Y, K, H) si dice -Strongly 1 P AY OF F (x, y) = P AY OF F (x0 , y 0 , x, y) = |Y| ≤ È possibile costruire una famiglia che sia 1 -Strongly 219 Universal se Universal con 17 • X = 22 • Y = 220 • K = 284 In conclusione rinunciamo ad un minimo di sicurezza per avere una maggiore praticabilità. In realtà ancora non ci sono gli strumenti neanche per realizzare un sistema 1 -Strongly 219 4.3.4 Universal. Un pò di storia • 1990 → MD4 (Rivest) • 1992 → MD5 • Primo standard 1993 → SHA-0 • 1995 → SHA-1 SHA − 256 SHA − 384 • 2002 → SHA-2 SHA − 512 SHA − 224 • È in corso la gara per SHA-3 88 Capitolo 5 Crittografia Asimmetrica 5.1 Introduzione La crittografia è sempre stata presente, fin dai tempi antichi, ma il suo utilizzo è diventato indispensabile nella nostra epoca perché sono aumentate le comunicazioni. Il problema della crittografia simmetrica è che prima che il messaggio sia trasmesso, mittente e destinatario devono incontrarsi e mettersi d’accordo non solo sul metodo di cifratura, ma anche e soprattutto sulla chiave segreta da utilizzare. Oggi questo non è più possibile. Basti pensare agli acquisti su internet; se si vuole comprare un oggetto in America, prima si deve andare in America per accordarsi sulla chiave. È una cosa senza senso. Supponiamo che questo non sia un problema allora dovremmo mettere in piedi un sistema di scambio di chiavi, che non può risultare efficiente. Prendiamo l’esempio della chat. Se n sono i componenti della chat e, potenzialmente si vuol far comunicare tutti con tutti, si dovrebbe creare un sistema che permetta di scambiare N ◦ Chiavi = (n − 1) + (n − 2) + (n − 3) + · · · + 1 = n−1 X k=1 k= n(n − 1) 2 Già in una semplice chat il numero è grande; quando la popolazione è enorme, come in internet, il metodo diventa impraticabile. La crittografia asimmetrica nasce per porre rimedio a questo problema. Essa distingue il metodo di cifratura da quello della decifratura. La chiave per la fase di crifratura è pubblica, cioè conosciuto da tutti quindi anche dall’hacker. La chiave per la seconda è noto solo al destinatario. In teoria un sistema del genere non è possibile, perché se io conosco l’algoritmo che mi realizza la cifratura è facile leggendo il codice creare un algoritmo che è il suo inverso. Infatti è cosı̀, pero esistono delle funzioni (trappola) facili da calcolare in un senso, ma impossibili o quantomeno computazionalmente impossibili da invertire. 89 5.1. Introduzione Capitolo 5. Crittografia Asimmetrica Facciamo due esempi banali. È facile dato un nome trovare il numero sull’elenco telefonico; è difficile dato un numero trovare il nome. È facile dati gli ingredienti è la ricetta, fare il dolce. È difficile mangiando il dolce risalire agli ingredienti e alla ricetta. A noi, chiaramente, servono trappole matematiche. Una funzione trappola è B = logA X Il logaritmo è la funzione inversa dell’esponenziale. Mentre è molto facile calcolare l’esponenziale (X = AB ), è molto difficile calcolare l’esponente che applicato ad A mi da X. Questa difficoltà si percepisce già dalla definizione di logaritmo. Quindi per cifrare possiamo usare l’esponenziale, e per decifrare usiamo il logaritmo. È scontato che la difficoltà computazionale si ha quando i numeri in gioco sono molto grandi, e ancora di più quando gli attori in gioco sono elementi di un campo finito molto grande. Un protocollo che si basa sulla trappola del logaritmo è il seguente Protocollo Diffie-Hellman. Questi due matematici furono i primo a proporre un sistema di crittografia asimmetrica. Il protocollo è il seguente. G e S sono gli attori della comunicazione; G è un client e S è un server. Entrambi possiedono delle informazioni segrete e non: (A) Possiede M , cioè il messaggio che è segreto (S) Possiede B, cioè l’esponete che è segreto, e A e AB che sono pubblici. Il protocollo funziona se l’hacker non può fare logA AB = B perché è computazionalmente difficile. G → S : {M · (AB )C , AC } con C un numero casuale scelto dal mittente. S ricostruisce M dato che M = M ·(AB )C (AC )B perché (AB )C = (AC )B . L’hacker non potrà mai fare questa operazione semplice perché non conosce B. Una seconda trappola è quella ottenuta moltiplicando due numeri primi. Dati p e q primi molto grandi è facile calcolare il prodotto pq, mentre è difficile fattorizzare pq. I numeri primi sono gli atomi dell’aritmetica. Sono un oggetto misterioso. Non ci sono molti teoremi che regolano il loro comportamento, e questo forse è il motivo per cui non si riesce a trovare un algoritmo efficiente per la fattorizzazione. 90 5.1. Introduzione Capitolo 5. Crittografia Asimmetrica Si sa che sono infiniti. Si sa che da 0 a n sono circa n ln n . Esistono delle congetture che non si riescono a dimostrare, come per esempio la congettura di Goldbach, e cioè che ogni numero pari maggiore di 2 è somma di due numeri primi. 4=3+1 6=3+3 8=5+3 10 = 7 + 3 .. . n=p+q ? Oppure l’ipotesi di Riemann che è uno dei 7 problemi del millennio (quindi tralasciamo). Un sistema che usa questa trappola è l’RSA inventato nel 1977 da Rivest, Shamir e Adleman, tre ricercatori del MIT. Intuitivamente N = pq fungerà da chiave pubblica mentre p e q saranno la chiave privata. Inizialmente l’opinione pubblica fu scettica su questo metodo, allora essi pubblicarono delle sfide; invitavano (sotto ricompensa) a fattorizzare dei numeri che loro proponevano: • RSA 129 → 129 cifre decimali. Ci vollero 17 anni (1994). • RSA 576 → 576 bit (174 decimali). Ci vollero 9 anni (2003). Cominciò a diventare popolare, fino ad avere l’enorme diffusione che ha attualmente, proprio perché la gente tocco con mano la difficoltà di fattorizzare tali numeri. Un’altra applicazione della crittografia asimmetrica è la firma digitale. La firma digitale risolve i difetti della firma autografa: • Sempre la stessa indipendentemente dal documento. • Inadatta a documenti elettronici, visto che l’obiettivo, specialmente della pubblica amministrazione, è quello di eliminare il cartaceo. • La verifica non è immediata, servono perizie calligrafiche, che hanno tempi lunghi, sono costose e potenzialmente sbagliate poiché fatte da un uomo. 91 5.1. Introduzione Capitolo 5. Crittografia Asimmetrica L’idea è, applicare al documento la cifratura con la chiave privata dell’utente che firma, è affiancare il risultato al documento. Chiunque volesse verificare la firma applica la cifratura con la chiave pubblica di chi a firmato, se il risultato è uguale al documento stesso allora la firma è accettata. Questo basta a risolvere i problemi sopra citati. Da notare la differenza con MAC: nel caso della firma digitale tutti possono verificare la firma mentre nel MAC solo chi possiede la chiave può accettare o rifiutare l’etichetta. Questo ha portato alla nascita del cosiddetto PKI (Public Key Infrastructure), e quindi alla nascita delle CA (Certification Autority), cioè enti autorizzati/certificati che emettono sotto richiesta dei certificati, che contengono la chiave pubblica, e garantiscono l’identità di colui che ha richiesto uno specifico certificato. Questo risparmia, agli attori della comunicazione, di doversi sempre scambiare le chiavi pubbliche prima di comunicare, che evita, tra l’altro, problemi di sicurezza. Il problema della crittografia a chiave asimmetrica è che è molto onerosa dal punto di vista computazionale e necessita di chiavi molto grandi (1024-2048 bit) per garantire la “totale” sicurezza. Per essere precisi bisogna dire che essa viene utilizzata non per cifrare un documento ma per scambiare in maniera sicura una chiave simmetrica; per lo stesso motivo non si firmerà l’intero documento ma l’hash. Poiché la crittografia serve anche nelle comunicazioni cellulari e nelle televisioni a pagamento e che strumenti come cellulari, appunto, e decoder hanno risorse molto limitate, non paragonabili a un pc, serve un nuova sistema. Questa idea prende il nome di ECC (Elliptic Curves Chryptography), realizzata mediante trappole geometriche che sono ancora più difficili delle aritmetiche. Funzione trappola più difficili mi permettono di diminuire la lunghezza della chiave. Si passa dal lavorare con i numeri a lavorare con i punti del piano cartesiano. Le curve ellittiche sono generalmente polinomi di grado 3. Su queste curve è possibile costruire un’operazione sui punti. Un’operazione è una relazione che associa a due elementi un terzo. Si può, per esempio, utilizzare il prodotto tra punti, e quindi adottare nuovamente il protocollo Diffie-Hellman (ECDH), in quanto è relativamente facile, dato un punto P della curva calcolare P B , mentre è difficile calcolare logP P B = B). Lo sviluppo della ECC è stato, inizialmente, ostacolato da RSA che ormai aveva conquistato la scena. Inoltre i sui ideatori non erano ben visti dal governo americano. Attualmente però nei dispositivi più sofisticati e negli strumenti militari si usa l’ECC. 92 5.2. Ulteriore teoria dei numeri 5.2 5.2.1 Capitolo 5. Crittografia Asimmetrica Ulteriore teoria dei numeri Algoritmo Euclideo ∗ , a è invertibile in Z Problema 4. Dato un elemento a ∈ Zm m ⇐⇒ gcd(a, m) = 1. Trovare l’inverso 1 a (o a−1 ) La soluzione è scrivere 1 come combinazione di x e y. 1 − ax − my =⇒ ax ≡ 1 (mod m) cioè (1 − ax) è multiplo di m. 1 − ax ≡ 0 (mod m) → 1 ≡ ax (mod m) → x ≡ 1 a (mod m) Questo lo possiamo fare per via dell’identità di Bèzout. Teorema 28 (Identità di Bèzout). Dati a e m ∃x, y con gcd(a, m) = ax + my L’algoritmo Euclideo trova x e y dalle divisione successive. 1) m = q1 · a + r2 con 0 ≤ r2 < m 2) a = q2 · r2 + r3 con 0 ≤ r3 < r2 2) r2 = q3 · r3 + r4 .. . con 0 ≤ r4 < r3 i) ri = qi+1 · ri+1 + ri+2 .. . con 0 ≤ ri+2 < ri+1 m-1) rm−1 = qm · rm + 0 L’ultimo resto non nullo è rm = gcd(a, m) ESEMPIO: gcd(54, 360) 360 = 6 · 54 + 36 54 = 1 · 36 + 18 36 = 2 · 18 + 0 93 5.2. Ulteriore teoria dei numeri Capitolo 5. Crittografia Asimmetrica Quindi gcd(360, 54) = 18 → 18 = 360x + 54y 18 = 54 − 36 18 = 54 − (360 − 6 · 54) 18 = 7 · 54 + (−1) · 360 Quindi x = −1 e y = 7. Questo metodo è molto più veloce di quello che fattorizza a e m in numeri primi. La complessità è in funzione del #bit di m. K = #bit di m = blog2 mc + 1 Il #passi?. Male che vada il resto decresce di 1 ad ogni iterazioni, quindi al massimo impiegherà m passi. Ma m è esponenziale in K quindi detta cosı̀ non sembra poi cosı̀ efficiente. In realtà il resto, nel caso peggiore, dimezza ogni 2 iterazioni. Osservazione 10. ri+2 ≤ ri 2 Dimostrazione. ri = qi+1 ri+1 + ri+2 ≥ ri+1 + ri+2 poiché si ha che ri+2 < ri+1 allora ri+1 + ri+2 > ri+2 + ri+2 = 2ri+2 e quindi ri+2 ≤ ri 2 Da ciò segue che #passi ≥ 2K = 2 · blog2 mc + 1 ossia una complessità temporale polinomiale. 94 5.2. Ulteriore teoria dei numeri Capitolo 5. Crittografia Asimmetrica Quando però si devono ricavare x e y, come dice l’Identità di Bèzout, si deve ripercorrere all’indietro l’algoritmo euclideo, con conseguente aumento di tempo. Per fare questo, inoltre, occorre mantenere in memoria tutti i passaggi dell’algoritmo, con un notevole spreco di spazio. Si usa, dunque, il cosiddetto algoritmo Euclideo Esteso, che modificato aggiungendo alcuni parametri proprio per evitare questo inconveniente. ESEMPIO: Quindi 3 = m · 2 + a · (−13). s e t sono calcolati in modo tale da avere ri = si m + ti a ∀i e cioè si = si−2 − qi−1 si−1 ti = ti−2 − qi−1 ti−1 Da notare che non serve tenere tutta la tabella in memoria ma soltanto le ultime tre righe. Questo non aumenta la complessità temporale e la complessità spaziale è costante, quindi trascurabile. Proposizione 3. ri = si m + ti a Dimostrazione. Per induzione. s0 = 1, t0 = 0 s1 = 0, t1 = 1 si+1 = si−1 − si qi ti+1 = ti−1 − ti qi per i = 0 95 ∀i 5.2. Ulteriore teoria dei numeri Capitolo 5. Crittografia Asimmetrica r0 = s0 m + t0 a = m r1 = s1 m + t1 a = a Supponiamo che ri = si m+ti a sia vero e dimostriamo che è vero ri+1 = si+1 m+ti+1 a ri+1 = si+1 m + ti+1 a ri+1 = (si−1 − si qi )m + (ti−1 − ti qi )a ri+1 = si−1 m + ti−1 a − si qi m − ti qi a ri+1 = si−1 m + ti−1 a − qi (si m + ti a) poiché ri−1 = si−1 m + ti−1 a e ri = si m + ti a si ha ri+1 = ri−1 − qi ri Quindi ri−1 = qi ri + ri+1 come succede nell’algoritmo euclideo. Per tornare al problema originario, cioè trovare a−1 ∈ Zp il procedimento e questo: 1. Cercare x e y tali che 1 = ax + my = sm + ta 2. Riduco l’espressione Poiché sm ≡ 0 (mod m) (mod m) si ha che 1 = ta → 1 =t a di conseguenza l’ultimo t trovato è l’inverso. Per trovare a−1 ∈ Fq , il procedimento è lo stesso. ESEMPIO: trovare 1 x2 ∈ F8 = Z2 [x]/(x3 + x + 1) F8 = {0, 1, x, x + 1, x2 , x2 + 1, x2 + x, x2 + x + 1} p = x3 + x + 1 a = x2 96 5.2. Ulteriore teoria dei numeri Capitolo 5. Crittografia Asimmetrica Quindi 1 = (x + 1)(x3 + x + 1) + (x2 + x + 1)(x2 ), che ridotto modulo (x3 + x + 1) diventa 1 = (x2 + x + 1)(x2 ) e quindi 1 1 = x2 + x + 1 → = 111 2 x 100 5.2.2 Metodo dell’elemento primitivo In un campo finito c’è un’alternativa per calcolare l’inverso di un elemento, che si basa sull’elemento primitivo (Definizione 23). Se riesco a trovare un elemento primitivo allora il calcolo dell’inverso è banale. Infatti (ω i )−1 = ω q−1 1 = = ω q−1−i ωi ωi Perché 1 = ω q−1 ? Sia (G, ·) un gruppo finito e g ∈ G. Si indica con hgi il gruppo ciclico generato da g hgi = {g, g 2 , g 3 , · · · , g h = 1} Mi fermo quando incontro l’elemento neutro perché da questo momento in poi la sequenza si rigenera identica. Definizione 27. h si dice periodo di g, cioè il minimo intero positivo per cui g h = 1. Osservazione 11. |hgi| = h Osservazione 12. hgi è sottogruppo di G, perché (hgi, ·) è un gruppo ed è generato a partire da G. 97 5.2. Ulteriore teoria dei numeri Capitolo 5. Crittografia Asimmetrica In conclusione Teorema 29 (Teorema di Lagrange). Siano G un gruppo finito e H un sottogruppo di G =⇒ |H| | |G| e quindi h | |G| APPLICAZIONE: • Fq∗ = (G \ {0}, ·) • ω ∈ Fq∗ ⇐⇒ il periodo di ω è q − 1 perché |Fq∗ | = q − 1 e non q dato che ho tolto lo 0. Osservazione 13. G gruppo finito e g ∈ G g |G| = 1 Dimostrazione. Sia h il periodo di g allora 1. g h = 1 2. h | |G| quindi hk = |G| =⇒ g |G| = g hk = (g h )k = 1k = 1 Applicato al campo finito, se g ∈ Fq∗ g q−1 = 1 Teorema 30 (Teorema di Fermat). Quando p 6| a ap−1 ≡ 1 98 (mod p) 5.2. Ulteriore teoria dei numeri Capitolo 5. Crittografia Asimmetrica Ricerca dell’elemento primitivo Il metodo più semplice per trovare l’elemento primitivo è per tentativi, cioè: f or a ∈ Fq ∗ ∀i ∈ {1, · · · , (q − 1)} CALCOLA ai end Se non ottengo mai 1 allora a e0 primitivo end In realtà non è necessario calcolare tutte le potenze di a ma solo j di queste: a q−1 j ∀j divisore primo di q − 1 ∗ ESEMPIO: 2 primitivo? in Z17 q − 1 = 16 = 24 16 j può essere solo 2; basta calcolare 2 2 = 28 . Se ∃j t.c. a q−1 j ≡1 (mod 17) =⇒ a N ON P RIM IT IV O Osservazione 14. Se un elemento a non è primitivo in Zp , e sia e il suo periodo, allora e | q − 1. e = {1, 2, 4, 8, 16} ae = 1 Se fosse a4 = 1 anche a8 = 1. Proposizione 4. a ∈ Fq∗ , 1 ∀j divisore primo di q − 1 e j > 1 (caso banale). a è PRIMITIVO ⇐⇒ a q−1 j 6= Dimostrazione. =⇒ È ovvia per definizione, perchè essendo primitivo, per qualsiasi q−1 j valore di q−1 , a non fa 1. j ⇐= Sia per assurdo a non primitivo, e che e sia il periodo di a. Per il Teorema di Lagrange (Teorema 29) e | q − 1 quindi lo posso scrivere come es = q − 1 → e = 99 q−1 s 5.2. Ulteriore teoria dei numeri Capitolo 5. Crittografia Asimmetrica e quindi a q−1 s =1 Se s è primo pongo j = s e ho dimostrato, altrimenti proseguo. Sia j divisore primo di s. q − 1 = se = (jv)e quindi q−1 j = ve e dunque a 5.2.3 q−1 j = ave = (ae )v = 1v = 1 Teorema Cinese dei Resti Teorema 31. Siano m1 , m2 , m3 , · · · , mn interi a coppie primi fra loro, e sia X ∈ Z. Se conosco X (mod m1 ) = a1 X (mod m2 ) = a2 .. . X (mod mn ) = an =⇒ posso risalire in modo univoco a X. E lo posso fare cosı̀ X= n X ai Mi yi (mod M ) i=1 con Mi = M mi , yi = Mi−1 e M = Πni=1 mi . A cosa serve? Se voglio conoscere X (mod M ), con M molto grande posso ricavarlo sommando i resti ottenuti dividendo X per i sui fattori. Quindi abbasso la complessità. In RSA m1 = p e m2 = q, cioè la chiave privata. Osservazione 15. ∃yi ⇐⇒ gcd(Mi , mi ) = 1 (sono primi tra loro). 100 5.2. Ulteriore teoria dei numeri Capitolo 5. Crittografia Asimmetrica Dimostrazione. Per definizione se yi è inverso di Mi si ha che yi ≡ Mi−1 (mod mi ) yi Mi ≡ 1 (mod mi ) ossia Ma questo è vero solo quando gcd(Mi , mi ) = 1. Osservazione 16. Pn i=1 ai Mi yi (mod mj ) = aj (con mj un mi fissato). Dimostrazione. Poiché Mj yj ≡ 1 (mod mj ) e Mk yk ≡ 0 (mod mj ) (perché in Mk , mj ci sta; visto che mj ≡ 0 (mod mj ) il prodotto si azzera). Si ha che n X ai Mi yi (mod mj ) = aj i=1 quindi, ponendo B = Pn i=1 ai Mi yi si ha B (mod m1 ) = a1 B (mod m2 ) = a2 .. . B (mod mn ) = an Ho dimostrato che B, costuito da me, si comporta come X. Resta da provare che X e B siano lo stesso numero, ossia non esiste solo X che verifica le condizione del teorema. Basta elencare tutte le possibilità, ossia tutti i valori, che ho per a1 , a2 , · · · , an . Dato che per a1 ne ho m1 , per a2 ne ho m2 ,· · · e per an ne ho mn , in totale ne ho M = m1 m2 , · · · , mn . Se si esplicitano tutte le M possibilità si vede che X è unico. ESEMPIO: Trovare X sapendo che m1 = 3, m2 = 5, m3 = 7 e che X (mod 3) = 0 X (mod 5) = 2 X (mod 7) = 2 101 5.2. Ulteriore teoria dei numeri Capitolo 5. Crittografia Asimmetrica Quindi M = 3 · 5 · 7 = 105 e M1 = m2 · m3 = 35 M2 = m1 · m3 = 21 M3 = m1 · m2 = 15 y1 = 1 35 (mod 3) = 1 21 1 y3 = 15 y2 = 1 2 (mod 3) = 2 (mod 5) = 1 (mod 7) = 1 In conclusione X = a1 M1 y1 + a2 M2 y2 + a3 M3 y3 = (0 · 35 · 2) + (2 · 21 · 1) + (1 · 15 · 1) = 0 + 42 + 30 = 72 5.2.4 Teorema di Eulero ∗ = {a ∈ Osservazione 17. Sia Zm , m non necessariamente primo. Sia Zm Zm | a IN V ERT IBILE} è un gruppo rispetto alla moltiplicazione; infatti, se a e b sono invertibili anche ab lo è. Perché se ne a ne b hanno fattori comuni con m neanche ab ce li avrà. ∗ sono tutti numeri primi con m e < m. Per sapere la Gli ai che compongono Zm ∗ basta applicare la Funzione Toziente di Eulero(Definizione 6). cardinalità di Zm Nel particolare caso dell’RSA φ(p · q) = (p − 1)(q − 1) dove p e q sono primi. ∗ =⇒ aφ(m) ≡ 1 Teorema 32 (Versione Debole (Fermat)). a ∈ Zm (mod m). Il Teorema di Fermat (Teorema 30) è identico se si sostituisce m con p. 102 5.2. Ulteriore teoria dei numeri Capitolo 5. Crittografia Asimmetrica Teorema 33 (Versione Forte (RSA)). Sia n = p · q con p e q primi distinti. Si ha φ(n) = (p − 1)(q − 1) Siano dati e e d tali che ed ≡ 1 (mod φ(n)). Sia a ∈ Zn , a 6= 0 allora aed = a Dimostrazione. ed ≡ 1 (mod n) (mod φ(n)) quindi ed = 1 + kφ(n). Basta provare quindi che aφ(n) ≡ 1 (mod n) perché se cosı̀ fosse aed = a1+kφ(n) = a · akφ(n) = a · (aφ(n) )k = a · 1k = a Possiamo dimostrarlo facendo vedere che a) aed ≡ a (mod p) b) aed ≡ a (mod q) Questo implicherà aed ≡ a (mod pq) in virtù del Teorema Cinese dei Resti. Inoltre a è l’unico numero per cui vale questo. a) Se p | a → a (mod p) = 0 aed (mod p) = 0 Se p 6| a → aed ≡ a1+k(p−1)(q−1) (mod p) a + (ap−1 )k(q−1) e in virtù del Teorema di Fermat a + (1)k(q−1) = a b) La dimostrazione è identica al punto precedente; basta sostituire p con q. 103 5.3. RSA 5.3 Capitolo 5. Crittografia Asimmetrica RSA Il crittosistema RSA si basa sul Teorema di Eulero (Teorema 33), ed è cosı̀ descritto: Definizione 28 (Crittosistema RSA). È definito da • P = C = Zn • K = {(n, p, q, e, d) | ed ≡ 1 • eK (x) = xe (mod n) • eK (y) = y d (mod n) (mod φ(n))} dove (n, e) è la chiave pubblica e (p, q, d) è la chiave privata. La proprietà fondamentale che deve valere è: dK (eK (x)) = x → dK (xe (mod n)) → (xe )d (mod n) = x e viene scelto in maniera casuale tra gli interi < φ(n) e primi con φ(n); se non fosse cosı̀ non esisterebbe d cioè il suo inverso (e−1 ). La sicurezza è basata sulla segretezza di d. Poiché n è un numero molto grande l’hacker non riesce a risalire a p e q. Per il possessore della chiave è facile da e ricavare d utilizzando l’algoritmo euclideo esteso. L’hacker non può farlo perché non conosce φ(n) e neanche p e q. ESEMPIO: p = 17 e q = 11 n = 187 φ(n) = (p − 1)(q − 1) = 160 e=7 d = 23 (inverso di 7 modulo 160) Eseguo l’algoritmo euclideo esteso: 160 = 22 · 7 + 6 7=1·6+1 6=6·1+0 Quindi si ha che 1 = 160x + 7y → 1 = (−1)160 + (23)7. 104 5.3. RSA Capitolo 5. Crittografia Asimmetrica Supponiamo che le chiavi appena generate siano di Alice. Ora se Bob vuole comunicare in maniera segreta il messaggio 88 deve calcolare 887 (mod 187) Per calcolare la potenza si usa l’algoritmo Square and Multiply: 88 882 (mod 187) = 77 884 (mod 187) = (882 )2 887 (mod 187) = 88 · 77 · 132 (mod 187) = 772 (mod 187) = 132 (mod 187) = 11 Alice riceve 11 è lo decifra cosı̀ calcolando 1123 (mod 187) Si scompone 23 come somma di potenze di 2 e si calcolano tali potenze: 23 = 16 + 4 + 2 + 1 → 1123 = 1116 · 114 · 112 · 11 11 112 (mod 187) = 121 114 (mod 187) = (112 )2 (mod 187) = 55 118 (mod 187) = (114 )2 (mod 187) = 33 1116 (mod 187) = (118 )2 1123 = 1116 · 114 · 112 · 11 5.3.1 (mod 187) = 154 (mod 187) = 154 · 55 · 121 · 11 (mod 187) = 88 Complessità La complessità è calcolata in funzione di k = #bit necessari per rappresentare n. k = blog2 mc + 1 Siano x, y ∈ Zn allora • Complessità della somma (x + y): O(k) • Complessità del prodotto (x · y): O(k 2 ) • Complessità della divisione (x/y): O(k 2 ). La divisione è intesa quella tra interi che restituisce q e r. 105 5.3. RSA Capitolo 5. Crittografia Asimmetrica • Complessità del calcolo dell’inverso modulo φ(n): O(k 3 ). È la complessità dell’algoritmo Euclideo esteso perché il costo è dato da O(k 2 · #passi algoritmo) → O(k 2 · 2 log φ(n)) Poiché φ(n) ha lo stesso numero di bit di n si ha O(k 2 · 2 log n) → O(k 2 · k) → O(k 3 ) • Complessità dell’elevamento a potenza (xy ): O(k 3 ). È la complessità dello Square and Multiply perché k = log y = #elevamenti al quadrato+#prodotti f inali → O(k 2 ·k+k 2 ·k) → O(k 3 ) Contraddizione Da un lato si assume che sia impossibile fattorizzare un numero di 1024 bit (RSA 1024). Dall’altro lato si ritiene che Alice possa scegliere comodamente p e q primi di 1024 bit (RSA 2048). Se non si può fattorizzare il numero come si può stabilire se p è primo? Si fanno dei test probabilistici, e si assume che il numero sia primo con una certa probabilità molto alta. 5.3.2 Test Probabilistici di primalità Ci chiediamo: m ∈ Z è primo? Premessa Matematica Sia Fq un campo finito, con q dispari. Definizione 29 (Quadrato). a ∈ Fq , a 6= 0 si dice QUADRATO se ∃b ∈ Fq t.c b2 = a. Nei numeri reali i quadrati sono i positivi, cioè quelli che hanno le radici. Teorema 34 (per q dispari). a QU ADRAT O ⇐⇒ a 106 q−1 2 =1 5.3. RSA Capitolo 5. Crittografia Asimmetrica Dimostrazione. =⇒ a QU ADRAT O =⇒ ∃b con a = b2 per definizione a q−1 2 = (b2 ) q−1 2 = bq−1 = 1 Perché un numero elevato alla cardinalità di un gruppo fa 1. ⇐= So che esiste l’elemento primitivo. Fq∗ = {1, ω, ω 2 , · · · , ω q−2 } Quindi a = ω i =⇒ (ω i ) q−1 2 = 1 =⇒ i · (q − 1) ≡0 2 (mod q − 1) Questo significa che q−1 | i · (q − 1) 2 cioè posso scrivere i · (q − 1) = k(q − 1) 2 i = 2k a = ω i = ω 2k = (ω k )2 I quadrati hanno esponenti pari. Osservazione 18. a q−1 2 = ±1 Questo vale sia per i reali sia per i campi finiti. Osservazione 19. ∀ QU ADRAT O ∃ 2 elementi di Fq∗ che elevati al quadrato danno b2 ; cioè b e −b. La conseguenza di questa osservazione è che i quadrati saranno q−1 2 q−1 se a 2 = 1 allora a 2 ± 1 |Fq∗ | 2 = q−1 2 e quindi ESEMPIO: Z11 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} 2 = {1, 3, 4, 5, 9} Il concetto di quadrato ci servirà poi nel Test di Soloway-Strassen e nell’algoritmo di Dixon. 107 5.3. RSA Capitolo 5. Crittografia Asimmetrica Test di Fermat Se m è primo =⇒ ∀a 6= 0 am−1 ≡ 1 (mod m) (mod m) (ma non è detto il contrario). Il test consiste nello scegliere a 6= 0 (mod m), e calcolare am−1 Se am−1 ≡ 1 (mod m) il test è superato Se am−1 6≡ 1 (mod m) il test è fallito (mod m) Sicuramente se il test fallisce m non è primo. La probabilità che il test venga superato con un m non primo è < 21 . Basta iterare il procedimento con diversi a per avere eventi indipendenti, è quindi una diminuzione della probabilità. Mi fermo quando ho raggiunto una certa probabilità. Test di Miller-Rabin È un raffinamento del test di Fermat; si basa sulla stessa considerazione. Se m è primo allora vale la proprietà ( i a2 s ≡ −1 (mod m) (∗) as ≡ 1 (mod m) per qualche i. Per ottenere questo si fattorizza m estraendo solo le potenze di due (divido per 2) m − 1 = 2k s am−1 ≡ 1 Si sceglie a 6= 0 2k s a (mod m) (mod m) e si procede iterativamente cosı̀ (mod m) ( 2k−1 s 1→a (mod m) 1··· −1 → F IN E −1 → F IN E alla fine otterrò la proprietà (∗). La probabilità che il test venga superato con m non primo è < 14 . Come prima itero il procedimento per abbassare la probabilità. 108 5.3. RSA Capitolo 5. Crittografia Asimmetrica Test Soloway-Strassen Se m è primo allora si ha m−1 (mod m) = 1 a 2 m−1 2 se a QU ADRAT O in Zm (mod m) = −1 se a non QU ADRAT O in Zm a a m−1 2 se a ≡ 0 (mod m) = 0 (mod m) Utilizziamo il simbolo di Jacobi per effettuare il calcolo. a m a m =a m−1 2 (mod m) può essere uguale a 1, −1 o 0. Valgono le seguenti proprietà: 1. 2. 3. 4. m1 m = mm2 se m1 ≡ m2 (mod m) ( 1 se n ≡ ±1 (mod 8) 2 m = −1 se n ≡ ±3 (mod 8) m1 ·m2 = mm1 · mm2 m " m ≡ 3 (mod 4) o − m n n n ≡ 3 (mod 4) m = n altrimenti m Seguendo le proprietà elencate si calcola Se m è primo → a m a m . = −1, quindi m supera il test in questo caso. Si itera il procedimento fino al raggiungimento della probabilità desiderata. Calcolare il simbolo di Jacobi ha complessità O(k 3 ), quindi fattibile. La probabilità che m non primo superi il test è < 1 2 109 5.3. RSA 5.3.3 Capitolo 5. Crittografia Asimmetrica Algoritmi di Fattorizzazione Sia k = #bit per rappresentare n; 1024 ≤ k ≤ 2048 (nel caso di RSA). Algoritmo Banale Si procede per tentativi provando tutti i numeri minori di √ n finché non trovo un divisore. Complessità La complessità è esponenziale in k, come del resto per tutti gli algoritmi di fattorizzazione, ma questo algoritmo è il peggiore di tutti. n ∼ 2k √ k n = 22 Questo è il numero di passi che compie l’algoritmo; ad ogni passo si effettua una divisione euclidea. Si ottiene cosı̀ k O(2 2 · k 2 ) Algoritmo (p-1) di Pollard Osservazione 20. p | gcd(n, 2p−1 − 1) L’osservazione è vera in virtù del Teorema di Fermat (Teorema 30). Il problema si sposta da p a p − 1, che sicuramente non è primo perché è paro. Quindi lo posso scrivere come p − 1 = pr11 · pr22 · · · prnn Algoritmo 110 5.3. RSA Capitolo 5. Crittografia Asimmetrica B := 2 while (true) p := gcd(n, 2B! − 1) B := B + 1 if (1 < p < n) then return p end L’algoritmo si ferma quando trova un divisore non banale cioè 6= 1 e 6= n Osservazione 21. Se pri i ≤ B ∀i allora dopo al più B iterazioni l’algoritmo si conclude. Che tradotto significa, se i fattori di p − 1 sono primi bassi allora l’algoritmo si conclude velocemente. Dimostrazione. Se pri i ≤ B ∀i allora posso scrivere pr11 · pr22 · · · prnn | B! p − 1 | B! B! = (p − 1)m quindi 2B! ≡ 1 2(p−1)m ≡ 1 (mod p) (mod p) =⇒ (2m )p−1 ≡ 1 (mod p) dunque, si ha che p | 2B! − 1 =⇒ p | gcd(n, 2B! − 1) C’è un problema però. Può capitare che invece di trovare p trovo q; questo si verifica quando entrambi dividono 2B! − 1. Questo significa che otterrei una serie di 1 come gcd e ad un certo punto n. Il problema è dovuto alla scelta di a = 2 per applicare il Teorema di Fermat. Cambio a e ripeto il procedimento. Complessità Sia B t.c. Piri ≥ B allora la complessità è O(B · (log2 B! · k 2 + k 3 )) = O(B · (k 3 + k 3 )) = O(Bk 3 ) 111 5.3. RSA Capitolo 5. Crittografia Asimmetrica dove B sono il numero di iterazioni, log2 B! · k 2 il costo di Square and Multiply per effettuare 2B! e k 3 per calcolare gcd(n, 2B! − 1). Per evitare l’attacco enunciato nell’Osservazione 21 si usa il seguente trucco: si prende p1 un primo grande e si calcola p cosı̀ p = 2p1 + 1 cosicché p − 1 = 2p1 e quindi B = p1 cioè il numero di iterazioni pari a p1 , che è elevatissimo. Algoritmo ρ di Pollard Osservazione 22. x (mod p) = x0 (mod p) e x 6= x0 =⇒ p | gcd(n, x − x0 ) Cioè due numeri sono uguali modulo p se p divide la differenza. L’obiettivo è trovare x, x0 ∈ Zn t.c. x (mod p) = x0 (mod p). Prendiamo A ⊆ Zn casuale. La probabilità che in A ci siano x e x0 con x (mod p) = x0 (mod p) è identica alla probabilità di trovare una collisione nelle funzioni hash, e √ cioè, occorre avere, grosso modo, |A| > p affinché si abbia una probabilità di successo del 50% (vedi Paradosso del Compleanno - Teorema 23). Una volta scelto l’insieme devo confrontare tutte le possibili coppie. Quindi se √ √ |A| > p il #coppie in A = kp = p2 . Costruzione di A Si sceglie x1 ∈ Zn e si calcolano x2 = f (x1 ) (mod p) x3 = f (x2 ) (mod p) .. . 112 5.3. RSA Capitolo 5. Crittografia Asimmetrica xi+1 = f (xi ) (mod p) con f un polinomio a coefficienti interi (es. f (x) = x2 + 1). In questo modo si forma una successione di elementi. Ora immaginiamo di costruire Zp a partire da questi elementi; chiaramente non lo posso fare davvero perchè non conosco p. Zp = {x1 (mod p), x2 (mod p), · · · , xi (mod p)} Comunque, se potessi farlo, ad un certo punto mi accorgerei, con buona probabilità, che due di questi hanno lo stesso valore e quindi xi (mod p) = xj (mod p) Quando collidono si ha che p | x − x0 , quindi o gcd(n, x − x0 ) = 1 e dunque p = 1, oppure x − x0 | n → p è un fattore di n poichè p | x − x0 . Osservazione 23. Se xi ≡ xj Dimostrazione. Si ha che xi+1 (mod p) allora xi+1 ≡ xj+1 (mod p) = xi xi+1 = f (xi ) xi+1 (mod p) = (f (xi ) (mod p) (mod p) perché (mod n) (mod n)) (mod p) Visto che p | n in realtà si prende solo il resto della divisione per p, perché xi+1 = q̃ · n + r e r = q̄ · p + s xi+1 = q̃ · n = q̃ · p · q + r = q̃ · p · q + q̄ · p + s xi+1 = p(q̃ · q + q̄) + s Quindi xi+1 (mod p) = f (xi ) (mod p) e per lo stesso motivo xj+1 (mod p) = f (xj ) (mod p) poiché se a xi (mod p) e a xj (mod p) applico la stessa f otterrò ancora due valori uguali modulo p. Se trovo una collisione ne ho trovate “tante”. xi+t ≡ xj+t (mod p) ∀t ≥ 0 113 5.3. RSA Capitolo 5. Crittografia Asimmetrica Con questo metodo il numero di confronti su un insieme di h elementi è h2 . Variante di Floyd Invece di controllare tutte le possibili coppie xi , xj si controllano solo quelle di tipo √ √ √ xi0 , x2i0 . Questo mi permette di diminuire i controlli da p · p = p a p. Perché? Siano xi e xj due elementi della successione che da origine a Zp , con j > i. Allora ∃j − i | i0 con i ≤ i0 ≤ j. Quindi x2i0 = xi0 +i0 = xi0 +k(j−i) =⇒ xi0 (mod p) (j − 1 passi è fare un giro). ESEMPIO: Zp = {1, 2, 5, 26, 38, 25, 58, 28, 4, 17, 6, 37, 21, 16, 44, 20, 46, 58, 28, 4, 17 · · ·} xi = 58 perché è il primo che si ripete. i=7 j = 18 j − i = 11 i0 = 11 è il multiplo di j − i compreso tra i e j. quindi x11 = x22 ossia in generale valere xi0 = xj−1 = xk(j−i) = xki0 = xk Complessità Usiamo il paradosso del compleanno per stimare j. j sono i passi che devo fare per √ ottenere la prima collisione, e cioè j = p, quindi k √ O( p · gcd) = O(2 4 · k 3 ) È pur sempre esponenziale ma l’esponente è dimezzato rispetto a prima. In generale l’algoritmo ha successo quando p è piccolo, cosa che nell’RSA non è cosı̀ perché p e q hanno lo stesso numero di bit. Con questo metodo il numero di confronti su un insieme di h elementi è 114 h2 2 . 5.3. RSA Capitolo 5. Crittografia Asimmetrica Variante di Brent Consiste nel modificare il test come segue: x2i0 0 (mod p) = x2i0 +s 0 dove 1 ≤ s ≤ 2i +1 − 2i cioè 2i (2 − 1) = 2i (mod p) 0 ESEMPIO: x1 x2 x3 x4 x5 x6 x7 x8 x9 · · · x15 x16 x17 · · · x32 · · · Confronti i0 = 0 (x1 , x2 ) i0 (x2 , x3 ) (x2 , x4 ) =1 i0 = 2 .. . (x4 , x5 ) (x4 , x6 ) (x4 , x7 ) (x4 , x8 ) Se confronto tutti con tutti ottengo 10242 2 contronti, mentre cosı̀ solo 1024. Osservazione 24. Il numero di test su un insieme di h elementi è h. Osservazione 25. Una collisione si trova esaminando x2i0 appena 0 0 2i > i ∧ 2i > j − i (mod p) con x2i0 +s non Con il test di Brent dividiamo la sequenza in blocchi che raddoppiano ogni volta. 0 La collisione si verifica quando entro nel giro del ρ (2i > i) e quando il blocco è più 0 0 lungo del giro (2i > j − i), di conseguenza 2i sono i confronti che faccio. Complessità La complessità teorica è la stessa ma sperimentalmente si è visto che funziona meglio. 115 5.3. RSA Capitolo 5. Crittografia Asimmetrica Algoritmo di Dixon (Crivello quadratico) Si basa sull’idea di Fermat: f or s := 1 to √ n{ if (n + s2 = t2 ){ n = t2 − s2 n = (t − s)(t + s) p=t−s break } } Se n + s2 è QUADRATO posso facilmente trovare un fattore. ESEMPIO: n = 323 323 + 1 = 324 è un quadrato 324 = 182 323 = 182 − 1 323 = (18 − 1)(18 + 1) = 17 · 19 Questa considerazione porta alla conclusione che p e q devono essere distanti tra loro. n = t2 − s2 = p · q ( t−s=p t+s=q q−p=t+s−t+s q − p = 2s s= q−p 2 Per preservare l’RSA bisogna avere s grande e quindi p e q vanno presi distanti. 116 5.3. RSA Capitolo 5. Crittografia Asimmetrica Dixon generalizza l’idea di Fermat. Si cercano relazioni di questo tipo in Zn . z 2 ≡ t2 (mod n) Osservazione 26. Se trovassi una relazione z 2 ≡ t2 (mod n) con z − t 6≡ 0 (mod n) e z + t 6≡ 0 (mod n) allora avrei che n | z 2 − t2 = (z − t)(z + t) ma n 6| (z − t) e n 6| (z + t) =⇒ gcd(n, z − t)è un divisore proprio di n. Significa che p · q non divide (z − t)(z + t) ma allora p ne divide uno dei due e q l’altro. L’obiettivo è trovare z, t con z 2 ≡ t2 (mod n). Supponiamo di trovare queste relazioni, e siano gli ai b numeri primi. z12 = ar111 · ar212 · · · arb1b (mod n) z22 = ar121 · ar222 · · · arb2b (mod n) .. . r r r zj2 = a1j1 · a2j2 · · · abjb (mod n) .. . zc2 = ar1c1 · ar2c2 · · · arbcb (mod n) Se gli rij sono tutti pari allora abbiamo già finito, perché significa che zj2 è un quadrato in quanto è un prodotto di quadrati. Se c’è almeno un esponente dispari cerchiamo di moltiplicarli tra di loro in modo tale da ottenere esponenti pari. 117 5.3. RSA Capitolo 5. Crittografia Asimmetrica ESEMPIO: n = 15770708441 33409341562 = 3 · 7 (mod n) 120449429442 = 2 · 7 · 13 27737000112 (z1 · z2 · z3 )2 = 2 · 3 · 13 = (2 · 3 · 7 · 13)2 22 · 32 · 72 (mod n) (mod n) · 132 (mod n) (mod n) dopodiché calcolo p = gcd(n, z − t) In generale si moltiplicano alcuni zi tra di loro: (z11 · z22 · · · zcc )2 = (z1 )1 · (z2 )2 · · · (zc )c ( con i = 0 1 (ar111 · ar212 · · · arb1b )1 · (ar121 · ar222 · · · arb2b )2 · · · (ar1c1 · ar2c2 · · · arbcb )c = a11 ·r11 +2 ·r21 +···+c ·rc1 · a21 ·r12 +2 ·r22 +···+c ·rc2 · · · ab1 ·r1b +2 ·r2b +···+c ·rcb = t2 Questo è quadrato quando 1 · r11 + 2 · r21 + · · · + c · rc1 ≡ 0 (mod 2) 1 · r12 + 2 · r22 + · · · + c · rc2 ≡ 0 (mod 2) .. . · r + · r + · · · + · r ≡ 0 (mod 2) 1 2 c 1b 2b cb Questo è un sistema lineare omogeneo di b equazioni in c incognite sopra il campo finito Z2 . Poiché un sistema lineare ha soluzioni quando c ≥ b, mi servono più relazioni dei numeri primi con cui fattorizzo gli zi . Chi mi garantisce che n 6| (z − t) e n 6| (z + t)? Osservazione 27. Il numero di soluzioni di t2 ≡ a (mod n) in Zn sono al massimo 4 e non 2 come detto in precedenza questo perché n non è primo e quindi Zn non è un campo. 118 5.3. RSA Capitolo 5. Crittografia Asimmetrica Dimostrazione. 2 n | t − a =⇒ p | t2 − a =⇒ q | t2 − a t2 ≡ a (mod p) t2 ≡ a (mod q) Zn non è un campo ma Zp e Zq si, quindi al massimo ci sono 2 possibili valori di a per la prima equazione e 2 per la seconda. In totale, quindi, ci sono 4 possibilità per la coppia (t (mod p), t (mod q)) Per ciascuna di questa 4 possibilità, c’è esattamente un possibile valore per t, in virtù del Teorema Cinese dei Resti (Teorema 31) ESEMPIO: n = 15 a = 1 =⇒ sol =({1, −1(= 14)} ( t2 ≡ 1 3 | t2 − 1 15 | t2 − 1 =⇒ =⇒ t2 ≡ 1 5 | t2 − 1 (mod 3) (mod 5) Le quattro possibilità sono: 1. t (mod 3) = 1 ∧ t (mod 5) = 1 → t = 1 2. t (mod 3) = 2 ∧ t (mod 5) = 1 → t = 11 3. t (mod 3) = 1 ∧ t (mod 5) = 4 → t = 4 4. t (mod 3) = 2 ∧ t (mod 5) = 4 → t = 14 Qual è la probabilità che dati x, y con x2 ≡ y 2 (mod n) si abbia n 6| x − y e n 6| x + y? Sia a ≡ x2 ≡ y 2 (mod n). Siano t1 , t2 , t3 , t4 le quattro radici. Tali radici sono a coppie opposte, quindi suppongo che t2 = −t1 e t4 = −t3 quindi posso scrivere le quattro radici come t1 , −t1 , t3 , −t3 x e y sono tra queste quattro, ma non so quali sono. Costruisco quindi la tabella con tutte le 16 possibilità per la coppia (x, y): 119 5.3. RSA Capitolo 5. Crittografia Asimmetrica I casi possibili sono 16; quelli favorevoli sono 8 cioè quelli per cui si ha contemporaneamente x − y 6= 0 e x + y 6= 0. In conclusione la probabilità di successo è p = 21 . Chiaramente ad ogni iterata dell’algoritmo di Dixon questa probabilità diminuisce. Complessità La complessità è O(e(1+O(1))· √ ln n·(ln(ln n)) cioè O(e(1+O(1))· √ k·(ln k) ) ) che è minore dell’algoritmo di prima ma pur sempre esponenziale; per la precisione si dice sub esponenziale. Una versione leggermente modificata di questa è detta crivello quadratico ed ha la stessa complessità. Altri algoritmi (1+O(1))· √ 2 ln p·(ln p) (1+O(1))· q 2 ln k ·(ln k ) 2 2 ) ) → O(e √ √ √ √ 3 3 3 3 2 2 • Crivello “Teoria dei numeri” O(e(1,92+O(1))· ln n· ln(ln n) ) = O(e(1,92+O(1))· k· ln k ) • Lenstra - Curve Ellittiche O(e 120 5.3. RSA Capitolo 5. Crittografia Asimmetrica Costruzione di un Numero Primo Osservazione 28. Chiunque è in grado di costruire un numero primo arbitrariamente grande, senza bisogno di fare nessun test. Sia h il prodotto dei primi s numeri primi p1 · p2 · p3 · · · ps = h allora h + 1 è primo. Dimostrazione. Sia p primo che divide h + 1. Siccome p ≤ h, perché è un divisore, è sicuramente un certo pi . pi | h + 1, pi |h =⇒ pi | h + 1 − h =⇒ pi | 1 impossibile. Il problema è che basta togliere 1 ad h + 1 e ottenere h che è fattorizzabile semplicemente, con l’algoritmo (p − 1) − P ollard. 121 5.4. Crittosistema ElGamal 5.4 Capitolo 5. Crittografia Asimmetrica Crittosistema ElGamal Sfrutta la difficoltà computazionale della risoluzione del cosiddetto DL − P roblem, cioè il problema del Logaritmo Discreto; discreto perché si lavora all’interno di un campo finito. Definizione 30 (Crittosistema ElGamal). Il crittosistema è cosı̀ definito: • Zp con p primo (quindi un campo finito). • Fissiamo un elemento primitivo α t.c < α > = Zp∗ (gruppo ciclico generato da α) • β = αa per def. a = logα β • Chiave privata: (a) • Chiave pubblica: (p, α, β) • ek (x) = (αk mod p; x · β k mod p) = (γ1 ; γ2 ) • dk (y) = γ2 γ1a mod p Con k un elemento del campo scelto a caso dal mittente. Alice riceve il messaggio (αk mod p; x·β k mod p). Per decifrarlo prima deve ricavare βk. β k = γ1a γ1a = (αk )a (mod p) = (αa )k (mod p) = β k (mod p) Ad Alice non interessa conoscere k. Questa operazione è facile perché Alice conosce a. L’hacker se vuole decifrare il messaggio per ottenere β k deve ricavare a risolvendo il Problema del Logaritmo Discreto. La sicurezza è garantita dal fatto che computazionalmente difficile risolvere tale problema. ESEMPIO: p = 2579 α = 2. È facile computazionalmente stabilire se α è primitivo in quanto occorre fare pochi test e ogni test richiede un esponenziazione che è polinomiale con Square and Multiply. a = 765 β = αa = 2765 (mod 2579) = 949 122 5.4. Crittosistema ElGamal Capitolo 5. Crittografia Asimmetrica Cifratura: x = 1299 k = 53 γ1 = 2853 (mod 2579) = 435 γ2 = 1299 · 949853 (mod 2579) = 2396 Decifratura: x= 5.4.1 γ2 γ2a (mod p) = 435765 2396 (mod 2579) Algoritmi di risoluzione del DL-Problem Definizione 31 (DL-Problem in Zp ). Dati α ∈ Zp con < α >= Zp∗ e β ∈ Zp∗ trovare a t.c. β = αa Brute Force Consiste nell’andare per tentativi α1 , α2 , α3 , · · · , αp finché non trovo a β. Nel caso peggiore si devono fare p tentativi, quindi: O(p) · T (Square M ultiply) = O(2k ) · T (Square M ultiply) Precompilazione e Ordinamento Si effettua un fase di precomputazione, cioè si calcolano preventivamente gli αi e si memorizzano ordinati in senso crescente. Risolvere il problema significa cercare nella tabella se è già stato calcolato il valore β che ci interessa, e in caso affermativo restituire il corrispondente valore dell’esponente. Questa soluzione è molto costosa sia in termini di spazio di memoria che di tempo. Baby Step Giant Step (BSGS) È stato ideato da Shank. È l’algoritmo più veloce per gruppi generici. Per Zp ce ne sono di più efficienti. L’idea deriva dal fatto che possiamo scrivere a come √ a = q · d pe + r 123 5.4. Crittosistema ElGamal Capitolo 5. Crittografia Asimmetrica e dato che a ≤ p − 1 e 0 ≤ r ≤ √ √ p − 1 si ha che 0 ≤ q ≤ p. Si sceglie √ p come √ divisore per bilanciare il carico computazionale; cosı̀ facendo infatti si fanno al più p passi sia per il resto che per il quoziente. Da questo abbiamo β = αa = αq·d √ pe+r =⇒ βα−r = αq·d √ Quindi otteniamo due incognite r e q che variano fra 0 e pe √ p. Si creano due tabelle dove si calcolano tutti i valori dei due membri. Poi si cerca quando c’è lo stesso valore in entrambe le tabelle. La complessità è sempre esponenziale ma è minore dei casi precedenti ed è identica in spazio e in tempo, cioè k √ O( p) · T (Square M ultiply) = O(2 2 ) · T (Square M ultiply) ρ di Pollard Il meccanismo è molto simile all’algoritmo omonimo per la fattorizzazione. L’idea è cercare una collisione di questo tipo: αA β B ≡ αĀ β B̄ (mod p) Si costruisce una successione casuale di elementi di Zp di questo tipo αA β B dopo √ p passi, in virtù del Paradosso del Compleanno (Teorema 23) c’è concreta speranza di collisione. Ottenuta una collisione possiamo scrivere αA (αa )B ≡ αĀ (αa )B̄ αA+aB ≡ αĀ+aB̄ (mod p) (mod p) Dato che ho una collisione vale αA+aB ≡1 αĀ+aB̄ (mod p) α(A+aB)−(Ā+aB̄) ≡ 1 124 (mod p) 5.4. Crittosistema ElGamal Capitolo 5. Crittografia Asimmetrica Quindi (A + aB) − (Ā + aB̄) è multiplo di p − 1 cioè (A + aB) − (Ā + aB̄) ≡ 0 A − Ā + a(B − B̄) ≡ 0 (mod p − 1) (mod p − 1) Ora se sono fortunato B − B̄ è primo con p − 1 e quindi è invertibile in Zp∗ e quindi A − Ā (mod p − 1) B − B̄ Se sono sfortunato ripeto il procedimento dall’inizio cercando altre collisioni. In a= realtà basta calcolare gcd(p − 1, B − B̄) è sottrarlo alla formula iniziale e procedere come visto. Inoltre valgono gli stessi trucchi già visti (Floyd e Brent). √ La complessità è O( p). L’unico vantaggio che ha rispetto al BSGS è la memoria. Pohlig-Hellman Questo algoritmo funziona, quindi è veloce, quando p − 1 è fattorizzabile con primi piccoli. Sia p − 1 = q1r1 · q2r2 · · · qsrs Per semplicità supponiamo ri = 1∀i. quindi p − 1 = q1 · q2 · · · qs IDEA: Non calcolare direttamente a ma calcolare prima a (mod qi )∀i dopodiché applicando il Teorema Cinese dei Resti (31) calcolo a (mod p − 1). Calcoliamo ora a (mod qi ): ai ≡ a (mod qi ) a = ti · qi + ai 0 ≤ ai ≤ qi − 1 β = αa =⇒ β β p−1 qi p−1 qi =α 125 = (αa ) a· p−1 q i p−1 qi 5.4. Crittosistema ElGamal Capitolo 5. Crittografia Asimmetrica β β p−1 qi p−1 qi =α (ti ·qi +ai ) p−1 q i t (p−1)+ =αi αti (p−1) · α ai (p−1) qi = ai (p−1) qi Poiché αp−1 = 1 si ha β p−1 qi =α ai (p−1) qi = (α p−1 qi )ai È di nuovo un problema di DL su un insieme di cardinalità qi , cioè più piccolo. √ Risolvere questo nuovo problema con BSGS costa O( qi ), pertanto il costo totale è √ √ √ O( q1 + q2 + · · · + qs ) che è molto minore che risolvere il problema senza l’idea di Pohlig-Hellman cioè √ √ √ √ O( p) = O( q1 · q2 · · · qs ) Per contro se vogliamo evitare l’attacco Pohlig-Hellman basta prendere p − 1 = 2q √ √ √ √ con q primo grande. La complessità diventa O( 2 + q) anziché O( 2 · q); non c’è molta differenza tra le due. ESEMPIO: p = 31 α=3 β=4 Il problema è trovare a t.c. 4 = 3a . p − 1 = 30 30 = 2 · 3 · 5 Devo trovare A) a (mod 2) B) a (mod 3) 126 5.4. Crittosistema ElGamal C) a Capitolo 5. Crittografia Asimmetrica (mod 5) Iniziamo dalla C: β p−1 qi = (α p−1 qi )ai = 46 = (36 )a3 Quindi a3 = a (mod q3 ) = a (mod 5) 1 = (4)a3 → 20 = 22a3 → 1 = 22a3 Questo significa anche che 5 | 2a3 ; il risultato è a3 = 5 Index Calcolus Questo algoritmo ricorda vagamente Dixon, ed è il più veloce tra quelli conosciuti ma si applica solo ai campi finiti. Tuttavia questo metodo non ha un analogo su curve ellittiche, per questo, a parità dei bit di chiave, la crittografia su curve ellittiche è più sicura. IDEA: PASSO 1: Si cerca il logaritmo discreto di un certo numero di primi p1 = αa1 p2 = αa2 .. . pB = αaB Ora considero potenze di α in modo pseudo-casuale sperando che si fattorizzino cosı̀: c c c αxj = p11,j · p22,j · · · pBB,j In questo modo troverò delle relazioni che riguardano i logaritmi discreti dei numeri primi ottenendo per sostituzione αxj = αa1 c1,j · αa2 c2,j · · · αaB cB,j = αa1 c1,j +a2 c2,j +···aB cB,j 127 5.4. Crittosistema ElGamal Capitolo 5. Crittografia Asimmetrica Essendo α primitivo, due potenze sono uguali ⇐⇒ xj − a1 c1,j + a2 c2,j + · · · aB cB,j è multiplo di p − 1 cioè xj ≡ a1 c1,j + a2 c2,j + · · · aB cB,j (mod p − 1) Il punto è che se trovo almeno B relazioni posso creare un sistema lineare e ricavare a1 , a2 , · · · , aB . PASSO 2: Si cerca una relazione di questo tipo βαs = pd11 · pd22 · · · pdBB se ci riusciamo il problema è risolto perché sostituendo β = αa e i risultati ottenuti prima otteniamo αa+s = αa1 d1 · αa2 d2 · · · αaB dB e quindi a + s ≡ a1 d1 + a2 d2 + · · · + aB dB (mod p − 1) gli ai li conosco perché li ho trovati prima quindi basta portare s all’altro membro e ho risolto il problema. COMPLESSITÀ PASSO 1: O(e(1+O(1))· PASSO 2: O(e √ ln p·ln ln p ) √ ( 21 +O(1))· ln p·ln ln p ) Complessità sub-esponenziale, perché compare la radice. Funziona solo per i campi finiti, non solo quelli del tipo Zp∗ ma anche per gli Fq . Tra questi quelli importanti per l’informatica sono gli F2r , cioè quelli per cui la cardinalità è una potenza di 2. La sicurezza al momento sembra garantita per r ≥ 1024 e quindi per campi di cardinalità 21024 . 128 Capitolo 6 Firma Digitale L differenza tra firma digitale e MAC è che la firma può essere verificata da chiunque mentre il MAC solo dal legittimo destinatario. Definizione 32 (Schema di Firma Digitale). Uno schema di firma digitale è una 5-upla del tipo (P, A, K, S, V) dove • P: Insieme dei possibili plaintext • A: Insieme delle possibili firme • K: Insieme delle possibili chiavi • S: Insieme delle funzioni di firma • V: Insieme delle funzioni di verifica con S = {sigK : P → A} dove k ∈ K V = {verK : PxA → {true, f alse}} dove k ∈ K e verK (x, y) = true =⇒ y = sigK (x). Le proprietà che deve soddisfare lo schema per essere accettabile sono: • Le funzioni di firma e di verifica sono veloci da eseguire • difficile falsificare una firma I tipi di attacco sono essenzialmente tre: 1. Key Only: L’hacker conosce solo le funzioni sig e ver, quindi conosce lo schema (questo è sempre vero). 2. Known Message: L’hacker conosce alcuni x ∈ P e le corrispondenti firme (situazione plausibile). 3. Chosen Message: L’hacker sceglie alcuni x ∈ P ed è in grado da farli firmare 129 6.1. Schema SHA1WithRSA Capitolo 6. Firma Digitale Dobbiamo distinguere due tipi di successo: • Existential Forgery: L’hacker è in grado di produrre almeno un messaggio firmato ma che non è scelto da lui. • Total Break: È in grado di firmare qualsiasi messaggio 6.1 Schema SHA1WithRSA IDEA: Cifro il documento con la chiave privata. Chi vuole verificare decifra la firma con la chiave pubblica e controlla che i due documenti coincidano. Chiave privata: (p, q, d) Chiave pubblica: (n, e) Schema: P = Zn A = Zn K = {(p, q, d, e, n)} | ed ≡ 1 sigK (x) = xd (mod φ(n))) (mod n) verK (x, y) = true ⇐⇒ y e ≡ x (mod n) Problema 5. Ci sono delle debolezze rispetto all’existential forgery. Infatti 1. Attacco Key Only: L’hacker può scegliere z ∈ Zn e porre x = ze y=z Questa coppia è accettata perché verK (x, y) = true =⇒ y e ≡ x (mod n) La speranza di Alice è che z non abbia senso, e al 99,9% è cosı̀. 2. Attacco Known Message: L’hacker conoscendo due documenti firmati da Alice (x1 , y1 ) e (x2 , y2 ), è in grado di creare un terzo messaggio valido cosı̀ x = x1 · x2 130 (mod n) 6.2. Schema Elgamal Capitolo 6. Firma Digitale y = y1 · y2 (mod n) infatti y e ≡ x (mod n) (y1 y2 )e ≡ x1 x2 y1e y2e ≡ x1 x2 (mod n) (mod n) y1e = x1 e y2e = x2 La soluzione al problema è utilizzare una funzione hash e firmare l’estratto anziché tutto il documento. Questo oltre a risolvere il problema enunciato serve anche a velocizzare le operazioni di firma e di verifica. I due attacchi visti prima non funzionano più se h è buona. 1. Attacco Key Only: L’hacker avrebbe bisogno di porre h(x) = z e ; poi dovrebbe ricavare x da h(x) il che è impossibile se h è resistente al problema “controimmagine”. 2. Attacco Known Message: Dovrebbe valere h(x1 x2 ) = h(x1 ) · h(x2 ) ma è impossibile vista l’irregolarità della funzione hash. Osservazione 29. La funzione hash deve essere resistente al problema “seconda controimmagine”, altrimenti se (x, y) è firmata da Alice e Oscar trova x̄ tale che h(x̄) = h(x) avrà trovato anche una firma valida per x̄. Osservazione 30. La funzione hash deve essere anche resistente alle collisioni, perché se trovo due messaggi con stesso hash, supponendo che uno dei due sia innocuo mentre l’altro no, posso indurre Alice a firmare quello innocuo e ottenere una firma valida per quello sensibile. 6.2 Schema Elgamal Sfrutta il DL-Problem per effettuare la firma. Chiave privata: (a, k) Chiave pubblica: (p, α, β) Schema: 131 6.2. Schema Elgamal Capitolo 6. Firma Digitale P = Zp A = Zp xZp K = {(a, k, p, α, β)}( sigK (x) = (γ, δ) = verK (x, (γ, δ)) = γ = αk (mod p) δ = x−aγ k true ⇐⇒ β γ · (mod p − 1) = αx γδ Dimostrazione. β γ · γ δ = (αa )γ · (αk )δ = αx ⇐⇒ αaγ+kδ = αx Essendo α un elemento primitivo di un campo, si ha che due potenze sono uguali se la differenza degli esponenti è multiplo di p − 1, cioè αaγ+kδ−x = 1 ⇐⇒ p − 1 | aγ + kδ − x oppure aγ + kδ − x ≡ 0 (mod p − 1) Da questa uguaglianza ricaviamo δ cosı̀ δ≡ x − aγ k (mod p − 1) Vediamo quanto è resistente agli attacchi total break e existential forgery. • Total Break: L’hacker conosce x, α, β. Deve cercare γ e δ t.c. valga β γ · γ δ = αx Ho due possibilita: – Fisso γ e cerco δ; quindi ottengo un DL-Problem. γ δ = αx · β −γ Quindi se si prende p sufficientemente grande t.c. il DL-Problem è intrattabile in quel campo allora sono sicuro che è resistente all’attacco. – Fisso δ e cerco γ; quindi ottengo un problema considerato più difficile del DL-Problem in quanto la mia incognita γ compare due volte. β γ · γ δ = αx Non esiste un algoritmo efficiente che risolva tale problema. 132 6.2. Schema Elgamal Capitolo 6. Firma Digitale • Existential Forgery: Anche in questo caso se non si usa una funzione hash è possibile trovare una falsificazione esistenziale. Si pone γ = αi · β j e si cercano i e j in modo tale da verificare l’uguaglianza β γ · γ δ = αx . Sostituisco solo una volta γ e ottengo β γ · (αi · β j )δ = αx αiδ−x = β −γ−jδ Poiché β = αa non posso continuare a sviluppare l’equazione perché non ho modo di conoscere a, allora faccio in questo modo: iδ − x = −γ − jδ ≡ 0 (mod p − 1) Se vale questo allora sicuramente vale αiδ−x = β −γ−jδ perché entrambi i membri sarebbero 1. Questo si risolve con un sistema iδ − x ≡ 0 (mod p − 1) −jδ = ≡γ (mod p − 1) Le incognite sono x e δ. Il sistema ha soluzioni quando il determinante della matrice dei coefficienti è invertibile modulo p − 1. Quindi si ha −1 i det −j 0 ! = −j e dunque basta prendere un i qualunque e j invertibile in Zp∗ cosı̀ sono sicuro di poter risolvere il sistema. Infatti δ= γ αi β j = −j −j x = iδ = 133 i i j αβ −j 6.2. Schema Elgamal Capitolo 6. Firma Digitale Osservazione 31. k deve essere segreto, perché chi verifica conosce x e (γ, δ) se conoscesse anche k può ricavare a cosı̀ kδ ≡ x − aγ (mod p − 1) kδ − x ≡ −aγ (mod p − 1) aγ ≡ x − kδ (mod p − 1) x − kδ γ (mod p − 1) a≡ Osservazione 32. k deve essere cambiato ogni volta, perché se supponiamo che x1 e x2 venissero firmati con lo stesso k le firme sarebbero (γ, δ1 ) e (γ, δ2 ) δ cambia perché dipende dal messaggio x, ma γ no quindi β γ · γ δ 1 = α x1 = β γ · γ δ 2 = α x2 β γ · αkδ1 α x1 β γ · αkδ1 = αx1 =⇒ αk(δ1 −δ2 ) = αx1 −x2 = =⇒ γ kδ x β ·α 2 =α 2 α x2 β γ · αkδ2 Poiché due potenze di α sono uguali quando gli esponenti sono uguali modulo p − 1 si ha k(δ1 − δ2 ) ≡ xi − x2 (mod p − 1) A questo punto se (δ1 − δ2 ) è invertibile, ed è probabile che lo sia, trovo k facendo k≡ x1 − x2 δ1 − δ2 (mod p − 1) Dunque se Alice non cambia k l’hacker può firmare al posto suo. ESEMPIO: p = 467 α=2 a = 127 β = 2127 = 132 Supponiamo x = 100 Scelgo k invertibile modulo p − 1 k = 213 infatti gcd(466, 213) = 1 Ci calcoliamo preventivamente 1 k = 431 134 6.3. Schema SHA1WithDSA Capitolo 6. Firma Digitale FIRMA ( γ = 2213 (mod 467) = 29 δ = 431 · (100 − 127 · 29) (mod 467) = 51 VERIFICA 13229 · 2951 = 127100 6.3 Schema SHA1WithDSA È molto simile allo schema Elgamal; ha qualche piccola modifica. Generazione delle chiavi: • Si scelga un numero primo q di 160 bit • Si scelga un numero primo p lungo L bit, tale che p = qz + 1 per un qualche numero intero z, con 512 < L < 1024 e 64 | L (nell’ultima revisione dello standard si specifica che L deve corrispondere a 1024). • Si scelga h tale che 1 < h < p − 1 e α = hz (mod p) > 1 • Si generi un numero casuale a tale che 1 < a < q • Calcolare β = αa (mod p) La chiave pubblica è (p, q, α, β) e la chiave privata è a. Calcolo della firma: • Si generi un numero casuale k tale che 0 < k < q • Calcolare γ = (αk • Calcolare δ = (mod p)) H(m)+aγ k (mod q) (mod q) • Nel caso in cui γ = 0 o δ = 0 bisogna ricalcolare la firma cambiando k • La firma è (γ, δ) 135 6.4. Funzionamento Pratico Capitolo 6. Firma Digitale Verifica della firma: • Rifiutare firme se non sono soddisfatte le condizioni 0 < γ < q e 0 < δ < q • Calcolare w = δ −1 (mod q) • Calcolare u1 = H(m) · w • Calcolare u2 = γ · w (mod q) (mod q) • Calcolare v = (αu1 · β u2 (mod p)) (mod q) • La firma è verificata se v = γ 6.4 Funzionamento Pratico Creazione della coppia di chiavi: • L’utente richiede un certificato digitale ad una CA autorizzata. • La CA emette un certificato • Nel certificato c’è la chiave pubblica di Alice ed è firmato dalla CA • Il certificato viene inserito in una smart card insieme alla chiave privata di Alice Generazione della firma: Occorre utilizzare un software specifico. Il software prende in input il documento da firmare è la chiave privata contenuta all’interno della smart card, e restituisce in output un file .p7m. Un file con estensione .p7m è composto di tre parti 1. File.doc 2. Firma 3. Certificato di Alice Verifica della firma: 1. Il software verifica on-line la validità del certificato e la firma della CA 2. Verifica la firma di Alice prendendo la chiave pubblica dal certificato 136 Capitolo 7 Elliptic Curve Cryptography (ECC) È un tipologia di crittografia a chiave pubblica basata su curve ellittiche definite in campi finiti. L’utilizzo di questo metodo crittografico è stato proposto da Neal Koblitz e Victor S. Miller nel 1985. 7.1 Curve Ellittiche nei Reali Una curva ellittica su numeri reali può essere definita come l’insieme di punti (x, y) che soddisfano una equazione della forma: y 2 = x3 + ax2 + b dove x,y, a e b sono numeri reali. Ogni diversa scelta di a e b da origine ad una curva ellittica diversa. Ad esempio, a = −4 e b = 0, 67 fornisce la seguente curva ellittica: 137 7.1. Curve Ellittiche nei Reali Capitolo 7. Elliptic Curve Cryptography (ECC) Se x3 + ax + b non contiene elementi ripetuti, o equivalentemente se 4a3 + 27b2 6= 0, allora la curva ellittica y 2 = x3 + ax + b può essere utilizzato per formare un gruppo. Un gruppo di curva ellittica su numeri reali è costituito da i punti sulla curva ellittica corrispondente, insieme ad un punto O, speciale, chiamato punto all’infinito. Sul gruppo vogliamo inoltre, che ci si possa definire un’operazione, cioè una regola per associare a due elementi un terzo elemento, che soddisfi 4 proprietà: Associativa, Commutativa, Esistenza dell’elemento neutro ed Esistenza dell’inverso. Gruppi di curve ellittiche sono gruppi di additivi, cioè la loro funzione di base è la somma. L’aggiunta di due punti in una curva ellittica è definito geometricamente. L’opposto (o il negativo) di un punto P = (Xp , Yp ) è il suo riflesso in asse x: il punto −P è (xP , −yP ). Si noti che per ogni punto P su una curva ellittica, il punto −P è anch’esso sulla curva. Somma di due numeri: P + Q = R Supponiamo che P e Q siano due punti distinti su una curva ellittica, e P 6= −Q. Per sommare i due numeri si disegna la retta che passa per questi due punti. Questa linea interseca la curva ellittica esattamente in un punto chiamato −R. Il punto −R si riflette nell’asse delle x fino al punto R. Il procedimento è mostrato in Figura 7.1. Figura 7.1: Somma di due punti Aritmeticamente metto a sistema l’equazione della curva con l’equazione della retta; ottengo 3 soluzioni che sono i tre punti. Ecco il motivo del grado 3: ho 138 7.1. Curve Ellittiche nei Reali Capitolo 7. Elliptic Curve Cryptography (ECC) bisogno di un terzo punto e quindi ho bisogno del 3 grado. Somma dello stesso numero: P + P = 2P = R La linea passante per P e −P è una linea verticale che non si interseca con la curva ellittica in un terzo punto, e quindi la somma non può essere fatta come in precedenza. Per questo motivo il gruppo generato dalla curva ellittica contiene un punto all’infinito chiamato O. Per definizione si ha che, P + (−P ) = O, e quindi anche P + O = P ; dunque O viene preso come l’elemento neutro del gruppo. Per aggiungere un punto P a se stesso, si calcola la tangente alla curva passante per P . Se yP 6= 0, la tangente interseca la curva in un altro punto −R. Infine si riflette −R ottenendo R. 139 7.1. Curve Ellittiche nei Reali Capitolo 7. Elliptic Curve Cryptography (ECC) Se yP = 0 la tangente è sempre verticale e non interseca la curva in un altro punto. Per definizione, 2p = O per un tale punto P . Se si volesse trovare 3P in questa situazione, si può aggiungere 3P = 2P + P . Questo diventa 3P = P + O = P . Pertanto P = 3P, 4P = O, P = 5P, 6P = O, P = 7P , ecc... Formule Algebriche Anche se le descrizioni geometriche precedenti delle curve ellittiche forniscono un metodo eccellente per illustrare l’aritmetica che ci sta dietro, non sono un modo pratico per implementare calcoli aritmetici. C’è bisogno di formule che possono essere eseguite da un calcolatore. Somma di due numeri: P + Q = R Quando P = (xP , yP ) e Q = (xQ , yQ ) non sono uno l’opposto dell’altro la somma si calcola cosı̀: s= yP − yQ xP − xQ xR = s 2 − xP − xQ yR = −yP + s(xP − xR ) con s che rappresenta la retta passante per i punti P e Q. Somma dello stesso numero: P + P = 2P = R Quando yP 6= 0 la somma si calcola cosı̀: 140 7.2. Curve Ellittiche in Fp Capitolo 7. Elliptic Curve Cryptography (ECC) s= 3x2P + a 2yP xR = s2 − 2xP yR = −yP + s(xP − xR ) con s che rappresenta la retta tangente la curva ellittica nel punto P . 7.2 Curve Ellittiche in Fp Una proprietà essenziale per la crittografia è che un gruppo deve avere un numero finito di punti. I calcoli sui numeri reali sono lenti e imprecisi a causa di un errore di arrotondamento. Le applicazioni crittografiche richiedono calcoli veloci e precisi, per questo vengono utilizzati campi finiti, Fp e F2m , generati da curve ellittiche. Una curva ellittica basata su campo Fp può essere formata scegliendo le variabili a e b all’interno del campo Fp . La curva ellittica comprende tutti i punti (x, y) che soddisfano l’equazione: y2 (mod p) = x3 + ax2 + b (mod p) Se la curva ellittica contiene tutti elementi singolari (4a3 + 27b2 (mod p) 6= 0) allora la curva ellittica può essere usata per creare un gruppo. Come esempio si consideri il campo F23 , a = 1 e b = 0. L’equazione risultante y 2 = x3 + x Il punto P = (9, 5) soddisfa l’equazione in quanto y2 25 25 (mod p) = x3 + x (mod p) (mod 23) = 729 + 9 (mod 23) = 738 (mod 23) (mod 23) 2=2 In tutto sono casualmente 23, i punti che soddisfano l’equazione. (0, 0)(1, 5)(1, 18)(9, 5)(9, 18)(11, 10)(11, 13)(13, 5)(13, 18)(15, 3)(15, 20)(16, 8) 141 7.2. Curve Ellittiche in Fp Capitolo 7. Elliptic Curve Cryptography (ECC) (16, 15)(17, 10)(17, 13)(18, 10)(18, 13)(19, 1)(19, 22)(20, 4)(20, 19)(21, 6)(21, 17) Questi punti possono essere rappresentati cosı̀: Da notare che ci sono 2 valori di y per ogni x, proprio come succede nei numeri reali. Chiaramente non ha più senso cercare di collegare i punti per ottenere una curva. Quello che ci interessa è che le regole che valgono per i numeri reali valgono anche per i campi finiti Fq con l’eccezione che il calcolo è fatto modulo p. Somma di due numeri: P + Q = R Quando P = (xP , yP ) e Q = (xQ , yQ ) non sono uno l’opposto dell’altro la somma si calcola cosı̀: s= yP − yQ xP − xQ (mod p) xR = s2 − xP − xQ (mod p) yR = −yP + s(xP − xR ) (mod p) con s che rappresenta la retta passante per i punti P e Q. 142 7.3. Curve Ellittiche in F2m Capitolo 7. Elliptic Curve Cryptography (ECC) Somma dello stesso numero: P + P = 2P = R Quando yP 6= 0 la somma si calcola cosı̀: s= 3x2P + a 2yP xR = s2 − 2xP (mod p) (mod p) yR = −yP + s(xP − xR ) (mod p) con s che rappresenta la retta tangente la curva ellittica nel punto P . 7.3 Curve Ellittiche in F2m Già sappiamo che gli elementi del campo F2m possono essere rappresentati da stringhe di m bit. Dal momento che F2m opera su stringhe di bit, i computer possono eseguire operazioni aritmetiche in questo campo in modo molto efficiente. Una curva ellittica basata su campo F2m può essere formata scegliendo le variabili a e b all’interno del campo F2m . C’è una differenza rispetto a prima; poiché gli elementi in F2m sono tutti dei quadrati, affinché il meccanismo continui a funzionare, l’equazione va modificata cosı̀: y 2 + xy = x3 + ax2 + b Un gruppo basato su curva ellittica in F2m consiste nei punti che soddisfano y 2 + xy (mod p) = x3 + ax2 + b (mod p) insieme ad un punto all’infinito, O. Come esempio si consideri il campo F24 definito mediante il polinomio irriducibile f (x) = x4 + x + 1. L’elemento g = (0010) è un generatore per il campo. Le potenze di g sono: g 0 = (0001) − g 1 = (0010) − g 2 = (0100) − g 3 = (1000) g 4 = (0011) − g 5 = (0110) − g 6 = (1100) − g 7 = (1011) g 8 = (0101) − g 9 = (1010) − g 10 = (0111) − g 11 = (1110) g 12 = (1111) − g 13 = (1101) − g 14 = (1001) − g 15 = (0001) 143 7.3. Curve Ellittiche in F2m Capitolo 7. Elliptic Curve Cryptography (ECC) In una vera applicazione di crittografia, il parametro m deve essere abbastanza grande da evitare la formazione efficiente di questa tabella altrimenti il sistema crittografico può essere rotto. In pratica oggi, m = 160 è una scelta opportuna. Si consideri la curva ellittica y 2 + xy = x3 + g 4 x2 + 1 Il punto P = (g 5 , g 3 ) soddisfa l’equazione su F2m perché (g 3 )2 + g 5 g 3 = (g 5 )3 + g 4 g 10 + 1 g 6 + g 8 = g 15 + g 14 + 1 (1100) + (0101) = (0001) + (1001) + (0001) (1001) = (1001) I 15 punti che soddisfano tale equazione sono: (1, g 13 )(g 3 , g 13 )(g 5 , g 11 )(g 6 , g 14 )(g 9 , g 13 )(g 10 , g8)(g 12 , g 12 )(1, g 6 )(g 3 , g 8 )(g 5 , g 3 )(g 6 , g 8 ) (g 9 , g 10 )(g 10 , g)(g 12 , 0)(0, 1) Essi possono essere rappresentati cosı̀: Somma di due numeri: P + Q = R Sia P = (xP , yP ); l’opposto di P è −P = (xP , xP + yP ). Se P e Q sono punti distinti tali che P 6= −Q, allora la somma è: s= (yP − yQ ) (xP + xQ ) xR = s 2 + s + xP + xQ + a yR = s(xP + xR ) + xR + yP con s la retta che passa per i due punti. Somma dello stesso numero: P + P = 2P = R 144 7.4. Applicazione in Crittografia Capitolo 7. Elliptic Curve Cryptography (ECC) Se xP = 0, allora 2P = O quindi questo va evitato. Fatto questo la somma si calcola cosı̀: s = xP + yP xP xR = s2 + s + a yR = x2P + (s + 1) · xR con s la retta tangente la curva nel punto P . 7.4 Applicazione in Crittografia In crittografia si usano le curve ellittiche applicate al meccanismo di key agreement di Diffie-Helmann o al crittosistema di El Gamal o allo schema di firma DSA. Quindi si estende il DL-Problem ai gruppi originati da curve ellittiche. Problema 6 (DL-Problem →ECDL-Problem). Dati β e α trovare a t.c. β = αa =⇒ Dati W e G trovare n t.c. W = nG. 145 7.4. Applicazione in Crittografia Capitolo 7. Elliptic Curve Cryptography (ECC) Sotto opportune restrizione questo problema è risolubile in tempo esponenziale √ O( r) dove r è l’ordine di W , mentre il DL-Problem e la fattorizzazione sono risolubili in tempo sub-esponenziale. Per questo motivo con ECC si possono usare chiavi di dimensione minore. Proprietà dei Gruppi • Sia #E(Fq ) il numero di punti della curva ellittica E(Fq ) incluso O. √ • Teorema 35 (Hasse bound). #E(Fq ) = q + 1 − t con t ≤ 2 q • Il gruppo è ciclico o è il prodotto di due gruppi ciclici. • L’operazione di moltiplicazione che serve a calcolare W viene fatta mediante ripetute addizioni. C’è un notevole impiego di risorse nella ricerca di un metodo più efficiente per fare la moltiplicazione scalare. • ∀P ∈ E(Fq ) nP = O dove n = #E(Fq ). Restrizioni della Curva • N = #E(Fq ) = hn con n un numero primo molto grande e h il cofattore (h = N n ). Per evitare un attacco con l’algoritmo ρ di Pollard o di Pohlig-Helloman, modificati per le curve ellittiche, è necessario che N sia divisibile per un numero primo n sufficientemente grande. • gcd(k, n) = 1 • Condizione Anomala: n 6= q • Condizione MOV : n 6| q i − 1con 1 ≥ i ≥ 20. Visto che è sempre possibile trasformare il campo finito generato dalla curva ellittica in un campo finito normale, se la condizione non è verificata il campo d’arrivo sarà di dimensioni paragonabili all’iniziale; questo mi permette risolvere il problema sul campo d’arrivo perché il problema è più facile. Se invece la condizione è verificata il campo di arrivo avrà dimensioni molto maggiori e quindi la risoluzione del DL-Problem è improponibile. Selezione della Curva Per stabilire se la curva è buona o no mi serve solo conoscere il numero di punti che ha. Questa non è un’operazione banale perché chiaramente si considerano campi con cardinalità elevata. 146 7.4. Applicazione in Crittografia Capitolo 7. Elliptic Curve Cryptography (ECC) I metodi sono: • Random • Complex multiplication • Subfield La bontà di un metodo dipende da due fattori: la velocità di esecuzione, e dalla “struttura” delle curve risultanti. Meno significativa è la struttura migliore è la curva. Purtroppo metodi lenti offrono curve molto buone e viceversa. Random Genera una curva a caso e poi conta il numero di punti. Questo metodo è lento ma offre curve molto buone. Fu proposto da Schoof nel 1985. Subfield Esiste un teorema che dice che se si conosce il numero di punti di una curva sopra un sotto-campo, risolvendo semplicemente una formula di secondo grado posso conoscere il numero di punti della stessa curva su un campo qualsiasi. Questo metodo non si usa perché si ha paura che la curva risulti avere una struttura significativa. Questo metodo fu proposto da Koblitz. 7.4.1 Generazione Chiavi • Selezionare un numero primo q • Selezionare una curva ellittica E sul campo Fq che rispetti le restrizioni • Selezionare un punto H ∈ E(Fq ) 160 e n > 4√q) • Calcolo G = ( N n )H (con N = #E(Fq ), n primo, n > 2 • Se G = O ricomincio • Genero random a ∈ [1, n − 1]. chiave privata: (a) • Calcolo W = aG. chiave pubblica: (W, n, G) 7.4.2 ECDSA Firma INPUT: Chiave privata a e messaggio m. OUTPUT: firma (γ, δ) 147 7.5. Vantaggi e Svantaggi Capitolo 7. Elliptic Curve Cryptography (ECC) • Seleziono k ∈ [1, n − 1] • Calcolo γ = x1 • Calcolo δ = (mod n) dove (x1 , y1 ) = kG h(m)+aγ k (mod n) • Se γ = 0 o δ = 0 ricomincio Verifica INPUT: (γ, δ), chiave pubblica (W, n, G) e messaggio m. OUTPUT: true/false • Verificare che W 6= O • Verificare che W appartenga alla curva (W ∈ E(Fq )) • Verificare che nG = O • Verificare che γ, δ ∈ [1, n − 1] Alla prima verifica fallita rifiuto la firma. • Calcolare w = δ −1 (mod n) • Calcolare u1 = h(m) · w • Calcolare u2 = γ · w (mod n) (mod n) • X = (x1 , y1 ) = u1 G + u2 W Se X = O rifiuto la firma • v = x1 (mod n) Se v = γ accetto la firma. 7.5 7.5.1 Vantaggi e Svantaggi Vantaggi • Un’altra problema difficile • Operazioni sono più veloci • Lunghezza della chiave minore 148 7.5. Vantaggi e Svantaggi Capitolo 7. Elliptic Curve Cryptography (ECC) • Più schemi possono essere combinati in modo efficiente. (firma + encryption firma/key agreement + certification). • Molte opzioni: sono molta i parametri in gioco quindi ci possono essere numerosi crittosistemi 7.5.2 Svantaggi • Visto che l’ECDLP è stato studiato poco potrebbe rivelarsi un sistema fragile • Generazione della curva è complessa • Molte opzioni 149