You are on page 1of 224

La matematica dell’orologio

Un’aritmetica inusuale:
I numeri del nostro ambiente sono: 0, 1, 2, . . . , 11 e
corrispondono alle ore di un nostro orologio
Le operazioni sono intese in questo modo:
1 somma: a + b è l’ora che si ottiene spostando la lancetta dalla
posizione a in avanti di b ore;
2 prodotto: a · b è l’ora che si ottiene sommando a a sé stessa b
volte.
I risultati nella matematica dell’orologio vengono distinti dagli altri
mediante l’espressione (mod 12)
La matematica dell’orologio
Un’aritmetica inusuale:
I numeri del nostro ambiente sono: 0, 1, 2, . . . , 11 e
corrispondono alle ore di un nostro orologio
Le operazioni sono intese in questo modo:
1 somma: a + b è l’ora che si ottiene spostando la lancetta dalla
posizione a in avanti di b ore;
2 prodotto: a · b è l’ora che si ottiene sommando a a sé stessa b
volte.
I risultati nella matematica dell’orologio vengono distinti dagli altri
mediante l’espressione (mod 12)

Esercizio 1
Calcolare 7 · 3 (mod 12), 8 · 4 (mod 12), 10 · 5 (mod 12)
La matematica dell’orologio
Un’aritmetica inusuale:
I numeri del nostro ambiente sono: 0, 1, 2, . . . , 11 e
corrispondono alle ore di un nostro orologio
Le operazioni sono intese in questo modo:
1 somma: a + b è l’ora che si ottiene spostando la lancetta dalla
posizione a in avanti di b ore;
2 prodotto: a · b è l’ora che si ottiene sommando a a sé stessa b
volte.
I risultati nella matematica dell’orologio vengono distinti dagli altri
mediante l’espressione (mod 12)

Esercizio 1
Calcolare 7 · 3 (mod 12), 8 · 4 (mod 12), 10 · 5 (mod 12)

Esercizio 2
Riflettere sul rapporto che c’è fra i risultati usuali e i risultati
(mod 12).
Problema 1
Provare a dare una definizione matematica di a + b (mod 12) e di
a · b (mod 12) che non faccia uso dell’orologio.
Problema 1
Provare a dare una definizione matematica di a + b (mod 12) e di
a · b (mod 12) che non faccia uso dell’orologio.

Quindi:
1 a + b (mod 12) è il resto della divisione di a + b per 12;
2 a · b (mod 12) è il resto della divisione di a · b per 12.
Problema 1
Provare a dare una definizione matematica di a + b (mod 12) e di
a · b (mod 12) che non faccia uso dell’orologio.

Quindi:
1 a + b (mod 12) è il resto della divisione di a + b per 12;
2 a · b (mod 12) è il resto della divisione di a · b per 12.

Gara 1
Calcolare 715 (mod 12) nel minor tempo possibile senza
calcolatrice
Problema 1
Provare a dare una definizione matematica di a + b (mod 12) e di
a · b (mod 12) che non faccia uso dell’orologio.

Quindi:
1 a + b (mod 12) è il resto della divisione di a + b per 12;
2 a · b (mod 12) è il resto della divisione di a · b per 12.

Gara 1
Calcolare 715 (mod 12) nel minor tempo possibile senza
calcolatrice
Idea chiave: elevare a potenza nella matematica dell’orologio può
essere un’operazione molto più veloce di quello che si potrebbe
immaginare
Generalizziamo: Aritmetica modulare
Non c’è niente di speciale nel numero 12. Sostituiamolo con un
numero intero n qualsiasi, purchè maggiore di 1.
I numeri del nostro ambiente sono: 0, 1, 2, . . . , n − 1
Le operazioni sono intese in questo modo:
1 a + b (mod n) è il resto della divisione di a + b per n;
2 a · b (mod n) è il resto della divisione di a · b per n.
Generalizziamo: Aritmetica modulare
Non c’è niente di speciale nel numero 12. Sostituiamolo con un
numero intero n qualsiasi, purchè maggiore di 1.
I numeri del nostro ambiente sono: 0, 1, 2, . . . , n − 1
Le operazioni sono intese in questo modo:
1 a + b (mod n) è il resto della divisione di a + b per n;
2 a · b (mod n) è il resto della divisione di a · b per n.
Questo insieme numerico viene indicato con il simbolo

Zn = {0, 1, . . . , n − 2, n − 1}
Generalizziamo: Aritmetica modulare
Non c’è niente di speciale nel numero 12. Sostituiamolo con un
numero intero n qualsiasi, purchè maggiore di 1.
I numeri del nostro ambiente sono: 0, 1, 2, . . . , n − 1
Le operazioni sono intese in questo modo:
1 a + b (mod n) è il resto della divisione di a + b per n;
2 a · b (mod n) è il resto della divisione di a · b per n.
Questo insieme numerico viene indicato con il simbolo

Zn = {0, 1, . . . , n − 2, n − 1}

Quando è chiaro che ci stiamo riferendo ad operazioni in Zn


possiamo omettere l’espressione (mod n).
Generalizziamo: Aritmetica modulare
Non c’è niente di speciale nel numero 12. Sostituiamolo con un
numero intero n qualsiasi, purchè maggiore di 1.
I numeri del nostro ambiente sono: 0, 1, 2, . . . , n − 1
Le operazioni sono intese in questo modo:
1 a + b (mod n) è il resto della divisione di a + b per n;
2 a · b (mod n) è il resto della divisione di a · b per n.
Questo insieme numerico viene indicato con il simbolo

Zn = {0, 1, . . . , n − 2, n − 1}

Quando è chiaro che ci stiamo riferendo ad operazioni in Zn


possiamo omettere l’espressione (mod n).

Esercizio 3
Calcolare: 21 + 23 (mod 14), 21 · 23 (mod 19), 2210 (mod 20),
senza usare la calcolatrice
Esempio crittografico: n = 21

Gli elementi di Z21 sono identificati con le lettere dell’alfabeto


A 0
B 1
C 2
D 3
E 4
F 5
G 6
H 7
I 8
L 9
M 10
N 11
O 12
P 13
Q 14
R 15
S 16
T 17
U 18
V 19
Z 20
Il cifrario di Cesare:
Testi in chiaro: Z21
Testi cifrati: Z21
Chiavi: Z21
Codifica: ek (x) = x + k (mod 21)
Il cifrario di Cesare:
Testi in chiaro: Z21
Testi cifrati: Z21
Chiavi: Z21
Codifica: ek (x) = x + k (mod 21)

Una possibile generalizzazione:


Testi in chiaro: Z21
Testi cifrati: Z21
Chiavi: Z21 × Z21
Codifica: ea,b (x) = a · x + b (mod 21)
Esperimento 1
A gruppi di 4, calcolate le funzioni di codifica relative alle seguenti
chiavi: (3, 0), (3, 1), (2, 0), (2, 1). Discutere i risultati ottenuti.
Esperimento 1
A gruppi di 4, calcolate le funzioni di codifica relative alle seguenti
chiavi: (3, 0), (3, 1), (2, 0), (2, 1). Discutere i risultati ottenuti.

Perchè le chiavi con a = 3 non sono adeguate mentre quelle


con a = 2 sı̀?
Esperimento 1
A gruppi di 4, calcolate le funzioni di codifica relative alle seguenti
chiavi: (3, 0), (3, 1), (2, 0), (2, 1). Discutere i risultati ottenuti.

Perchè le chiavi con a = 3 non sono adeguate mentre quelle


con a = 2 sı̀?
Quale è secondo voi la motivazione di natura matematica?
Esperimento 1
A gruppi di 4, calcolate le funzioni di codifica relative alle seguenti
chiavi: (3, 0), (3, 1), (2, 0), (2, 1). Discutere i risultati ottenuti.

Perchè le chiavi con a = 3 non sono adeguate mentre quelle


con a = 2 sı̀?
Quale è secondo voi la motivazione di natura matematica?
a · x1 = a · x2 per qualche x1 6= x2
Esperimento 1
A gruppi di 4, calcolate le funzioni di codifica relative alle seguenti
chiavi: (3, 0), (3, 1), (2, 0), (2, 1). Discutere i risultati ottenuti.

Perchè le chiavi con a = 3 non sono adeguate mentre quelle


con a = 2 sı̀?
Quale è secondo voi la motivazione di natura matematica?
a · x1 = a · x2 per qualche x1 6= x2

Quale congettura di carattere generale vi sentireste di


formulare al riguardo? Come si distinguono le chiavi valide da
quelle non valide (se necessario, provate anche altre chiavi!)
Esperimento 1
A gruppi di 4, calcolate le funzioni di codifica relative alle seguenti
chiavi: (3, 0), (3, 1), (2, 0), (2, 1). Discutere i risultati ottenuti.

Perchè le chiavi con a = 3 non sono adeguate mentre quelle


con a = 2 sı̀?
Quale è secondo voi la motivazione di natura matematica?
a · x1 = a · x2 per qualche x1 6= x2

Quale congettura di carattere generale vi sentireste di


formulare al riguardo? Come si distinguono le chiavi valide da
quelle non valide (se necessario, provate anche altre chiavi!)
Come provereste a dimostrare tale congettura?
Esperimento 1
A gruppi di 4, calcolate le funzioni di codifica relative alle seguenti
chiavi: (3, 0), (3, 1), (2, 0), (2, 1). Discutere i risultati ottenuti.

Perchè le chiavi con a = 3 non sono adeguate mentre quelle


con a = 2 sı̀?
Quale è secondo voi la motivazione di natura matematica?
a · x1 = a · x2 per qualche x1 6= x2

Quale congettura di carattere generale vi sentireste di


formulare al riguardo? Come si distinguono le chiavi valide da
quelle non valide (se necessario, provate anche altre chiavi!)
Come provereste a dimostrare tale congettura?
deve esistere x con ax = 1 (mod 21) ⇒ ax = c · 21 + 1. Ciò è implica MCD(a, 21) = 1. Viceversa, se

MCD(a, 21) = 1 allora ax1 = ax2 non può mai verificarsi dato che 21 divide a(x1 − x2 )
Cifrario affine

Testi in chiaro: Z21


Testi cifrati: Z21
Chiavi: A × Z21 dove
A = {a ∈ Z21 | MCD(a, 21) = 1} =
{1, 2, 4, 5, 8, 10, 11, 13, 16, 17, 19, 20}
Codifica: ea,b (x) = a · x + b (mod 21)
Cifrario affine

Testi in chiaro: Z21


Testi cifrati: Z21
Chiavi: A × Z21 dove
A = {a ∈ Z21 | MCD(a, 21) = 1} =
{1, 2, 4, 5, 8, 10, 11, 13, 16, 17, 19, 20}
Codifica: ea,b (x) = a · x + b (mod 21)

Gara 2
Decodificare il seguente messaggio, sapendo che è stato cifrato con
un cifrario affine:
lo qtpobzh avb pmt eohvdo ctznvt od rmtcgh ponbvgoztdgh ntv sb
nvhccozb stuohdt
link verifica: www.dmi.unipg.it/giuliet/MIP.txt
La divisione in Zn
.
Abbiamo visto che in Z21 vale la seguente proprietà:
MCD(a, 21) = 1 ⇔ esiste b in Z21 con ab = 1 (mod 21)
La divisione in Zn
.
Abbiamo visto che in Z21 vale la seguente proprietà:
MCD(a, 21) = 1 ⇔ esiste b in Z21 con ab = 1 (mod 21)

