UNIVERSIT`A DEGLI STUDI DI PERUGIA Corso di laurea

Transcript

UNIVERSIT`A DEGLI STUDI DI PERUGIA Corso di laurea
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