È facile dimostrare che la stessa proprietà vale in Zn :


MCD(a, n) = 1 ⇔ esiste b in Zn con ab = 1 (mod n)
La divisione in Zn
.
Abbiamo visto che in Z21 vale la seguente proprietà:
MCD(a, 21) = 1 ⇔ esiste b in Z21 con ab = 1 (mod 21)

È facile dimostrare che la stessa proprietà vale in Zn :


MCD(a, n) = 1 ⇔ esiste b in Zn con ab = 1 (mod n)

Nell’ambiente numerico Zn la divisione non è sempre possibile:


1
a esiste se e solo se MCD(a, n) = 1
La divisione in Zn
.
Abbiamo visto che in Z21 vale la seguente proprietà:
MCD(a, 21) = 1 ⇔ esiste b in Z21 con ab = 1 (mod 21)

È facile dimostrare che la stessa proprietà vale in Zn :


MCD(a, n) = 1 ⇔ esiste b in Zn con ab = 1 (mod n)

Nell’ambiente numerico Zn la divisione non è sempre possibile:


1
a esiste se e solo se MCD(a, n) = 1

Problema: come calcolare 1/a?


La divisione in Zn
.
Abbiamo visto che in Z21 vale la seguente proprietà:
MCD(a, 21) = 1 ⇔ esiste b in Z21 con ab = 1 (mod 21)

È facile dimostrare che la stessa proprietà vale in Zn :


MCD(a, n) = 1 ⇔ esiste b in Zn con ab = 1 (mod n)

Nell’ambiente numerico Zn la divisione non è sempre possibile:


1
a esiste se e solo se MCD(a, n) = 1

Problema: come calcolare 1/a?

Esperimento 2
Calcolare (se possibile):
1
2 in Z23
1
4 in Z9
1
2 in Z22
1
in Z22
Un metodo più veloce: l’algoritmo euclideo
n dividendo; a divisore
divisione euclidea: n = qa + r con 0 ≤ r ≤ a − 1
poniamo q := q0 e r := r1
Un metodo più veloce: l’algoritmo euclideo
n dividendo; a divisore
divisione euclidea: n = qa + r con 0 ≤ r ≤ a − 1
poniamo q := q0 e r := r1
Passi successivi:
a = q1 r1 + r2
r1 = q2 r2 + r3
r2 = q3 r3 + r4
...
ri −1 = qi ri + ri +1
...
Un metodo più veloce: l’algoritmo euclideo
n dividendo; a divisore
divisione euclidea: n = qa + r con 0 ≤ r ≤ a − 1
poniamo q := q0 e r := r1
Passi successivi:
a = q1 r1 + r2
r1 = q2 r2 + r3
r2 = q3 r3 + r4
...
ri −1 = qi ri + ri +1
...
Ad un certo punto il resto diventa uguale a 0. L’ultimo resto
non nullo è il Massimo Comun Divisore di n e a.
Un metodo più veloce: l’algoritmo euclideo
n dividendo; a divisore
divisione euclidea: n = qa + r con 0 ≤ r ≤ a − 1
poniamo q := q0 e r := r1
Passi successivi:
a = q1 r1 + r2
r1 = q2 r2 + r3
r2 = q3 r3 + r4
...
ri −1 = qi ri + ri +1
...
Ad un certo punto il resto diventa uguale a 0. L’ultimo resto
non nullo è il Massimo Comun Divisore di n e a.
Nel caso in cui MCD(n, a) = 1 è facile trovare x, y tali che
1 = nx + ay .
Un metodo più veloce: l’algoritmo euclideo
n dividendo; a divisore
divisione euclidea: n = qa + r con 0 ≤ r ≤ a − 1
poniamo q := q0 e r := r1
Passi successivi:
a = q1 r1 + r2
r1 = q2 r2 + r3
r2 = q3 r3 + r4
...
ri −1 = qi ri + ri +1
...
Ad un certo punto il resto diventa uguale a 0. L’ultimo resto
non nullo è il Massimo Comun Divisore di n e a.
Nel caso in cui MCD(n, a) = 1 è facile trovare x, y tali che
1 = nx + ay .
Conseguenza: y mod n è proprio 1/a in Zn
Esempio
Come trovare l’inverso di 12 in Z53 ?
Esempio
Come trovare l’inverso di 12 in Z53 ?
Algoritmo euclideo
53 = 4 · 12 + 5
12 = 2 · 5 + 2
5=2·2+1
2=2·1+0
Esempio
Come trovare l’inverso di 12 in Z53 ?
Algoritmo euclideo
53 = 4 · 12 + 5 ⇒ 5 = 53 − 4 · 12
12 = 2 · 5 + 2 ⇒ 2 = 12 − 2 · 5
5=2·2+1 ⇒1 =5−2·2
2=2·1+0
Risalendo le uguaglianze dal basso si scopre che...
1 = 5−2·2
1 = 5 − 2(12 − 2 · 5)
1 = (53 − 4 · 12) − 2(12 − 2 · (53 − 4 · 12))
1 = 5 · 53 − 22 · 12
Esempio
Come trovare l’inverso di 12 in Z53 ?
Algoritmo euclideo
53 = 4 · 12 + 5 ⇒ 5 = 53 − 4 · 12
12 = 2 · 5 + 2 ⇒ 2 = 12 − 2 · 5
5=2·2+1 ⇒1 =5−2·2
2=2·1+0
Risalendo le uguaglianze dal basso si scopre che...
1 = 5−2·2
1 = 5 − 2(12 − 2 · 5)
1 = (53 − 4 · 12) − 2(12 − 2 · (53 − 4 · 12))
1 = 5 · 53 − 22 · 12
Pertanto
1
−22 · 12 = 1 (mod 53) ⇒ = −22 = 31 (mod 53)
12
Esempio
Come trovare l’inverso di 12 in Z53 ?
Algoritmo euclideo
53 = 4 · 12 + 5 ⇒ 5 = 53 − 4 · 12
12 = 2 · 5 + 2 ⇒ 2 = 12 − 2 · 5
5=2·2+1 ⇒1 =5−2·2
2=2·1+0
Risalendo le uguaglianze dal basso si scopre che...
1 = 5−2·2
1 = 5 − 2(12 − 2 · 5)
1 = (53 − 4 · 12) − 2(12 − 2 · (53 − 4 · 12))
1 = 5 · 53 − 22 · 12
Pertanto
1
−22 · 12 = 1 (mod 53) ⇒ = −22 = 31 (mod 53)
12

Gara 3
Determinare 1/11 in Z63
L’algoritmo euclideo nel linguaggio MAGMA

Istruzioni

r:=(a mod b);


while (r ne 0) do
a:=b;
b:=r;
r:=(a mod b);
end while;
MCD:=b;
MCD;
L’algoritmo euclideo nel linguaggio MAGMA

Istruzioni con contapassi

r:=(a mod b);


cont:=1;
while (r ne 0) do
a:=b;
b:=r;
r:=(a mod b);
cont:=cont+1;
end while;
MCD:=b;
MCD;
cont;
Esperimento 3
Calcolare con MAGMA i MCD di coppie di numeri sempre più
grandi e il numero di divisioni effettuate.

Quanti passi vi aspettavate in teoria? (ordine di grandezza


rispetto a b)
Esperimento 3
Calcolare con MAGMA i MCD di coppie di numeri sempre più
grandi e il numero di divisioni effettuate.

Quanti passi vi aspettavate in teoria? (ordine di grandezza


rispetto a b)
Quanti passi sono stati necessari in realtà?
Esperimento 3
Calcolare con MAGMA i MCD di coppie di numeri sempre più
grandi e il numero di divisioni effettuate.

Quanti passi vi aspettavate in teoria? (ordine di grandezza


rispetto a b)
Quanti passi sono stati necessari in realtà?
Quale congettura potreste formulare relativamente a tale
numero di passi? (Suggerimento: provare divisori che siano
potenze di 2)
Esperimento 3
Calcolare con MAGMA i MCD di coppie di numeri sempre più
grandi e il numero di divisioni effettuate.

Quanti passi vi aspettavate in teoria? (ordine di grandezza


rispetto a b)
Quanti passi sono stati necessari in realtà?
Quale congettura potreste formulare relativamente a tale
numero di passi? (Suggerimento: provare divisori che siano
potenze di 2)
Come potreste provare tale congettura?
Esperimento 3
Calcolare con MAGMA i MCD di coppie di numeri sempre più
grandi e il numero di divisioni effettuate.

Quanti passi vi aspettavate in teoria? (ordine di grandezza


rispetto a b)
Quanti passi sono stati necessari in realtà?
Quale congettura potreste formulare relativamente a tale
numero di passi? (Suggerimento: provare divisori che siano
potenze di 2)
Come potreste provare tale congettura?
ri −1 ≥ ri + ri +1 ≥ 2ri +1
Confronto con il metodo della scuola media...

Esperimento 4
Provate ad usare MAGMA per calcolare il massimo comun
divisore di numeri sempre più grandi. Potete usare
direttamante il comando GCD(a,b)
Sempre con MAGMA, fattorizzate quegli stessi numeri con il
comando
Factorization(n);
Confrontate i tempi di esecuzione.
Confronto con il metodo della scuola media...

Esperimento 4
Provate ad usare MAGMA per calcolare il massimo comun
divisore di numeri sempre più grandi. Potete usare
direttamante il comando GCD(a,b)
Sempre con MAGMA, fattorizzate quegli stessi numeri con il
comando
Factorization(n);
Confrontate i tempi di esecuzione.
Esempio:
a = 1000000000000000000000000000060
3000000000000000000000000001881
b = 10000000000000000000000000000000
00000000000000001231231231234
Confrontare GCD(a,b) con Factorization(a)
Primo Riepilogo

Nell’aritmetica modulare:
Somma e prodotto:
Primo Riepilogo

Nell’aritmetica modulare:
Somma e prodotto: veloci
Primo Riepilogo

Nell’aritmetica modulare:
Somma e prodotto: veloci
Divisione:
Primo Riepilogo

Nell’aritmetica modulare:
Somma e prodotto: veloci
Divisione: veloce - algoritmo euclideo
Primo Riepilogo

Nell’aritmetica modulare:
Somma e prodotto: veloci
Divisione: veloce - algoritmo euclideo
Fattorizzazione:
Primo Riepilogo

Nell’aritmetica modulare:
Somma e prodotto: veloci
Divisione: veloce - algoritmo euclideo
Fattorizzazione: lenta
Primo Riepilogo

Nell’aritmetica modulare:
Somma e prodotto: veloci
Divisione: veloce - algoritmo euclideo
Fattorizzazione: lenta
Elevamento a potenza: ?
Primo Riepilogo

Nell’aritmetica modulare:
Somma e prodotto: veloci
Divisione: veloce - algoritmo euclideo
Fattorizzazione: lenta
Elevamento a potenza: ?
Logaritmo: ?
Il vero cifrario di Diffie-Hellman
Chiave pubblica: (1) un numero primo p; (2) un elemento di
Zp , diciamo A; (3) una potenza di A, diciamo AB (mod p).
Chiave privata: l’esponente B (compreso fra 1 e p − 2).
Codifica di un messaggio M ∈ Zp : il mittente sceglie un
intero casuale compreso fra 1 e p − 2, diciamo C e invia, i
valori (M · (AB )C , AC ).
Decodifica di un messaggio (α, β): M = α/β B .
Il vero cifrario di Diffie-Hellman
Chiave pubblica: (1) un numero primo p; (2) un elemento di
Zp , diciamo A; (3) una potenza di A, diciamo AB (mod p).
Chiave privata: l’esponente B (compreso fra 1 e p − 2).
Codifica di un messaggio M ∈ Zp : il mittente sceglie un
intero casuale compreso fra 1 e p − 2, diciamo C e invia, i
valori (M · (AB )C , AC ).
Decodifica di un messaggio (α, β): M = α/β B .

Gara 4
Divisi in tre squadre, impersonate i ruoli di mittente, opponente e
destinatario. Supponiamo che parte della chiave pubblica del
destinatario sia p = 29, A = 2. La squadra destinatario sceglie B e
comunica a tutta la classe AB (mod p). Misuriamo i tempi in cui:
la squadra mittente codifica un messaggio scelto a caso
la squadra destinatario decodifica tale messaggio
la squadra opponente decodifica tale messaggio
Elevamento a potenza in Zn
Sia n un numero di 1024 cifre binarie (circa 308 cifre decimali).
Problema: Fissato A in Zn , e B esponente compreso fra 1 e
n − 1, quante moltiplicazioni in Zn sono necessarie per calcolare
AB (mod n)?
Elevamento a potenza in Zn
Sia n un numero di 1024 cifre binarie (circa 308 cifre decimali).
Problema: Fissato A in Zn , e B esponente compreso fra 1 e
n − 1, quante moltiplicazioni in Zn sono necessarie per calcolare
AB (mod n)?

Esperimento 5
Scegliere un numero n con 300 cifre (esempio:
10300 + 1378543)
Scegliere due numeri A e B minori di n
Provare a calcolare con MAGMA il prodotto A · A · A · · ·
(mod n) per B volte
Elevamento a potenza in Zn
Sia n un numero di 1024 cifre binarie (circa 308 cifre decimali).
Problema: Fissato A in Zn , e B esponente compreso fra 1 e
n − 1, quante moltiplicazioni in Zn sono necessarie per calcolare
AB (mod n)?

Esperimento 5
Scegliere un numero n con 300 cifre (esempio:
10300 + 1378543)
Scegliere due numeri A e B minori di n
Provare a calcolare con MAGMA il prodotto A · A · A · · ·
(mod n) per B volte

Deve esistere un metodo molto più veloce, altrimenti non


potremmo usare Diffie-Hellman!
Elevamento a potenza in Zn
Sia n un numero di 1024 cifre binarie (circa 308 cifre decimali).
Problema: Fissato A in Zn , e B esponente compreso fra 1 e
n − 1, quante moltiplicazioni in Zn sono necessarie per calcolare
AB (mod n)?

Esperimento 5
Scegliere un numero n con 300 cifre (esempio:
10300 + 1378543)
Scegliere due numeri A e B minori di n
Provare a calcolare con MAGMA il prodotto A · A · A · · ·
(mod n) per B volte

Deve esistere un metodo molto più veloce, altrimenti non


potremmo usare Diffie-Hellman!
Tentiamo con il comando Modexp(A,B,n)
Elevamento a potenza in Zn
Sia n un numero di 1024 cifre binarie (circa 308 cifre decimali).
Problema: Fissato A in Zn , e B esponente compreso fra 1 e
n − 1, quante moltiplicazioni in Zn sono necessarie per calcolare
AB (mod n)?

Esperimento 5
Scegliere un numero n con 300 cifre (esempio:
10300 + 1378543)
Scegliere due numeri A e B minori di n
Provare a calcolare con MAGMA il prodotto A · A · A · · ·
(mod n) per B volte

Deve esistere un metodo molto più veloce, altrimenti non


potremmo usare Diffie-Hellman!
Tentiamo con il comando Modexp(A,B,n)
Quale potrebbe essere l’idea alla base di Modexp?
Square and Multiply

Supponiamo di voler calcolare 35637 (mod 832)


Square and Multiply

Supponiamo di voler calcolare 35637 (mod 832)


Sfruttiamo la scrittura di 637 in base 2:

637 = 1001111101 = 512 + 64 + 32 + 16 + 8 + 4 + 1

e quindi

35637 (mod 832) = 35512 ·3564 ·3532 ·3516 ·358 ·354 ·351 (mod 832);

apparentemente il problema non sembra semplificato.


Square and Multiply

Supponiamo di voler calcolare 35637 (mod 832)


Sfruttiamo la scrittura di 637 in base 2:

637 = 1001111101 = 512 + 64 + 32 + 16 + 8 + 4 + 1

e quindi

35637 (mod 832) = 35512 ·3564 ·3532 ·3516 ·358 ·354 ·351 (mod 832);

apparentemente il problema non sembra semplificato.


Ma 352 = 79 (mod 832) e possiamo proseguire con le
potenze di 2 e calcolare 354 (mod 832): basta osservare che
354 = 352 · 352 (mod 832) e quindi 354 = 792 = 129
(mod 832)
Procedendo con lo stesso sistema si ottengono:
352 = 79 (mod 832)
354 = 792 = 129 (mod 832)
358 = 1292 = 215 (mod 832)
3516 = 2152 = 3 (mod 832)
3532 = 32 = 9 (mod 832)
3564 = 92 = 81 (mod 832)
35128 = 812 = 67 (mod 832)
35256 = 672 = 287 (mod 832)
35512 = 2872 = 239 (mod 832)
Procedendo con lo stesso sistema si ottengono:
352 = 79 (mod 832)
354 = 792 = 129 (mod 832)
358 = 1292 = 215 (mod 832)
3516 = 2152 = 3 (mod 832)
3532 = 32 = 9 (mod 832)
3564 = 92 = 81 (mod 832)
35128 = 812 = 67 (mod 832)
35256 = 672 = 287 (mod 832)
35512 = 2872 = 239 (mod 832)
Quindi 35637 (mod 832) = 239 · 81 · 9 · 3 · 215 · 129 · 35 (mod 832).
Il risultato finale 35367 = 121 (mod 832)
Procedendo con lo stesso sistema si ottengono:
352 = 79 (mod 832)
354 = 792 = 129 (mod 832)
358 = 1292 = 215 (mod 832)
3516 = 2152 = 3 (mod 832)
3532 = 32 = 9 (mod 832)
3564 = 92 = 81 (mod 832)
35128 = 812 = 67 (mod 832)
35256 = 672 = 287 (mod 832)
35512 = 2872 = 239 (mod 832)
Quindi 35637 (mod 832) = 239 · 81 · 9 · 3 · 215 · 129 · 35 (mod 832).
Il risultato finale 35367 = 121 (mod 832)

Esercizio 4
Calcolare col metodo square and multiply le seguenti potenze
modulo n = 92:
1 7237
2 2453
Secondo Riepilogo

Nell’aritmetica modulare:
Somma e prodotto: veloci
Divisione: veloce - algoritmo euclideo
Elevamento a potenza: veloce - square and multiply
Fattorizzazione: lenta
Secondo Riepilogo

Nell’aritmetica modulare:
Somma e prodotto: veloci
Divisione: veloce - algoritmo euclideo
Elevamento a potenza: veloce - square and multiply
Fattorizzazione: lenta
Logaritmo: ?
Logaritmo in Zn

Esperimento 6
Scrivere tutte le potenze di 2 in R con esponente compreso
fra 1 e 200
Ripetere lo stesso conteggio modulo p, con p = 557
Discutere i risultati ottenuti
Logaritmo in Zn

Esperimento 6
Scrivere tutte le potenze di 2 in R con esponente compreso
fra 1 e 200
Ripetere lo stesso conteggio modulo p, con p = 557
Discutere i risultati ottenuti

Conseguenza: Non esistono algoritmi veloci per il calcolo di


logaritmi in aritmetica modulare
Riepilogo

Nell’aritmetica modulare:
Somma e prodotto: veloci
Divisione: veloce - algoritmo euclideo
Elevamento a potenza: veloce - square and multiply
Logaritmo: lento
Fattorizzazione: lenta
La funzione toziente di Eulero
Problema: Quanti sono gli elementi invertibili in Zn ?
La funzione toziente di Eulero
Problema: Quanti sono gli elementi invertibili in Zn ?

Il numero di questi elementi si indica con φ(n). La funzione φ si


chiama funzione toziente di Eulero
La funzione toziente di Eulero
Problema: Quanti sono gli elementi invertibili in Zn ?

Il numero di questi elementi si indica con φ(n). La funzione φ si


chiama funzione toziente di Eulero

Se n è un numero primo, quanto vale φ(n)?


La funzione toziente di Eulero
Problema: Quanti sono gli elementi invertibili in Zn ?

Il numero di questi elementi si indica con φ(n). La funzione φ si


chiama funzione toziente di Eulero

Se n è un numero primo, quanto vale φ(n)? n-1

Il caso più interessante per noi è quello in cui n = pq, dove p e q


sono numeri primi.
La funzione toziente di Eulero
Problema: Quanti sono gli elementi invertibili in Zn ?

Il numero di questi elementi si indica con φ(n). La funzione φ si


chiama funzione toziente di Eulero

Se n è un numero primo, quanto vale φ(n)? n-1

Il caso più interessante per noi è quello in cui n = pq, dove p e q


sono numeri primi.
Esperimento 7
Determinare φ(n) per n = 6, 10, 15, 21, . . ..
La funzione toziente di Eulero
Problema: Quanti sono gli elementi invertibili in Zn ?

Il numero di questi elementi si indica con φ(n). La funzione φ si


chiama funzione toziente di Eulero

Se n è un numero primo, quanto vale φ(n)? n-1

Il caso più interessante per noi è quello in cui n = pq, dove p e q


sono numeri primi.
Esperimento 7
Determinare φ(n) per n = 6, 10, 15, 21, . . ..
Congetturare una regola generale per φ(n) nel caso n = pq
con p, q primi.
La funzione toziente di Eulero
Problema: Quanti sono gli elementi invertibili in Zn ?

Il numero di questi elementi si indica con φ(n). La funzione φ si


chiama funzione toziente di Eulero

Se n è un numero primo, quanto vale φ(n)? n-1

Il caso più interessante per noi è quello in cui n = pq, dove p e q


sono numeri primi.
Esperimento 7
Determinare φ(n) per n = 6, 10, 15, 21, . . ..
Congetturare una regola generale per φ(n) nel caso n = pq
con p, q primi.
Provare a dimostrare tale congettura.
Il piccolo Teorema di Fermat

Esperimento 8
Scrivere le potenze di tutti gli elementi non nulli di Z5 ;
Il piccolo Teorema di Fermat

Esperimento 8
Scrivere le potenze di tutti gli elementi non nulli di Z5 ;
Scrivere le potenze di tutti gli elementi non nulli di Z7 ;
Il piccolo Teorema di Fermat

Esperimento 8
Scrivere le potenze di tutti gli elementi non nulli di Z5 ;
Scrivere le potenze di tutti gli elementi non nulli di Z7 ;
Scrivere le potenze di tutti gli elementi non nulli di Z11 ;
Il piccolo Teorema di Fermat

Esperimento 8
Scrivere le potenze di tutti gli elementi non nulli di Z5 ;
Scrivere le potenze di tutti gli elementi non nulli di Z7 ;
Scrivere le potenze di tutti gli elementi non nulli di Z11 ;
Osservare i risultati
Il piccolo Teorema di Fermat

Esperimento 8
Scrivere le potenze di tutti gli elementi non nulli di Z5 ;
Scrivere le potenze di tutti gli elementi non nulli di Z7 ;
Scrivere le potenze di tutti gli elementi non nulli di Z11 ;
Osservare i risultati
Formulare una congettura generale sul valore di ap (mod p)
Il piccolo Teorema di Fermat

Esperimento 8
Scrivere le potenze di tutti gli elementi non nulli di Z5 ;
Scrivere le potenze di tutti gli elementi non nulli di Z7 ;
Scrivere le potenze di tutti gli elementi non nulli di Z11 ;
Osservare i risultati
Formulare una congettura generale sul valore di ap (mod p)
Provare a dimostrare tale congettura
Il piccolo Teorema di Fermat

Esperimento 8
Scrivere le potenze di tutti gli elementi non nulli di Z5 ;
Scrivere le potenze di tutti gli elementi non nulli di Z7 ;
Scrivere le potenze di tutti gli elementi non nulli di Z11 ;
Osservare i risultati
Formulare una congettura generale sul valore di ap (mod p)
Provare a dimostrare tale congettura

Teorema 1 (Piccolo teorema di Fermat)


Sia p un numero primo e sia a un intero qualsiasi. Allora

ap = a (mod p)
Se a = 0 (mod p), allora ap = a = 0 (mod p)
Se a = 0 (mod p), allora ap = a = 0 (mod p)
Se a 6= 0 (mod p), allora possiamo consideriamo le potenze di
a = a0 , a1 , a2 , . . ., tutte calcolate (mod p)
Se a = 0 (mod p), allora ap = a = 0 (mod p)
Se a 6= 0 (mod p), allora possiamo consideriamo le potenze di
a = a0 , a1 , a2 , . . ., tutte calcolate (mod p)
Per qualche 0 ≤ i ≤ j ≤ p − 1 si avranno due potenze uguali:
ai = aj (mod p) (perchè?)
Se a = 0 (mod p), allora ap = a = 0 (mod p)
Se a 6= 0 (mod p), allora possiamo consideriamo le potenze di
a = a0 , a1 , a2 , . . ., tutte calcolate (mod p)
Per qualche 0 ≤ i ≤ j ≤ p − 1 si avranno due potenze uguali:
ai = aj (mod p) (perchè?)
Questo vuol dire che aj−i = 1 (mod p) (perché?)
Se a = 0 (mod p), allora ap = a = 0 (mod p)
Se a 6= 0 (mod p), allora possiamo consideriamo le potenze di
a = a0 , a1 , a2 , . . ., tutte calcolate (mod p)
Per qualche 0 ≤ i ≤ j ≤ p − 1 si avranno due potenze uguali:
ai = aj (mod p) (perchè?)
Questo vuol dire che aj−i = 1 (mod p) (perché?)
Sia s ≤ p − 1 il minimo intero positivo tale che as = 1
(mod p)
Se a = 0 (mod p), allora ap = a = 0 (mod p)
Se a 6= 0 (mod p), allora possiamo consideriamo le potenze di
a = a0 , a1 , a2 , . . ., tutte calcolate (mod p)
Per qualche 0 ≤ i ≤ j ≤ p − 1 si avranno due potenze uguali:
ai = aj (mod p) (perchè?)
Questo vuol dire che aj−i = 1 (mod p) (perché?)
Sia s ≤ p − 1 il minimo intero positivo tale che as = 1
(mod p)
Le potenze distinte di a sono 1, a, a2 , . . . , as−1 . Dopodichè,
dato che as = 1, si ripetono.
Per ogni b ∈ Zp , gli elementi b, ba, ba2 , . . . , bas−1 sono in
numero di s
Se a = 0 (mod p), allora ap = a = 0 (mod p)
Se a 6= 0 (mod p), allora possiamo consideriamo le potenze di
a = a0 , a1 , a2 , . . ., tutte calcolate (mod p)
Per qualche 0 ≤ i ≤ j ≤ p − 1 si avranno due potenze uguali:
ai = aj (mod p) (perchè?)
Questo vuol dire che aj−i = 1 (mod p) (perché?)
Sia s ≤ p − 1 il minimo intero positivo tale che as = 1
(mod p)
Le potenze distinte di a sono 1, a, a2 , . . . , as−1 . Dopodichè,
dato che as = 1, si ripetono.
Per ogni b ∈ Zp , gli elementi b, ba, ba2 , . . . , bas−1 sono in
numero di s
L’insieme degli elementi non nulli di Zp è ripartito in tali
gruppi di s elementi
Se a = 0 (mod p), allora ap = a = 0 (mod p)
Se a 6= 0 (mod p), allora possiamo consideriamo le potenze di
a = a0 , a1 , a2 , . . ., tutte calcolate (mod p)
Per qualche 0 ≤ i ≤ j ≤ p − 1 si avranno due potenze uguali:
ai = aj (mod p) (perchè?)
Questo vuol dire che aj−i = 1 (mod p) (perché?)
Sia s ≤ p − 1 il minimo intero positivo tale che as = 1
(mod p)
Le potenze distinte di a sono 1, a, a2 , . . . , as−1 . Dopodichè,
dato che as = 1, si ripetono.
Per ogni b ∈ Zp , gli elementi b, ba, ba2 , . . . , bas−1 sono in
numero di s
L’insieme degli elementi non nulli di Zp è ripartito in tali
gruppi di s elementi
s divide p − 1
Il Teorema di Eulero - forma debole
L’argomento vale per ogni n sostituendo l’espressione elementi non
nulli di Zp con elementi invertibili in Zn .
Il Teorema di Eulero - forma debole
L’argomento vale per ogni n sostituendo l’espressione elementi non
nulli di Zp con elementi invertibili in Zn .

Teorema 2 (Teorema di Eulero - forma debole)


Sia n un intero positivo e sia a un elemento di Zn tale che
MCD(a, n) = 1. Allora

akφ(n)+1 = a (mod n)
Il Teorema di Eulero - forma debole
L’argomento vale per ogni n sostituendo l’espressione elementi non
nulli di Zp con elementi invertibili in Zn .

Teorema 2 (Teorema di Eulero - forma debole)


Sia n un intero positivo e sia a un elemento di Zn tale che
MCD(a, n) = 1. Allora

akφ(n)+1 = a (mod n)

Esercizio 5
Verificare il Teorema di Eulero in forma debole per le seguenti
coppie di interi: n = 10, a = 3; n = 20, a = 3; n = 15, a = 7.
Il Teorema di Eulero - forma debole
L’argomento vale per ogni n sostituendo l’espressione elementi non
nulli di Zp con elementi invertibili in Zn .

Teorema 2 (Teorema di Eulero - forma debole)


Sia n un intero positivo e sia a un elemento di Zn tale che
MCD(a, n) = 1. Allora

akφ(n)+1 = a (mod n)

Esercizio 5
Verificare il Teorema di Eulero in forma debole per le seguenti
coppie di interi: n = 10, a = 3; n = 20, a = 3; n = 15, a = 7.

Esperimento 9
L’ipotesi MCD(a, n) = 1 è veramente necessaria. Il comando
MAGMA per la funzione di Eulero è EulerPhi(n).
Il Teorema di Eulero - forma debole
L’argomento vale per ogni n sostituendo l’espressione elementi non
nulli di Zp con elementi invertibili in Zn .

Teorema 2 (Teorema di Eulero - forma debole)


Sia n un intero positivo e sia a un elemento di Zn tale che
MCD(a, n) = 1. Allora

akφ(n)+1 = a (mod n)

Esercizio 5
Verificare il Teorema di Eulero in forma debole per le seguenti
coppie di interi: n = 10, a = 3; n = 20, a = 3; n = 15, a = 7.

Esperimento 9
L’ipotesi MCD(a, n) = 1 è veramente necessaria. Il comando
MAGMA per la funzione di Eulero è EulerPhi(n).

controesempi per n = 8, 12, 16, 20, 24, 28, 32 e a = 2


Il Teorema di Eulero - forma RSA

Teorema 3 (Teorema di Eulero - forma debole)


Sia n un intero positivo della forma n = pq con p e q primi, e sia a
un elemento qualsiasi di Zn . Allora

akφ(n)+1 = a (mod n)
Il Teorema di Eulero - forma RSA

Teorema 3 (Teorema di Eulero - forma debole)


Sia n un intero positivo della forma n = pq con p e q primi, e sia a
un elemento qualsiasi di Zn . Allora

akφ(n)+1 = a (mod n)

Esperimento 10
Verificare il Teorema per un certo numero di casi con l’aiuto di
Magma.
Il crittosistema RSA: esempio
Chiave pubblica di Ryanair:
Modulo (1024 bit):
AE 64 DD 3D 64 45 D9 56 AB 5B 18 D1 03 3F 68 6B F4 F7 73
5B A1 C7 B3 1D CE A8 3E 57 FC B0 51 86 81 E0 81 AC C1 72
F5 4F E0 F5 8E 47 5B 93 D6 33 D6 21 F9 9F 81 10 18 C5 47 C1
33 94 1B D1 3A 88 5B 3B 32 92 49 75 0A 92 8E 17 0A 74 F7 EA
C0 E5 A9 BD E2 02 84 FC 86 C2 F3 98 64 74 FE AA D4 8D 8D
8F CD 95 65 83 25 B9 DE D3 47 C1 A6 33 C9 F2 A8 A8 DC 02
3F C3 4F 4A A7 F3 D2 A4 69 A8 15 E5

Esponente pubblico:
01 00 01

Convertitore: http://www.darkfader.net/toolbox/convert/
Modulo:
n=1224636320672332376854929347869119904
0477093210821604946093123578879723617610
5263908162964225569626674489521384482266
08721094478164975540605363932171762349
33981903827508484426161207150970417382312
3612861195507350855476831120652049276
218003093539439507232494194792472213278435
5728552674799561849761300834948581

Esponente pubblico:
e=65537
RSA

Chiave pubblica: n, e
RSA

Chiave pubblica: n, e
Chiave privata:
1 p, q numeri primi tali che n = p · q
2 d ∈ Zφ(n) tale che d = 1/e (mod φ(n))
RSA

Chiave pubblica: n, e
Chiave privata:
1 p, q numeri primi tali che n = p · q
2 d ∈ Zφ(n) tale che d = 1/e (mod φ(n))
Codifica di un messaggio M ∈ Zn :

Me (mod n)
RSA

Chiave pubblica: n, e
Chiave privata:
1 p, q numeri primi tali che n = p · q
2 d ∈ Zφ(n) tale che d = 1/e (mod φ(n))
Codifica di un messaggio M ∈ Zn :

Me (mod n)

Decodifica di un messaggio

M = (M e )d
RSA

Chiave pubblica: n, e
Chiave privata:
1 p, q numeri primi tali che n = p · q
2 d ∈ Zφ(n) tale che d = 1/e (mod φ(n))
Codifica di un messaggio M ∈ Zn :

Me (mod n)

Decodifica di un messaggio

M = (M e )d

Perché è corretta la decodifica?


RSA

Chiave pubblica: n, e
Chiave privata:
1 p, q numeri primi tali che n = p · q
2 d ∈ Zφ(n) tale che d = 1/e (mod φ(n))
Codifica di un messaggio M ∈ Zn :

Me (mod n)

Decodifica di un messaggio

M = (M e )d

Perché è corretta la decodifica?


Grazie al Teorema di Eulero
ed = 1 (mod φ(n)) ⇒ ed = k · φ(n) + 1 ⇒
(M e )d = M ed = M kφ(n)+1 = M
Fattibilità

calcolo di n a partire da p e q: moltiplicazione


calcolo di d: divisione in Zφ(n)
codifica: elevamento a potenza
decodifica: elevamento a potenza
Fattibilità

calcolo di n a partire da p e q: moltiplicazione


calcolo di d: divisione in Zφ(n)
codifica: elevamento a potenza
decodifica: elevamento a potenza
calcolo di p e q: PROBLEMA
Fattibilità

calcolo di n a partire da p e q: moltiplicazione


calcolo di d: divisione in Zφ(n)
codifica: elevamento a potenza
decodifica: elevamento a potenza
calcolo di p e q: PROBLEMA
Nota: 65537 è il più grande numero primo conosciuto della forma
n
22 + 1 (in questo caso n = 4). Per questa caratteristica viene
comunemente usato come esponente pubblico. Al tempo stesso è
(a) abbastanza grande (b) primo (c) in forma tale da velocizzare
square and multiply
Sicurezza

Risalire da M e a M conoscendo e e n? Serve d


Risalire a d conoscendo e e n? Serve φ(n)
Risalire a φ(n) conoscendo n? Servono p e q
Sicurezza

Risalire da M e a M conoscendo e e n? Serve d


Risalire a d conoscendo e e n? Serve φ(n)
Risalire a φ(n) conoscendo n? Servono p e q
Se si è sicuri che nessuno riesca a fattorizzare n, allora il sistema
può considerarsi sicuro.
Sicurezza

Risalire da M e a M conoscendo e e n? Serve d


Risalire a d conoscendo e e n? Serve φ(n)
Risalire a φ(n) conoscendo n? Servono p e q
Se si è sicuri che nessuno riesca a fattorizzare n, allora il sistema
può considerarsi sicuro.

Il PROBLEMA: Se non si conosce un metodo per fattorizzare un


numero di 150 cifre, come faccio a costruire due numeri primi di
150 cifre?
Sicurezza

Risalire da M e a M conoscendo e e n? Serve d


Risalire a d conoscendo e e n? Serve φ(n)
Risalire a φ(n) conoscendo n? Servono p e q
Se si è sicuri che nessuno riesca a fattorizzare n, allora il sistema
può considerarsi sicuro.

Il PROBLEMA: Se non si conosce un metodo per fattorizzare un


numero di 150 cifre, come faccio a costruire due numeri primi di
150 cifre?

SOLUZIONE Usare numeri che sono primi con probabilità


arbitrariamente alta (per capirci, 99.9999999999999 per cento)
Esperimento 11
Considerare due numeri primi molto grandi:
p :=
NextPrime(10150 + 32141204312037210347210472104712
0412304712034712304712412)
q := NextPrime(p + 100000)
Esperimento 11
Considerare due numeri primi molto grandi:
p :=
NextPrime(10150 + 32141204312037210347210472104712
0412304712034712304712412)
q := NextPrime(p + 100000)
Calcolarne il prodotto n
Esperimento 11
Considerare due numeri primi molto grandi:
p :=
NextPrime(10150 + 32141204312037210347210472104712
0412304712034712304712412)
q := NextPrime(p + 100000)
Calcolarne il prodotto n
Provare a fattorizzare n con il comando Factorization
Esperimento 11
Considerare due numeri primi molto grandi:
p :=
NextPrime(10150 + 32141204312037210347210472104712
0412304712034712304712412)
q := NextPrime(p + 100000)
Calcolarne il prodotto n
Provare a fattorizzare n con il comando Factorization
Usereste questa chiave a tutela della vostra riservatezza e del
vostro denaro?
Esperimento 11
Considerare due numeri primi molto grandi:
p :=
NextPrime(10150 + 32141204312037210347210472104712
0412304712034712304712412)
q := NextPrime(p + 100000)
Calcolarne il prodotto n
Provare a fattorizzare n con il comando Factorization
Usereste questa chiave a tutela della vostra riservatezza e del
vostro denaro?
Provare con questo algoritmo:
trovato:=false; i:=1;
while not trovato do
m:=n + i 2 ;
if IsSquare(m) then
trovato:=true; bool,t:=IsSquare(m); t;
P:=t-i; P; Q:=t+i; Q;
end if;
i:=i+1;

end while;
Cosa è successo?

Idea dell’algoritmo: per tentativi provare a controllare se per


caso
n + i 2 è un quadrato perfetto (test veloce)
Cosa è successo?

Idea dell’algoritmo: per tentativi provare a controllare se per


caso
n + i 2 è un quadrato perfetto (test veloce)
In tal caso da n + i 2 = t 2 segue

n = t 2 − i 2 = (t − i ) · (t + i )
Cosa è successo?

Idea dell’algoritmo: per tentativi provare a controllare se per


caso
n + i 2 è un quadrato perfetto (test veloce)
In tal caso da n + i 2 = t 2 segue

n = t 2 − i 2 = (t − i ) · (t + i )

Secondo voi, quali sono le chiavi deboli per questo algoritmo?


Chiavi deboli

L’algoritmo appena visto si chiama Algoritmo di Fermat, e


abbiamo visto che ha successo nel caso in cui p e q siano
relativamente vicini
Chiavi deboli

L’algoritmo appena visto si chiama Algoritmo di Fermat, e


abbiamo visto che ha successo nel caso in cui p e q siano
relativamente vicini
Ne esistono altri di algoritmi di fattorizzazione che
risultano veloci se p e q hanno determinate proprietà
Chiavi deboli

L’algoritmo appena visto si chiama Algoritmo di Fermat, e


abbiamo visto che ha successo nel caso in cui p e q siano
relativamente vicini
Ne esistono altri di algoritmi di fattorizzazione che
risultano veloci se p e q hanno determinate proprietà
Un altro esempio di chiave debole è quella in cui p − 1 o q − 1
si fattorizzano in tanti fattori primi piccoli
Chiavi deboli

L’algoritmo appena visto si chiama Algoritmo di Fermat, e


abbiamo visto che ha successo nel caso in cui p e q siano
relativamente vicini
Ne esistono altri di algoritmi di fattorizzazione che
risultano veloci se p e q hanno determinate proprietà
Un altro esempio di chiave debole è quella in cui p − 1 o q − 1
si fattorizzano in tanti fattori primi piccoli
Per questo si tende a scegliere p = 2p1 + 1 e q = 2q1 + 1 con
p1 e q1 primi
Chiavi deboli

L’algoritmo appena visto si chiama Algoritmo di Fermat, e


abbiamo visto che ha successo nel caso in cui p e q siano
relativamente vicini
Ne esistono altri di algoritmi di fattorizzazione che
risultano veloci se p e q hanno determinate proprietà
Un altro esempio di chiave debole è quella in cui p − 1 o q − 1
si fattorizzano in tanti fattori primi piccoli
Per questo si tende a scegliere p = 2p1 + 1 e q = 2q1 + 1 con
p1 e q1 primi
Pare che una percentuale rilevante (compresa fra 1 e 10 per
cento) delle chiavi RSA sia debole
Funzioni hash

L’hash (o digest) di un file ha gli stessi scopi dell’impronta digitale


di un individuo.
Sintetizza un individuo/file in un formato unico (160 bit per i
file)
Si ottiene con relativa facilità
Praticamente impossibile data un’impronta digitale, risalire al
file/individuo
Praticamente impossibile dato un file/individuo, trovarne un
altro con la stessa impronta
Praticamente impossibile trovare due file/individui con la
stessa impronta
Perché c’è bisogno di una funzione hash?

Integrità dei dati. Trasferimenti file di grosse dimensioni


(E-mule, torrent, etc).
Perché c’è bisogno di una funzione hash?

Integrità dei dati. Trasferimenti file di grosse dimensioni


(E-mule, torrent, etc).
Autenticazione di un documento. Si calcola l’impronta del
file ottenuto combinando documento e chiave simmetrica.
Perché c’è bisogno di una funzione hash?

Integrità dei dati. Trasferimenti file di grosse dimensioni


(E-mule, torrent, etc).
Autenticazione di un documento. Si calcola l’impronta del
file ottenuto combinando documento e chiave simmetrica.
Firma digitale. Non si firma l’intero documento, ma la sua
impronta.
Perché c’è bisogno di una funzione hash?

Integrità dei dati. Trasferimenti file di grosse dimensioni


(E-mule, torrent, etc).
Autenticazione di un documento. Si calcola l’impronta del
file ottenuto combinando documento e chiave simmetrica.
Firma digitale. Non si firma l’intero documento, ma la sua
impronta.
Per questi scopi è fondamentale che sia praticamente impossibile
trovare due file con la stessa hash
Una funzione hash deve essere resistente alle collisioni
Un modello ideale
La funzione hash è calcolata da un oracolo in modo totalmente
oscuro, che nessuno conosce. Casuale ma riproducibile.
Un modello ideale
La funzione hash è calcolata da un oracolo in modo totalmente
oscuro, che nessuno conosce. Casuale ma riproducibile.

Si cerca di riprodurre per quanto possibile il modello oracolo


casuale.
Un modello ideale
La funzione hash è calcolata da un oracolo in modo totalmente
oscuro, che nessuno conosce. Casuale ma riproducibile.

Si cerca di riprodurre per quanto possibile il modello oracolo


casuale.

In tutti i nostri computer esistono algoritmi che simulano tale


modello. Il più utilizzato al momento è SHA1. SHA=Secure Hash
Algorithm
FCIV - md5, sha1 nomefile.con.path in Windows, sha1sum nomefile in Linux
Un modello ideale
La funzione hash è calcolata da un oracolo in modo totalmente
oscuro, che nessuno conosce. Casuale ma riproducibile.

Si cerca di riprodurre per quanto possibile il modello oracolo


casuale.

In tutti i nostri computer esistono algoritmi che simulano tale


modello. Il più utilizzato al momento è SHA1. SHA=Secure Hash
Algorithm
FCIV - md5, sha1 nomefile.con.path in Windows, sha1sum nomefile in Linux

SHA1 calcola un’impronta di 160 bit

Perché proprio 160 bit sono necessari per un impronta?


Il paradosso del compleanno
In una classe di 23 alunni la probabilità che ve ne siano 2 con
la stessa data di nascita supera il 50 per cento
Il paradosso del compleanno
In una classe di 23 alunni la probabilità che ve ne siano 2 con
la stessa data di nascita supera il 50 per cento
In una classe di 40 alunni supera l’85 per cento
Il paradosso del compleanno
In una classe di 23 alunni la probabilità che ve ne siano 2 con
la stessa data di nascita supera il 50 per cento
In una classe di 40 alunni supera l’85 per cento

Teorema 4
Sia h una funzione casuale, associata ad un file/individuo, che può
assumere M valori. Sia dato un insieme di

2M ln 2 file/individui.

Allora la probabilità di trovare due file/individui a cui è associato lo


stesso valore supera il 50 per cento
Il paradosso del compleanno
In una classe di 23 alunni la probabilità che ve ne siano 2 con
la stessa data di nascita supera il 50 per cento
In una classe di 40 alunni supera l’85 per cento

Teorema 4
Sia h una funzione casuale, associata ad un file/individuo, che può
assumere M valori. Sia dato un insieme di

2M ln 2 file/individui.

Allora la probabilità di trovare due file/individui a cui è associato lo


stesso valore supera il 50 per cento

Se l’hash ha k bit, i possibili esiti k


√ di un hash sono 2 .
Pertanto in un insieme di circa 2k = 2k/2 file sarebbe
abbastanza probabile trovare una collisione. Per questo
motivo, ad esempio, un hash di 80 bit non sarebbe sicuro.
Dimostrazione del paradosso del compleanno
Si consideri un insieme di n individui. La probabilità di
trovarne due con lo stesso compleanno è

365 − 1 365 − 2 365 − (n − 1)


P =1− · ··· .
365 365 365
Dimostrazione del paradosso del compleanno
Si consideri un insieme di n individui. La probabilità di
trovarne due con lo stesso compleanno è

365 − 1 365 − 2 365 − (n − 1)


P =1− · ··· .
365 365 365
O anche
1 2 (n − 1)
P = 1 − (1 − ) · (1 − ) · · · (1 − ).
365 365 365
Dimostrazione del paradosso del compleanno
Si consideri un insieme di n individui. La probabilità di
trovarne due con lo stesso compleanno è

365 − 1 365 − 2 365 − (n − 1)


P =1− · ··· .
365 365 365
O anche
1 2 (n − 1)
P = 1 − (1 − ) · (1 − ) · · · (1 − ).
365 365 365
Per capirci qualcosa occorre considerare che per numeri x
vicini allo zero si ha
1 − x ∼ e −x
Dimostrazione del paradosso del compleanno
Si consideri un insieme di n individui. La probabilità di
trovarne due con lo stesso compleanno è

365 − 1 365 − 2 365 − (n − 1)


P =1− · ··· .
365 365 365
O anche
1 2 (n − 1)
P = 1 − (1 − ) · (1 − ) · · · (1 − ).
365 365 365
Per capirci qualcosa occorre considerare che per numeri x
vicini allo zero si ha
1 − x ∼ e −x
Pertanto approssimiamo P come segue

P ∼ e −1/365 · e −2/365 · e −3/365 · · · e −(n−1)/365


1 ·(n−1)·(n−2)
1+2+...+(n−1) 2
P ∼ e− 365 = e− 365
1 ·(n−1)·(n−2)
1+2+...+(n−1) 2
P ∼ e− 365 = e− 365

Eseguendo il logaritmo di ambo i membri

n2 − 3n + 2
ln P ∼ −
2 · 365
1 ·(n−1)·(n−2)
1+2+...+(n−1) 2
P ∼ e− 365 = e− 365

Eseguendo il logaritmo di ambo i membri

n2 − 3n + 2
ln P ∼ −
2 · 365
Ulteriore approssimazione: n2 − 3n + 2 ∼ n2 . Pertanto

n2
ln P ∼ −
2 · 365
1 ·(n−1)·(n−2)
1+2+...+(n−1) 2
P ∼ e− 365 = e− 365

Eseguendo il logaritmo di ambo i membri

n2 − 3n + 2
ln P ∼ −
2 · 365
Ulteriore approssimazione: n2 − 3n + 2 ∼ n2 . Pertanto

n2
ln P ∼ −
2 · 365
Da qui segue l’asserto: per P = 1/2 basta n = 23.
1 ·(n−1)·(n−2)
1+2+...+(n−1) 2
P ∼ e− 365 = e− 365

Eseguendo il logaritmo di ambo i membri

n2 − 3n + 2
ln P ∼ −
2 · 365
Ulteriore approssimazione: n2 − 3n + 2 ∼ n2 . Pertanto

n2
ln P ∼ −
2 · 365
Da qui segue l’asserto: per P = 1/2 basta n = 23.
In generale, se abbiamo M esiti (es. 2160 per SHA1) allora per
avere P = 1/2 occorre

ln 1/2 · 2 · M ∼ −n2 ⇒ n ∼ 2 · ln 2 · M
Quale proprietà delle derivate abbiamo usato?

Si veda fooplot.com
Il Teorema del Quinto A
Il Teorema del Quinto A

Esperimento: scrivere tutti gli elementi invertibili di Zn :


Il Teorema del Quinto A

Esperimento: scrivere tutti gli elementi invertibili di Zn :

n = 10 1, 3, 7, 9
n = 15 1, 2, 4, 7, 8, 11, 13, 14
n = 22 1, 3, 5, 7, 9, 13, 15, 17, 19, 21
Il Teorema del Quinto A

Esperimento: scrivere tutti gli elementi invertibili di Zn :

n = 10 1, 3, 7, 9
n = 15 1, 2, 4, 7, 8, 11, 13, 14
n = 22 1, 3, 5, 7, 9, 13, 15, 17, 19, 21

Osservazione: la somma degli elementi invertibili di Zn è


divisibile per n
Il Teorema del Quinto A

Esperimento: scrivere tutti gli elementi invertibili di Zn :

n = 10 1, 3, 7, 9
n = 15 1, 2, 4, 7, 8, 11, 13, 14
n = 22 1, 3, 5, 7, 9, 13, 15, 17, 19, 21

Osservazione: la somma degli elementi invertibili di Zn è


divisibile per n
Congettura: per ogni intero positivo n > 1,
X
a = 0 (mod n)
a∈Zn ,MCD(a,n)=1
Dimostrazione:
1 Se MCD(a, n) = 1 allora anche MCD(n − a, n) = 1. Infatti
ogni divisore d di n − a e n sarebbe un divisore di −a e quindi
di a
2 Siano a1 , . . . , as sono gli elementi di Zn primi con n e minori di
n/2. Allora tutti gli elementi di Zn primi con n sono

a1 , . . . , as , n − a1 , . . . , n − as

3 Pertanto la somma totale è uguale a

a1 + . . . + as + n − a1 + . . . + n − as = n + . . . + n = 0 (mod n)
Dimostrazione:
1 Se MCD(a, n) = 1 allora anche MCD(n − a, n) = 1. Infatti
ogni divisore d di n − a e n sarebbe un divisore di −a e quindi
di a
2 Siano a1 , . . . , as sono gli elementi di Zn primi con n e minori di
n/2. Allora tutti gli elementi di Zn primi con n sono

a1 , . . . , as , n − a1 , . . . , n − as

3 Pertanto la somma totale è uguale a

a1 + . . . + as + n − a1 + . . . + n − as = n + . . . + n = 0 (mod n)

Teorema 5
Per ogni intero positivo n > 1,
X
a=0 (mod n)
a∈Zn ,MCD(a,n)=1
La firma digitale

Idea: la firma di un documento consiste nel mascherare il


documento con la propria chiave privata
La firma digitale

Idea: la firma di un documento consiste nel mascherare il


documento con la propria chiave privata
Firma digitale RSA: chiave pubblica di Alice (n, e), chiave
privata (p, q, d) con n = p · q e e · d = 1 (mod φ(n))
La firma digitale

Idea: la firma di un documento consiste nel mascherare il


documento con la propria chiave privata
Firma digitale RSA: chiave pubblica di Alice (n, e), chiave
privata (p, q, d) con n = p · q e e · d = 1 (mod φ(n))
Documento da firmare: D ∈ Zn
La firma digitale

Idea: la firma di un documento consiste nel mascherare il


documento con la propria chiave privata
Firma digitale RSA: chiave pubblica di Alice (n, e), chiave
privata (p, q, d) con n = p · q e e · d = 1 (mod φ(n))
Documento da firmare: D ∈ Zn
Firma del documento: F = D d (mod n) ∈ Zn
La firma digitale

Idea: la firma di un documento consiste nel mascherare il


documento con la propria chiave privata
Firma digitale RSA: chiave pubblica di Alice (n, e), chiave
privata (p, q, d) con n = p · q e e · d = 1 (mod φ(n))
Documento da firmare: D ∈ Zn
Firma del documento: F = D d (mod n) ∈ Zn
Documento firmato: (D, F ) con F = D d (mod n)
La firma digitale

Idea: la firma di un documento consiste nel mascherare il


documento con la propria chiave privata
Firma digitale RSA: chiave pubblica di Alice (n, e), chiave
privata (p, q, d) con n = p · q e e · d = 1 (mod φ(n))
Documento da firmare: D ∈ Zn
Firma del documento: F = D d (mod n) ∈ Zn
Documento firmato: (D, F ) con F = D d (mod n)
Verifica della firma:

Fe = D (mod n) ???
La firma digitale

Idea: la firma di un documento consiste nel mascherare il


documento con la propria chiave privata
Firma digitale RSA: chiave pubblica di Alice (n, e), chiave
privata (p, q, d) con n = p · q e e · d = 1 (mod φ(n))
Documento da firmare: D ∈ Zn
Firma del documento: F = D d (mod n) ∈ Zn
Documento firmato: (D, F ) con F = D d (mod n)
Verifica della firma:

Fe = D (mod n) ???

Il punto chiave è che se F e = D (mod n), allora (F e )d = D d


(mod n) e quindi per il Teorema di Eulero F = D d (mod n).
La firma digitale

Idea: la firma di un documento consiste nel mascherare il


documento con la propria chiave privata
Firma digitale RSA: chiave pubblica di Alice (n, e), chiave
privata (p, q, d) con n = p · q e e · d = 1 (mod φ(n))
Documento da firmare: D ∈ Zn
Firma del documento: F = D d (mod n) ∈ Zn
Documento firmato: (D, F ) con F = D d (mod n)
Verifica della firma:

Fe = D (mod n) ???

Il punto chiave è che se F e = D (mod n), allora (F e )d = D d


(mod n) e quindi per il Teorema di Eulero F = D d (mod n).
Ma solo Alice conosce d
Falsificazioni firma digitale RSA
Se faccio finta di essere Alice e spedisco (F e , F ), allora la
verifica della firma è accettata:

Fe = Fe (mod n)
Falsificazioni firma digitale RSA
Se faccio finta di essere Alice e spedisco (F e , F ), allora la
verifica della firma è accettata:

Fe = Fe (mod n)

F e probabilmente è un documento senza senso.


Falsificazioni firma digitale RSA
Se faccio finta di essere Alice e spedisco (F e , F ), allora la
verifica della firma è accettata:

Fe = Fe (mod n)

F e probabilmente è un documento senza senso.


Se ho due documenti firmati da Alice, diciamo (D1 , F1 ) e
(D2 , F2 ), e faccio finta di essere Alice e spedisco
(D1 · D2 , F1 · F2 ), allora la verifica della firma è accettata:

(F1 · F2 )e = F1e · F2e = D1 · D2 (mod n)


Falsificazioni firma digitale RSA
Se faccio finta di essere Alice e spedisco (F e , F ), allora la
verifica della firma è accettata:

Fe = Fe (mod n)

F e probabilmente è un documento senza senso.


Se ho due documenti firmati da Alice, diciamo (D1 , F1 ) e
(D2 , F2 ), e faccio finta di essere Alice e spedisco
(D1 · D2 , F1 · F2 ), allora la verifica della firma è accettata:

(F1 · F2 )e = F1e · F2e = D1 · D2 (mod n)

D1 · D2 probabilmente è un documento senza senso.


Falsificazioni firma digitale RSA
Se faccio finta di essere Alice e spedisco (F e , F ), allora la
verifica della firma è accettata:

Fe = Fe (mod n)

F e probabilmente è un documento senza senso.


Se ho due documenti firmati da Alice, diciamo (D1 , F1 ) e
(D2 , F2 ), e faccio finta di essere Alice e spedisco
(D1 · D2 , F1 · F2 ), allora la verifica della firma è accettata:

(F1 · F2 )e = F1e · F2e = D1 · D2 (mod n)

D1 · D2 probabilmente è un documento senza senso.


La facilità di ottenere firme false è un problema
Falsificazioni firma digitale RSA
Se faccio finta di essere Alice e spedisco (F e , F ), allora la
verifica della firma è accettata:

Fe = Fe (mod n)

F e probabilmente è un documento senza senso.


Se ho due documenti firmati da Alice, diciamo (D1 , F1 ) e
(D2 , F2 ), e faccio finta di essere Alice e spedisco
(D1 · D2 , F1 · F2 ), allora la verifica della firma è accettata:

(F1 · F2 )e = F1e · F2e = D1 · D2 (mod n)

D1 · D2 probabilmente è un documento senza senso.


La facilità di ottenere firme false è un problema
Un altro problema è che un documento/file non sempre può non
essere rappresentato da un elemento di Zn (es.: DVD PS3)
Falsificazioni firma digitale RSA
Se faccio finta di essere Alice e spedisco (F e , F ), allora la
verifica della firma è accettata:

Fe = Fe (mod n)

F e probabilmente è un documento senza senso.


Se ho due documenti firmati da Alice, diciamo (D1 , F1 ) e
(D2 , F2 ), e faccio finta di essere Alice e spedisco
(D1 · D2 , F1 · F2 ), allora la verifica della firma è accettata:

(F1 · F2 )e = F1e · F2e = D1 · D2 (mod n)

D1 · D2 probabilmente è un documento senza senso.


La facilità di ottenere firme false è un problema
Un altro problema è che un documento/file non sempre può non
essere rappresentato da un elemento di Zn (es.: DVD PS3)
Soluzione: utilizzo funzioni hash
Firma digitale SHA1-RSA
Firma digitale SHA1-RSA: chiave pubblica (n, e), chiave privata
(p, q, d) con n = p · q e e · d = 1 (mod φ(n))
Firma digitale SHA1-RSA
Firma digitale SHA1-RSA: chiave pubblica (n, e), chiave privata
(p, q, d) con n = p · q e e · d = 1 (mod φ(n))
Documento da firmare da Alice: D, file di dimensione
praticamente arbitraria
Firma digitale SHA1-RSA
Firma digitale SHA1-RSA: chiave pubblica (n, e), chiave privata
(p, q, d) con n = p · q e e · d = 1 (mod φ(n))
Documento da firmare da Alice: D, file di dimensione
praticamente arbitraria
Si calcola l’hash di D con l’algoritmo SHA1, diciamo H(D), e
lo si interpreta come elemento di Zn
Firma digitale SHA1-RSA
Firma digitale SHA1-RSA: chiave pubblica (n, e), chiave privata
(p, q, d) con n = p · q e e · d = 1 (mod φ(n))
Documento da firmare da Alice: D, file di dimensione
praticamente arbitraria
Si calcola l’hash di D con l’algoritmo SHA1, diciamo H(D), e
lo si interpreta come elemento di Zn
Firma del documento: F = H(D)d (mod n) ∈ Zn
Firma digitale SHA1-RSA
Firma digitale SHA1-RSA: chiave pubblica (n, e), chiave privata
(p, q, d) con n = p · q e e · d = 1 (mod φ(n))
Documento da firmare da Alice: D, file di dimensione
praticamente arbitraria
Si calcola l’hash di D con l’algoritmo SHA1, diciamo H(D), e
lo si interpreta come elemento di Zn
Firma del documento: F = H(D)d (mod n) ∈ Zn
Documento firmato: (D, F ) con F = H(D)d (mod n)
Firma digitale SHA1-RSA
Firma digitale SHA1-RSA: chiave pubblica (n, e), chiave privata
(p, q, d) con n = p · q e e · d = 1 (mod φ(n))
Documento da firmare da Alice: D, file di dimensione
praticamente arbitraria
Si calcola l’hash di D con l’algoritmo SHA1, diciamo H(D), e
lo si interpreta come elemento di Zn
Firma del documento: F = H(D)d (mod n) ∈ Zn
Documento firmato: (D, F ) con F = H(D)d (mod n)
Verifica della firma:

F e = H(D) (mod n) ???


Firma digitale SHA1-RSA
Firma digitale SHA1-RSA: chiave pubblica (n, e), chiave privata
(p, q, d) con n = p · q e e · d = 1 (mod φ(n))
Documento da firmare da Alice: D, file di dimensione
praticamente arbitraria
Si calcola l’hash di D con l’algoritmo SHA1, diciamo H(D), e
lo si interpreta come elemento di Zn
Firma del documento: F = H(D)d (mod n) ∈ Zn
Documento firmato: (D, F ) con F = H(D)d (mod n)
Verifica della firma:

F e = H(D) (mod n) ???

Il punto chiave è che se F e = H(D) (mod n), allora


(F e )d = H(D)d (mod n) e quindi per il Teorema di Eulero
F = H(D)d (mod n). Ma solo Alice conosce d.
Falsificazioni di SHA1-RSA?

(F e , F ) non è accettato perchè F non è l’hash di F .


Dovrei trovare un file che abbia come impronta F , ma come
sappiamo è praticamente impossibile.
Falsificazioni di SHA1-RSA?

(F e , F ) non è accettato perchè F non è l’hash di F .


Dovrei trovare un file che abbia come impronta F , ma come
sappiamo è praticamente impossibile.
Allo stesso modo, non è più accettata (D1 D2 , F1 F2 ) perché

H(D1 D2 )d 6= H(D1 )d H(D2 )d = F1 F2


Firma digitale in pratica

www.digitpa.gov.it
“Per dotarsi di firma digitale necessario rivolgersi ai
certificatori accreditati autorizzati da DigitPA che
garantiscono lidentità dei soggetti che utilizzano la firma
digitale.”
Firma digitale in pratica

www.digitpa.gov.it
“Per dotarsi di firma digitale necessario rivolgersi ai
certificatori accreditati autorizzati da DigitPA che
garantiscono lidentità dei soggetti che utilizzano la firma
digitale.”
http://www.digitpa.gov.it/firma-digitale/certificatori-
accreditati/certificatori-attivi
Esempio forse più conosciuto in TV: Aruba.
(http://www.pec.it/FirmaDigitale.aspx)
Firma digitale in pratica

www.digitpa.gov.it
“Per dotarsi di firma digitale necessario rivolgersi ai
certificatori accreditati autorizzati da DigitPA che
garantiscono lidentità dei soggetti che utilizzano la firma
digitale.”
http://www.digitpa.gov.it/firma-digitale/certificatori-
accreditati/certificatori-attivi
Esempio forse più conosciuto in TV: Aruba.
(http://www.pec.it/FirmaDigitale.aspx)
http://www.digitpa.gov.it/firma-elettronica/liste-certificati
Ogni Autorità di Certificazione è a sua volta Certificata dal
Governo/Unione Europea.
Firma digitale in pratica

Alice si reca fisicamente dalla Certification Authority.


Firma digitale in pratica

Alice si reca fisicamente dalla Certification Authority.


La Certification Authority riconosce l’identità di Alice e le
rilascia una chiavetta usb e un PIN.
Firma digitale in pratica

Alice si reca fisicamente dalla Certification Authority.


La Certification Authority riconosce l’identità di Alice e le
rilascia una chiavetta usb e un PIN.
La chiavetta USB contiene:
Firma digitale in pratica

Alice si reca fisicamente dalla Certification Authority.


La Certification Authority riconosce l’identità di Alice e le
rilascia una chiavetta usb e un PIN.
La chiavetta USB contiene:
La chiave privata p, q, d di Alice
Firma digitale in pratica

Alice si reca fisicamente dalla Certification Authority.


La Certification Authority riconosce l’identità di Alice e le
rilascia una chiavetta usb e un PIN.
La chiavetta USB contiene:
La chiave privata p, q, d di Alice
Il certificato di Alice. Il certificato C di Alice contiene la chiave
pubblica n, e di Alice, ed è firmato dalla Certification Authority
Firma digitale in pratica

Alice si reca fisicamente dalla Certification Authority.


La Certification Authority riconosce l’identità di Alice e le
rilascia una chiavetta usb e un PIN.
La chiavetta USB contiene:
La chiave privata p, q, d di Alice
Il certificato di Alice. Il certificato C di Alice contiene la chiave
pubblica n, e di Alice, ed è firmato dalla Certification Authority
Quando Alice vuole firmare un file inserisce la chiavetta e
avvia il programma di firma inserendo il PIN. Il risultato è un
file .p7m che contiene:
Firma digitale in pratica

Alice si reca fisicamente dalla Certification Authority.


La Certification Authority riconosce l’identità di Alice e le
rilascia una chiavetta usb e un PIN.
La chiavetta USB contiene:
La chiave privata p, q, d di Alice
Il certificato di Alice. Il certificato C di Alice contiene la chiave
pubblica n, e di Alice, ed è firmato dalla Certification Authority
Quando Alice vuole firmare un file inserisce la chiavetta e
avvia il programma di firma inserendo il PIN. Il risultato è un
file .p7m che contiene:
Il documento D (esempio file .doc o file .pdf)
Firma digitale in pratica

Alice si reca fisicamente dalla Certification Authority.


La Certification Authority riconosce l’identità di Alice e le
rilascia una chiavetta usb e un PIN.
La chiavetta USB contiene:
La chiave privata p, q, d di Alice
Il certificato di Alice. Il certificato C di Alice contiene la chiave
pubblica n, e di Alice, ed è firmato dalla Certification Authority
Quando Alice vuole firmare un file inserisce la chiavetta e
avvia il programma di firma inserendo il PIN. Il risultato è un
file .p7m che contiene:
Il documento D (esempio file .doc o file .pdf)
La firma F = SHA1(D)d (mod n)
Firma digitale in pratica

Alice si reca fisicamente dalla Certification Authority.


La Certification Authority riconosce l’identità di Alice e le
rilascia una chiavetta usb e un PIN.
La chiavetta USB contiene:
La chiave privata p, q, d di Alice
Il certificato di Alice. Il certificato C di Alice contiene la chiave
pubblica n, e di Alice, ed è firmato dalla Certification Authority
Quando Alice vuole firmare un file inserisce la chiavetta e
avvia il programma di firma inserendo il PIN. Il risultato è un
file .p7m che contiene:
Il documento D (esempio file .doc o file .pdf)
La firma F = SHA1(D)d (mod n)
Il certificato C di Alice (quindi la chiave pubblica di Alice e la
firma della Certification Authority)
Firma digitale in pratica

Bob riceve il file contratto.pdf.p7m, che consiste di


D =contratto.pdf, F, C
Quali passi compie per verificare la firma di Alice?
Firma digitale in pratica

Bob riceve il file contratto.pdf.p7m, che consiste di


D =contratto.pdf, F, C
Quali passi compie per verificare la firma di Alice?
Controlla la firma del certificato: deve essere sicuro che il
certificato C sia stato firmato da una Certification Authority.
Il browser si collega al sito governativo dove è sicuro di trovare
la VERA chiave pubblica della Certification Authority. Tale
chiave pubblica è ciò che serve per controllare l’autenticità del
certificato.
Firma digitale in pratica

Bob riceve il file contratto.pdf.p7m, che consiste di


D =contratto.pdf, F, C
Quali passi compie per verificare la firma di Alice?
Controlla la firma del certificato: deve essere sicuro che il
certificato C sia stato firmato da una Certification Authority.
Il browser si collega al sito governativo dove è sicuro di trovare
la VERA chiave pubblica della Certification Authority. Tale
chiave pubblica è ciò che serve per controllare l’autenticità del
certificato.
Dopo aver controllato il certificato, Bob è sicuro che la chiave
pubblica di Alice è quella riportata nel certificato stesso.
Quindi
Firma digitale in pratica

Bob riceve il file contratto.pdf.p7m, che consiste di


D =contratto.pdf, F, C
Quali passi compie per verificare la firma di Alice?
Controlla la firma del certificato: deve essere sicuro che il
certificato C sia stato firmato da una Certification Authority.
Il browser si collega al sito governativo dove è sicuro di trovare
la VERA chiave pubblica della Certification Authority. Tale
chiave pubblica è ciò che serve per controllare l’autenticità del
certificato.
Dopo aver controllato il certificato, Bob è sicuro che la chiave
pubblica di Alice è quella riportata nel certificato stesso.
Quindi
Calcola l’impronta di D =contratto.pdf: SHA1(D)
Firma digitale in pratica

Bob riceve il file contratto.pdf.p7m, che consiste di


D =contratto.pdf, F, C
Quali passi compie per verificare la firma di Alice?
Controlla la firma del certificato: deve essere sicuro che il
certificato C sia stato firmato da una Certification Authority.
Il browser si collega al sito governativo dove è sicuro di trovare
la VERA chiave pubblica della Certification Authority. Tale
chiave pubblica è ciò che serve per controllare l’autenticità del
certificato.
Dopo aver controllato il certificato, Bob è sicuro che la chiave
pubblica di Alice è quella riportata nel certificato stesso.
Quindi
Calcola l’impronta di D =contratto.pdf: SHA1(D)
Calcola SHA1(D)e
Firma digitale in pratica

Bob riceve il file contratto.pdf.p7m, che consiste di


D =contratto.pdf, F, C
Quali passi compie per verificare la firma di Alice?
Controlla la firma del certificato: deve essere sicuro che il
certificato C sia stato firmato da una Certification Authority.
Il browser si collega al sito governativo dove è sicuro di trovare
la VERA chiave pubblica della Certification Authority. Tale
chiave pubblica è ciò che serve per controllare l’autenticità del
certificato.
Dopo aver controllato il certificato, Bob è sicuro che la chiave
pubblica di Alice è quella riportata nel certificato stesso.
Quindi
Calcola l’impronta di D =contratto.pdf: SHA1(D)
Calcola SHA1(D)e
Controlla che SHA1(D)e = F
Codici autocorrettori

Da Wikipedia Error Detection and Correction:


Many communication channels are subject to channel noise, and thus errors may be introduced during transmission
from the source to a receiver. Error detection techniques allow detecting such errors, while error correction enables
reconstruction of the original data.
Development of error-correction codes was tightly coupled with the history of deep-space missions due to the
extreme dilution of signal power over interplanetary distances, and the limited power availability aboard space
probes. Whereas early missions sent their data uncoded, starting from 1968 digital error correction was
implemented.
The Reed-Muller code was well suited to the noise the spacecraft was subject to (approximately matching a bell
curve), and was implemented at the Mariner spacecraft for missions between 1969 and 1977.
The Voyager 1 and Voyager 2 missions, which started in 1977, were designed to deliver color imaging amongst
scientific information of Jupiter and Saturn. This resulted in increased coding requirements, and thus the
spacecraft were supported by (optimally Viterbi-decoded) convolutional codes that could be concatenated with an
outer Golay (24,12,8) code.
The Voyager 2 probe additionally supported an implementation of a Reed-Solomon code: the concatenated
Reed-Solomon-Viterbi (RSV) code allowed for very powerful error correction, and enabled the spacecraft’s extended
journey to Uranus and Neptune.

The CCSDS currently recommends usage of error correction codes with performance similar to the Voyager 2 RSV

code as a minimum. Concatenated codes are increasingly falling out of favor with space missions, and are replaced

by more powerful codes such as Turbo codes or LDPC codes.


Un esempio elementare

N 0 0
E 0 1
O 1 0
S 1 1
Un esempio elementare

N 0 0 0
E 0 1 1
O 1 0 1
S 1 1 0
Un esempio elementare

N 0 0 0 0 0
E 0 1 1 1 0
O 1 0 1 0 1
S 1 1 0 1 1
Un esempio elementare

N 0 0 0 0 0
E 0 1 1 1 0
O 1 0 1 0 1
S 1 1 0 1 1
Un qualunque errore può essere corretto automaticamente!
Un esempio elementare

N 0 0 0 0 0
E 0 1 1 1 0
O 1 0 1 0 1
S 1 1 0 1 1
Un qualunque errore può essere corretto automaticamente!

Idea: Codificare le parole del nostro linguaggio in modo tale che


siano tutte abbastanza diverse fra loro
Alfabeto: Zp , p primo
Alfabeto: Zp , p primo
Parole del codice: alcune sequenze di n lettere dell’alfabeto
Alfabeto: Zp , p primo
Parole del codice: alcune sequenze di n lettere dell’alfabeto
Distanza di due parole:

d((a1 , a2 , . . . , an ), (b1 , b2 , . . . , bn )) = #{i = 1, . . . , n | ai 6= bi }


Alfabeto: Zp , p primo
Parole del codice: alcune sequenze di n lettere dell’alfabeto
Distanza di due parole:

d((a1 , a2 , . . . , an ), (b1 , b2 , . . . , bn )) = #{i = 1, . . . , n | ai 6= bi }

Esempi:

d((1, 2, 3), (0, 2, 3)) = 1, d((0, 2, 3, 0), (1, 2, 1, 0)) = 2


Alfabeto: Zp , p primo
Parole del codice: alcune sequenze di n lettere dell’alfabeto
Distanza di due parole:

d((a1 , a2 , . . . , an ), (b1 , b2 , . . . , bn )) = #{i = 1, . . . , n | ai 6= bi }

Esempi:

d((1, 2, 3), (0, 2, 3)) = 1, d((0, 2, 3, 0), (1, 2, 1, 0)) = 2

Teorema 6
Se la distanza minima di due parole del codice è D, allora il codice
corregge fino a (D − 1)/2-errori
Codici di Reed-Solomon (versione soft)

Si fissano k < m < p, con p primo


Codici di Reed-Solomon (versione soft)

Si fissano k < m < p, con p primo


Alfabeto: Zp , lunghezza delle parole: m
Codici di Reed-Solomon (versione soft)

Si fissano k < m < p, con p primo


Alfabeto: Zp , lunghezza delle parole: m
Ogni parola è associata a un polinomio

f (X ) = a0 + a1 X + a2 X 2 + . . . + ak X k

a coefficienti in Zp e grado minore o uguale di k:

C = {(f (1), f (2), . . . f (m)) | f polinomio con deg(f ) ≤ k}


Codici di Reed-Solomon (versione soft)

Si fissano k < m < p, con p primo


Alfabeto: Zp , lunghezza delle parole: m
Ogni parola è associata a un polinomio

f (X ) = a0 + a1 X + a2 X 2 + . . . + ak X k

a coefficienti in Zp e grado minore o uguale di k:

C = {(f (1), f (2), . . . f (m)) | f polinomio con deg(f ) ≤ k}

Teorema 7 (Ruffini)
Un polinomio di grado k non nullo ha al massimo k radici.
Esempio:
p = 7, m = 4, k = 2
Esempio:
p = 7, m = 4, k = 2
Esempi di parole:

f (X ) = 1 + X 2 → (1 + 12 , 1 + 22 , 1 + 32 , 1 + 42 ) = (2, 5, 3, 3)
f (X ) = 1 + X + X 2 → (3, 0, 6, 0)
... ...
Esempio:
p = 7, m = 4, k = 2
Esempi di parole:

f (X ) = 1 + X 2 → (1 + 12 , 1 + 22 , 1 + 32 , 1 + 42 ) = (2, 5, 3, 3)
f (X ) = 1 + X + X 2 → (3, 0, 6, 0)
... ...

Quanti errori si possono correggere con un codice di


Reed-Solomon?
Esempio:
p = 7, m = 4, k = 2
Esempi di parole:

f (X ) = 1 + X 2 → (1 + 12 , 1 + 22 , 1 + 32 , 1 + 42 ) = (2, 5, 3, 3)
f (X ) = 1 + X + X 2 → (3, 0, 6, 0)
... ...

Quanti errori si possono correggere con un codice di


Reed-Solomon?

d((f (1), f (2), . . . , f (m)), (g (1), g (2), . . . , g (m)))


è uguale a m meno il numero di valori i = 1, . . . , m per cui
(f − g )(i ) = 0
Esempio:
p = 7, m = 4, k = 2
Esempi di parole:

f (X ) = 1 + X 2 → (1 + 12 , 1 + 22 , 1 + 32 , 1 + 42 ) = (2, 5, 3, 3)
f (X ) = 1 + X + X 2 → (3, 0, 6, 0)
... ...

Quanti errori si possono correggere con un codice di


Reed-Solomon?

d((f (1), f (2), . . . , f (m)), (g (1), g (2), . . . , g (m)))


è uguale a m meno il numero di valori i = 1, . . . , m per cui
(f − g )(i ) = 0
Quante radici al massimo può avere f − g ?
Esempio:
p = 7, m = 4, k = 2
Esempi di parole:

f (X ) = 1 + X 2 → (1 + 12 , 1 + 22 , 1 + 32 , 1 + 42 ) = (2, 5, 3, 3)
f (X ) = 1 + X + X 2 → (3, 0, 6, 0)
... ...

Quanti errori si possono correggere con un codice di


Reed-Solomon?

d((f (1), f (2), . . . , f (m)), (g (1), g (2), . . . , g (m)))


è uguale a m meno il numero di valori i = 1, . . . , m per cui
(f − g )(i ) = 0
Quante radici al massimo può avere f − g ? k
Esempio:
p = 7, m = 4, k = 2
Esempi di parole:

f (X ) = 1 + X 2 → (1 + 12 , 1 + 22 , 1 + 32 , 1 + 42 ) = (2, 5, 3, 3)
f (X ) = 1 + X + X 2 → (3, 0, 6, 0)
... ...

Quanti errori si possono correggere con un codice di


Reed-Solomon?

d((f (1), f (2), . . . , f (m)), (g (1), g (2), . . . , g (m)))


è uguale a m meno il numero di valori i = 1, . . . , m per cui
(f − g )(i ) = 0
Quante radici al massimo può avere f − g ? k
Pertanto D ≥ m − k e quindi il codice di Reed-Solomon corregge
fino a (m − k)/2 errori!