Sei sulla pagina 1di 97

Crittografia a Chiave Pubblica Parte I

Luca Grilli

Crittografia a Chiave Pubblica Parte I

INTRODUZIONE

Introduzione
La crittografia a chiave pubblica si basa su alcuni risultati nellambito della teoria dei numeri Gli algoritmi di crittografia a chiave pubblica sono molto eterogenei e differiscono profondamente
non soltanto in come alcune funzioni vengono eseguite, ma spesso in quali funzioni vengono eseguite
tutti gli algoritmi di hash fanno la stessa cosa prendono un messaggio ed eseguono una trasformazione irreversibile tutti gli algoritmi a chiave segreta fanno la stessa cosa prendono un blocco, lo cifrano in modo reversibile e applicano dei metodi di concatenamento dei blocchi per cifrare dei messaggi generici

Introduzione
Si esamineranno i seguenti schemi di cifratura a chiave pubblica
RSA e ECC, usati per cifrare e per calcolare la firma digitale ElGamal e DSS, usati per la firma digitale Diffie-Hellman, permette di stabilire un segreto condiviso, ma non fornisce alcun algoritmo che usa effettivamente tale segreto
potrebbe essere usato in congiunzione ad uno schema di cifratura a chiave segreta

Sistemi di dimostrazione a conoscenza zero (zero knowledge proof systems), usati soltanto per lautenticazione

Introduzione
Lunico aspetto comune a tutti gli algoritmi di crittografia a chiave pubblica
la presenza di due quantit correlate
chiave segreta, chiave pubblica

associate a ciascuna entit che partecipa ad una comunicazione cifrata


spesso si usa il termine principal per denotare una siffatta entit, che pu essere un calcolatore o una persona

Crittografia a Chiave Pubblica Parte I

ARITMETICA MODULARE

Aritmetica modulare
La maggior parte degli algoritmi a chiave pubblica si basano sullaritmetica modulare Fissato un interno n > 1, laritmetica modulare
considera linsieme degli interi non negativi minori di n: {0, 1, 2, , n 1} effettua operazioni ordinarie come laddizione e la moltiplicazione, e sostituisce il risultato x con il resto r della divisione intera di x per n il risultato finale viene detto modulo n o mod n
x mod n significa dividi x per n e considera il resto qualche volta mod n omesso se chiaro dal contesto

Addizione modulare mod 10


Consideriamo laddizione mod 10
siano a e b due numeri minori di 10 (a + b) mod 10 si ottiene
effettuando laddizione ordinaria, e considerando come risultato finale la cifra meno significativa; cio il resto della divisione per 10
+ 0 1 2 0 0 1 2 1 1 2 3 2 2 3 4 3 3 4 5 4 4 5 6 5 5 6 7 6 6 7 8 7 7 8 9 8 8 9 0 9 9 0 1

3
4 5 6 7 8 9

3
4 5 6 7 8 9

4
5 6 7 8 9 0

5
6 7 8 9 0 1

6
7 8 9 0 1 2

7
8 9 0 1 2 3

8
9 0 1 2 3 4

9
0 1 2 3 4 5

0
1 2 3 4 5 6

1
2 3 4 5 6 7

2
3 4 5 6 7 8

Addizione modulare mod 10


Sia m (< 10), un qualche messaggio
laddizione di una costante k mod 10 pu riguardarsi come una cifratura a chiave segreta
ogni cifra decimale m viene mappata in una diversa cifra decimale c = (m + k) mod 10 in modo reversibile k la chiave segreta; chiaramente si tratta di un pessimo cifrario ( il cifrario di Cesare) la decifratura consiste nel sottrarre k mod 10; cio va sottratto k e se il risultato minore di 0, va aggiunto 10 come nellaritmetica ordinaria, sottrarre k equivale a sommare -k, cio linverso additivo di k

Addizione modulare mod 10


un inverso additivo di k un numero che sommato a k d 0; formalmente (k + (-k)) = 0 mod 10 ad esempio, linverso additivo di 4 6 perch 4 + 6 = 0 nellaritmetica modulo 10

Moltiplicazione modulare mod 10


Si consideri la tabella della moltiplicazione mod 10
la moltiplicazione mod 10 per una costante k {1, 3, 7, 9} pu riguardarsi come una cifratura a chiave segreta
produce una permutazione dellinput la moltiplicazione per ogni altro numero invece non funziona
0 0 0 0 1 0 1 2 2 0 2 4 3 0 3 6 4 0 4 8 5 0 5 0 6 0 6 2 7 0 7 4 8 0 8 6 9 0 9 8

Ad esempio, se si prova a cifrare moltiplicando per 5, met dei numeri sarebbero cambiati in 0 e laltra met in 5 ci comporta una perdita di informazione; la trasformazione non invertibile impossibile decifrare

0 1 2

3
4 5 6 7 8 9

0
0 0 0 0 0 0

3
4 5 6 7 8 9

6
8 0 2 4 6 8

9
2 5 8 1 4 7

2
6 0 4 8 2 6

5
0 5 0 5 0 5

8
4 0 6 2 8 4

1
8 5 2 9 6 3

4
2 0 8 6 4 2

7
6 5 4 3 2 1

Moltiplicazione modulare mod 10


Pertanto, la moltiplicazione mod 10 pu essere usata per cifrare
a condizione che il fattore k sia scelto in modo opportuno

La decifratura pu essere eseguita, analogamente al caso delladdizione, moltiplicando per linverso moltiplicativo di k
nellaritmetica ordinaria linverso moltiplicativo di k 1/k in generale 1/k una quantit frazionaria ma nellaritmetica modulare si considerano solo numeri interi

Inverso moltiplicativo mod n


Linverso moltiplicativo di k, scritto k-1, quel numero che moltiplicato per k d 1
(kk-1) mod 10 = 1 mod 10 in generale, (kk-1) mod n = 1 mod n

Si osservi che per un dato n, non tutti i numeri hanno un inverso moltiplicativo mod n
solo i numeri {1, 3, 7, 9} hanno gli inversi moltiplicativi mod 10
ad esempio, 7 un inverso moltiplicativo di 3 la cifratura pu ottenersi moltiplicando per 3 e la decifratura pu ottenersi moltiplicando per 7 9 un inverso di se stesso; 1 un inverso di se stesso

Inverso moltiplicativo mod n


Si osservi inoltre che
se k ammette un inverso moltiplicativo mod n esiste un unico inverso moltiplicativo k-1 < n
ad esempio, il numero 7 ammette i seguenti inversi moltiplicativi mod 10 {3, 13, 23, 33, , 3 + i10, }, ma soltanto 3 linverso moltiplicativo strettamente minore di 10

Ovviamente, la moltiplicazione mod n di per s non costituisce un cifrario sicuro


ma funziona, nel senso che la moltiplicazione per k produce un mescolamento dellinput; la decifratura pu ottenersi moltiplicando per k-1

Inverso moltiplicativo mod n


Trovare un inverso moltiplicativo k-1 nella aritmetica mod n, non affatto banale se n molto grande
ad esempio, se n un intero a 100 cifre un approccio a forza bruta sarebbe impraticabile

Esiste un modo efficiente per risolvere tale problema, noto come algoritmo di Euclide
dati x ed n (x < n), lalgoritmo di Euclide trova il numero y < n tale che (xy) mod n = 1 ammesso che un siffatto y esista

Numeri relativamente primi


DOMANDA
Per quale motivo soltanto i numeri {1, 3, 7, 9} ammettono un inverso moltiplicativo mod 10? Quali numeri ammettono un inverso moltiplicativo mod 10?

RISPOSTA: sono tutti e soli i numeri (minori di 10) relativamente primi con 10 Due numeri sono relativamente primi se lunico fattore comune 1 equivalentemente, Due numeri interi a e b sono relativamente primi se MCD(a, b) = 1
MCD Massimo Comun Divisore, o GCD Greatest Common Divisor

Funzione totiente di Eulero


in generale, nellaritmetica mod n, tutti gli interi (positivi) x relativamente primi con n ammettono un inverso moltiplicativo x-1 se n un numero primo tutti gli interi positivi x < n ammettono un inverso moltiplicativo (mod n) x-1
Security token

Dato un intero n > 1 Si definisce funzione di Eulero, o funzione totiente, la funzione che associa ad n il numero (n) degli interi positivi i n e relativamente primi con n
cio (n) = |{0 < i n: MCD(i, n) = 1}| per convenzione (0) = 0

Funzione totiente di Eulero


Se n primo tutti gli interi {1, 2, , n 1} sono relativamente primi con n (n) = n 1 DOMANDA: Se n = pq, ove p e q sono due numeri primi maggiori di 1, quanto vale (n)? RISPOSTA:
(n) = |N<n (Mp Mq)| = = |N<n| |Mp| |Mq| + |Mp dove
N<n = {1, 2, , n 1, n} Mp = {p1, p2, , p(q 1), pq} Mq = {1q, 2q, , (p 1)q, pq} Mp Mq = {pq}

Mq|

N<n N<n

(n) = pq q p + 1 = p(q 1) q + 1 = (p 1)(q 1)

Esponenziazione modulare
Lesponenziazione modulare, o elevamento a potenza modulare, simile a quella ordinaria
si esegue lesponenziazione ordinaria e si considera il resto della divisione per n
ad esempio, 46 = 6 mod 10 perch 46 = 4096 e 4096 = 6 mod 10
xy 0 1 1 1 0 1 0 1 2 2 0 1 4 3 0 1 8 4 0 1 6 5 0 1 2 6 0 1 4 7 0 1 8 8 0 1 6 9 0 1 2 10 0 1 4 11 0 1 8 12 0 1 6

si osservi che nellesponenziazione modulare xy mod n diverso da xy+n mod n ad esempio, 31 = 3 mod 10, ma 311 = 7 mod 10 (311 = 177147)

3
4 5 6 7 8 9

1
1 1 1 1 1 1

3
4 5 6 7 8 9

9
6 5 6 9 4 1

7
4 5 6 3 2 9

1
6 5 6 1 6 1

3
4 5 6 7 8 9

9
6 5 6 9 4 1

7
4 5 6 3 2 9

1
6 5 6 1 6 1

3
4 5 6 7 8 9

9
6 5 6 9 4 1

7
4 5 6 3 2 9

1
6 5 6 1 6 1

Esponenziazione modulare mod 10


Dalla precedente tabella, che illustra lesponenziazione mod 10, si osserva che
lesponenziazione per 3 (quarta colonna) pu considerarsi una cifratura
determina un mescolamento dellinput

lesponenziazione per 2 invece no


alcuni input scompaiono non iniettiva

quando lesponenziazione iniettiva, la decifratura pu ottenersi ricorrendo al logaritmo discreto (inverso dellesponenziazione)
come nel caso della moltiplicazione, nellesponenziazione modulare non tutti i numeri ammettono un logaritmo discreto

Esponenziazione modulare
Esaminando la tabella di esponenziazione mod 10 si nota un periodicit
per ogni i > 0, le colonne i e i + 4 coincidono, cio per ogni i > 0, xi mod 10 = xi + 4 mod 10

In effetti, si pu dimostrare il seguente risultato Sia n > 1 un intero privo di quadrati (square free), allora per ogni y > 0, xy mod n = x(y + (n)) mod n
un intero privo di quadrati se non compaiono fattori al quadrato nella sua scomposizione in fattori primi

Esponenziazione modulare
ad esempio, 10 privo di quadrati essendo 10 = 21 51 un numero primo sempre privo di quadrati

nel caso n = 10, i numeri relativamente primi a 10 sono {1, 3, 7, 9} (n) = 4

Dalla precedente relazione risulta che


se y = 1 mod (n) xy mod n = x mod n questultimo risultato sfruttato dallalgoritmo RSA

Crittografia a Chiave Pubblica Parte I

RSA

RSA Introduzione
RSA un algoritmo di cifratura (a blocchi) a chiave pubblica
il nome deriva degli inventori Rivest, Shamir e Adleman la lunghezza della chiave variabile
ci consente di ottenere il giusto compromesso sicurezza/efficienza solitamente si considerano chiavi di lunghezza 512 bit

anche la lunghezza dei blocchi variabile


un blocco di testo in chiaro deve avere una lunghezza inferiore a quella della chiave un blocco di testo cifrato lungo come la chiave

RSA Introduzione
RSA computazionalmente molto pi lento degli algoritmi a chiave segreta pi popolari come DES e IDEA
difficilmente viene usato per cifrare messaggi lunghi generalmente viene usato per cifrare una chiave segreta K, il messaggio viene poi cifrato con K usando un algoritmo a chiave segreta

Algoritmo RSA
Lalgoritmo RSA pu essere impiegato
sia per cifrare/decifrare messaggi sia per la firma digitale di messaggi

In entrambi i casi necessario disporre della coppia


chiave pubblica, chiave privata = PU, PR
tale coppia deve essere generata in modo opportuno

Nelle prossime slide si esaminer la


1. generazione di una coppia PU, PR 2. cifratura/decifratura RSA 3. firma digitale RSA

Generazione di PU, PR
1. Scegliere due numeri primi grandi p e q (circa 256 bit ciascuno); porre n = p q
fondamentale che p e q rimangano segreti si noti che fattorizzare n impraticabile

2. Scegliere un numero e che sia relativamente primo rispetto a (n) = (p 1)(q 1) 3. La chiave pubblica PU = e, n 4. Calcolare linverso moltiplicativo d di e mod (n)
cio d tale che (de) mod (n) = 1

5. La chiave privata PR = d, n

Cifratura/decifratura RSA
Sia PU = e, n la chiave pubblica del destinatario del messaggio cifrato e sia PR = d, n la sua chiave privata Sia m (< n) un messaggio da cifrare

CIFRATURA: il mittente, chiunque sia, usando la chiave pubblica PU del destinatario calcola il testo cifrato c = me mod n DECIFRATURA: il destinatario usando la propria chiave privata PR decifra c nel seguente modo m = cd mod n

Firma digitale RSA


Sia PR = d, n la chiave privata del firmatario del messaggio e sia PU = e, n la sua chiave pubblica Sia m (< n) un messaggio o un piccolo blocco di dati che funzione del messaggio

FIRMA: il firmatario usando la propria chiave privata PR calcola la firma digitale s s = md mod n VERIFICA: chiunque desidera verificare lautenticit della firma, usando la chiave pubblica PU del firmatario verifica che m = se mod n

Alcune domande
Di seguito si risponder alle seguenti domande

Perch RSA funziona?


Decifrando un messaggio cifrato si ottiene il messaggio in chiaro?

Perch RSA sicuro?


Dati e ed n, perch non possibile risalire a d?

Le operazioni di cifratura, decifratura, firma, e verifica della firma sono tutte sufficientemente efficienti da essere realizzabili nella pratica? Come possibile ottenere numeri primi grandi?

Perch RSA funziona


Mostriamo che
se c = E(PU, m) m = D(PR, c) = D(PR, E(PU, m))

si sfrutteranno le seguenti propriet


se m < n m mod n = m (xa mod n)b mod n = (xa)b mod n = xab mod n (e d) mod (n) = 1

PROVA
c = E(PU, m) = me mod n m = D(PR, c) = cd mod n = (me mod n)d mod n = (me)d mod n = med mod n = m(1 mod (n)) mod n = m mod n = m

la prova di correttezza della verifica della firma analoga

Perch RSA sicuro?


Non esistono prove formali di sicurezza
ci si affida al Fundamental Tenet of Cryptogtaphy
molte persone intelligenti hanno tentato di violarlo, ma hanno fallito

la sicurezza di RSA risiede nel fatto che fattorizzare interi molto grandi impraticabile
se esistesse un metodo veloce per fattorizzare interi molto grandi, allora nota la chiave pubblica PU = e, n si potrebbe ottenere la chiave privata PR = d, n infatti, identificando i numeri primi p e q tali che n = p q si ottiene facilmente (n) = (p 1)(q 1) e quindi si pu calcolare d come linverso moltiplicativo di e modulo (n)

Perch RSA sicuro?


tuttavia non si possono escludere altri metodi di violazione di RSA che non richiedono la fattorizzazione sebbene RSA ritenuto sicuro, per chiavi di almeno 256 bit, possibile utilizzarlo in modo improprio!
si supponga che Carol spedisca un messaggio ad Alice contenente il nome del suo fidanzato segreto Bob geloso, sa del messaggio di Carol ad Alice e sa che il fidanzato uno dei 15 ragazzi del corso di Sicurezza Informatica Bob non pu decifrare il messaggio, ma pu cifrare il nome di ogni ragazzo del corso di Sicurezza Informatica con la chiave pubblica di Alice e verificare quale di questi coincide con il messaggio inviato da Carol

Perch RSA sicuro?

DOMANDA: assumendo che Bob intercetti il messaggio di Carol, possibile impedirgli di ottenere informazioni?

Perch RSA sicuro?


Nel seguito si discuter come usare RSA in modo appropriato
per il momento una possibile risposta alla precedente domanda la seguente

RISPOSTA
Carol pu concatenare il nome del suo fidanzato con un numero random molto grande, diciamo a 64 bit Bob anzich 15 tentativi deve fare 15 264 tentativi!

Efficienza delle operazioni di RSA


In base al tipo di impiego, RSA svolge le seguenti operazioni molto frequentemente (ad ogni sessione di lavoro)
cifratura, decifratura, generazione di una firma digitale e verifica di una firma digitale necessario pertanto che tali operazioni siano svolte nel modo pi efficiente possibile

Invece, loperazione di generazione delle chiavi viene eseguita meno frequentemente


si pu tollerare una minore efficienza

Esponenziazione di grandi numeri


Le operazioni di cifratura, decifratura, firma e verifica della firma richiedono tutte di dover
considerare un intero molto grande, elevarlo ad un esponente (intero) molto grande, e trovare il resto della divisione intera per un numero molto grande

Considerando la dimensione dei numeri interi per i quali RSA ritenuto sicuro tali operazioni risulterebbero proibitive se eseguite nel modo pi ovvio
le prossime slide illustrano come possibile aumentare la velocit dei calcoli

Esempio calcolo di 12354 mod 678


assumendo di disporre di un software per la gestione dellaritmetica a precisione multipla

La soluzione pi ovvia
moltiplicare 54 volte 123 per se stesso
ottenendo un prodotto enorme (circa 100 cifre decimali)

e poi dividere per 678 per ottenere il resto


un computer potrebbe farlo con facilit

Tuttavia, per essere sicuro RSA richiede che i numeri siano di 150 cifre!
elevare un numero di 150 cifre ad un esponente anchesso di 150 cifre computazionalmente impraticabile
un calcolo di questo tipo esaurirebbe le capacit di tutti i computer esistenti per un tempo superiore al tempo di vita previsto delluniverso

Per fortuna esiste un metodo molto pi efficiente

Esempio calcolo di 12354 mod 678


Per evitare di ottenere numeri enormi
conviene effettuare una riduzione modulare di ogni prodotto intermedio; si noti che valgono le seguenti
(a b) mod n = ((a mod n ) (b mod n )) mod n (a b) mod n = (a (b mod n )) mod n

si pu procedere nel seguente modo


1232 = 123 123 = 15129 = 213 mod 678 1233 = 123 213 = 26199 = 435 mod 678 1234 = 123 435 = 53505 = 621 mod 678 12353 = 123 567 = 69741 = 585 mod 678 12354 = 123 585 = 71955 = 87 mod 678

Esempio calcolo di 12354 mod 678


necessario effettuare 54 moltiplicazioni e 54 divisioni di piccoli (< 678) numeri interi ancora una soluzione impraticabile
considerata la dimensione degli esponenti usati in RSA

tuttavia, esiste un metodo per migliorare ulteriormente lefficienza


si supponga per semplicit che lesponente sia una potenza di 2, ad esempio 32 = 25 la potenza a32 pu essere ottenuta calcolando 5 potenze al quadrato in cascata a32 = ((((a2 mod n)2 mod n)2 mod n)2 mod n)2 mod n

Esempio calcolo di 12354 mod 678


nel caso generale in cui lesponente non una potenza di 2, ad esempio 54, si pu tener conto delle seguenti osservazioni
noto ax a2x ottenibile da ax come segue a2x = (ax)2 mod n = (ax mod n)2 mod n mentre a2x+1 ottenibile da a2x come segue a2x+1 = ((a2x) a) mod n = ((a2x mod n) a) mod n

inoltre, la rappresentazione binaria di 54 (110110)2 fornisce

la corretta sequenza di potenze al quadrato e di moltiplicazioni (per la base 123) da effettuare in cascata per ottenere 12354

12354 cascata di pot. e molt.


codifica binaria di 54 1 1 0 1 1 0

INPUT
0
1

OUTPUT
+1
b

2
( )2

2
( )2

+1
b

2
( )2

2
( )2

+1
b

2
( )2

+1
b

2
( )2

54

LEGENDA

87 mod 678

( )2 eleva al quadrato la base ed effettua la riduzione modulare b moltiplica per la base 123 ed effettua la riduzione modulare

12354 cascata di pot. e molt.


in definitiva, per effettuare lesponenziazione di una base ad un esponente
si parte da un valore iniziale tmp = 1, e si scandisce lesponente, bit a bit, dal bit pi significativo a quello meno significativo per ciascun bit considerato si eleva al quadrato il valore corrente di tmp se il bit 1 si moltiplica anche per la base chiaramente, dopo ogni operazione si esegue la riduzione modulare

12354 cascata di pot. e molt.


con la tecnica appena illustrata il calcolo di 12354 richiede di fatto 8 moltiplicazioni e 8 divisioni, ma soprattutto il numero di moltiplicazioni e divisioni cresce linearmente con il numero di bit dellesponente e non con il suo valore
e = 2Nb 1 ove Nb = numero bit dellesponente

con questa tecnica RSA sufficientemente efficiente da poter essere usato

Generazione delle chiavi RSA


La generazione delle chiavi RSA unoperazione poco frequente
in gran parte delle applicazioni della tecnologia a chiave pubblica deve essere eseguita soltanto una volta
ad esempio quando un impiegato viene assunto

non richiesta la stessa efficienza delle altre operazioni RSA; deve comunque essere garantita unefficienza ragionevole

Per generare una coppia di chiavi PU, PR necessario


trovare due numeri primi p e q molto grandi, e trovare due interi d ed e con le propriet precedentemente descritte

Trovare due numeri primi grandi p e q


esistono infiniti numeri primi; tali numeri tendono per a diradarsi sempre pi al crescere di n
estraendo n a caso Pr{n primo} 1 / ln n Pr{n primo} 1 / Nb ove Nb denota il numero di bit di n la densit dei numeri primi inversamente proporzionale alla loro lunghezza in bit (o in cifre decimali) per un numero n a dieci cifre decimali (dimensione usata in RSA) c una possibilit su 230 di essere primo

Trovare due numeri primi grandi p e q


Pertanto p e q sono generati con la seguente strategia
1. estrai un numero dispari molto grande 2. verifica se primo, in caso negativo ritenta mediamente sono necessari 230 tentativi per trovare un numero primo

tale strategia praticabile solo se si dispone di un test di primalit efficiente Come possibile testare se un intero n primo?
un metodo banale consiste nel dividere n per tutti gli interi n1/2 e verificare che non ci sono divisori > 1, ma ci richiederebbe diverse vite delluniverso!

Trovare due numeri primi grandi p e q


prima del 2002 non esisteva un test di primalit polinomiale nel 2002 stato pubblicato il test di primalit deterministico AKS

RSA usa un test di primalit probabilistico


non si pu affermare con certezza che lesito del test corretto tuttavia, la probabilit di errore pu essere resa arbitrariamente piccola aumentando il tempo di test il test si basa sul teorema di Fermat che fornisce una condizione necessaria affinch un intero n sia primo se n primo per ogni intero a risulta an 1 = 1 mod n non vale per il viceversa, esistono degli interi a per i quali luguaglianza verificata anche se n non primo

Test di primalit probabilistico


Dato un intero n, un possibile test di primalit il seguente

1) scegliere un intero a < n 2) calcolare an-1 mod n 3a) se il risultato diverso da 1 n certamente non primo 3b) se il risultato 1 n potrebbe essere primo, ma potrebbe anche non esserlo
stato dimostrato che se n un intero random di circa cento cifre decimali la probabilit di un falso positivo di circa 10-13

Test di primalit probabilistico


si osservi che un errore nel test di primalit pu rendere
impossibile la decifratura RSA di un messaggio pi facile lidentificazione della chiave privata

se una probabilit di errore pari a 10-13 non ritenuta sufficiente si possono effettuare pi test con diversi valori di a
Pr{falso positivo dopo k test} = (10-13)k la probabilit di errore pu essere resa arbitrariamente piccola, ma non sempre la vita cos semplice! ci possono essere dei casi veramente sfortunati non rilevabili dal test, ci accade se n un numero di Carmichael

Test di primalit probabilistico


un numero n un numero di Carmichael se non primo e se per ogni a < n risulta an-1 = 1 mod n i numeri di Carmichael sono sufficientemente rari che estremamente improbabile estrarli a caso tuttavia, a fronte di un piccolo costo computazionale aggiuntivo possibile migliorare il test di primalit precedente introducendo altri controlli che permettono di rilevare con maggior probabilit se n non primo un test molto efficace il test di primalit di Miller e Rabin

Test di primalit di Miller e Rabin


Sfrutta un ulteriore CN di primalit:
se n primo le uniche radici quadrate modulo n di 1 sono 1 e -1 (si noti che -1 = n 1 mod n)
cio, se a un intero tale che a2 mod n = 1 deve essere a = 1 oppure a = -1 in caso contrario si desume che n non primo

tali controlli sulle radici quadrate vengono eseguiti nei risultati intermedi necessari al calcolo di an-1 mod n per il test precedente
a tale scopo viene sempre espresso n 1 come 2bc ove c un numero dispari il test precedente diventa a^(2bc) mod n = 1

Test di primalit di Miller e Rabin


il test sulle radici quadrate mod n di 1 permette di aumentare notevolmente la capacit di individuare dei falsi positivi
se n non primo (anche se un numero di Carmichael) almeno di tutti i possibili valori di a permettono di rilevarlo lesecuzione del test con diversi valori di a permette di ridurre a piacere la probabilit di errore; anche nel caso in cui n un numero di Carmichael

Test di primalit di Miller e Rabin


1. 2. Sia n un numero dispari. Testare se n divisibile per qualche numero primo piccolo. In caso affermativo tornare al punto 1. (tale step non strettamente
necessario, ma vale la pena eseguirlo perch pu rilevare un numero non primo con buona probabilit)

3.

Ripetere i seguenti step arrestandosi quando si prova che n non primo oppure dopo un numero di volte ritenute sufficienti a considerare n primo con elevata probabilit. 3.1 Scegliere randomicamente un numero a.

3.2 Calcolare ac mod n (dove c il numero dispari tale che n 1 = 2bc) eseguendo una sequenza di potenze al quadrato e/o moltiplicazioni per la base a.

Test di primalit di Miller e Rabin


Ad ogni elevamento al quadrato controllare se il risultato 1. Se s, controllare se il numero elevato al quadrato (cio la radice quadrata mod n di 1) era pari a 1; in caso negativo, n non primo. 3.3 Se ac mod n pari a 1, n supera il test di primalit per questo valore di a. 3.4 Altrimenti, ac mod n 1, al pi b 1 volte, sostituisci il risultato con il suo quadrato e verifica se si ottiene 1. Se si ottiene 1, n non primo (perch il precedente risultato una radice quadrata di 1 diversa da 1). Se si ottiene -1, n supera il test di primalit per questo valore di a.

Test di primalit di Miller e Rabin


Se sono state eseguite b 1 potenze al quadrato, n non primo (perch a(n 1)/2 diverso da 1)

Calcolo di d ed e
Gli interi d ed e sono definiti nel seguente modo
e un qualunque numero relativamente primo rispetto allintero (n) = (p 1)(q 1) d lintero tale che (e d) mod (n) = 1

noto e, d si calcola con lalgoritmo di Euclide

Calcolo di d ed e
esistono due possibili strategie per il calcolo di e 1. Una volta ottenuti p e q
scegliere e randomicamente e testare se e e (p 1)(q 1) sono relativamente primi in caso negativo, selezionare un altro valore per e scegliere prima e poi selezionare p e q in modo tale che (p 1) e (q 1) sono relativamente primi rispetto ad e nelle slide seguenti si illustrer per quale motivo la strategia 2. conveniente e come possibile attuarla

2. Non selezionare prima p e q, invece

Come scegliere e
La sicurezza di RSA non diminuisce (per quanto ad oggi noto) se e sempre scelto allo stesso modo
si noti che d continua ad essere imprevedibile se p e q non sono noti
d oltre a dipendere da e dipende anche da p e da q

se e un intero piccolo o facile da calcolare le operazioni di cifratura e di verifica della firma diventano pi efficienti
cio le operazioni che richiedono luso della chiave pubblica PU = e, n sono pi veloci, mentre risulta invariata lefficienza delle operazioni che richiedono la chiave privata PR = d, n

Come scegliere e
chiaramente, diversamente da e, non si pu assegnare a d un valore piccolo sebbene ci renderebbe molto pi veloci le operazioni che usano la chiave privata PR, la sicurezza di RSA verrebbe meno; un avversario potrebbe identificare PR con una semplice ricerca!

Generalmente si assegna ad e uno dei seguenti valori e=3 e = 65537

Perch e = 3?
La scelta e = 3 quella che assegna ad e il pi piccolo valore possibile
2 non va bene perch non relativamente primo con (p 1)(q 1) che un numero pari 3 pu funzionare
il calcolo di m3 mod n richiede soltanto due moltiplicazioni un esponente pubblico pari a 3 massimizza le prestazioni per quanto ad oggi noto, la sicurezza di RSA non indebolita se vengono messi in essere degli opportuni accorgimenti pratici nelle prossime slide si esaminer quali rischi si corrono se e = 3 e come sia possibile far fronte a tali rischi

e = 3 vulnerabilit/patch
La scelta di e = 3 comporta le seguente vulnerabilit
se il messaggio m da cifrare rappresenta un intero piccolo, in particolare se m inferiore alla radice cubica ordinaria di n: m < n1/3 c = me mod n = m3 mod n = m3 un avversario pu decifrare c senza conoscere la chiave privata; semplicemente estraendo la radice cubica ordinaria di c: m = c1/3 tale vulnerabilit pu essere rimossa eseguendo un padding random del messaggio tale che m3 > n
ci garantisce che m3 viene sempre ridotto mod n

e = 3 vulnerabilit/patch
Unaltra vulnerabilit si ha se
uno stesso messaggio m viene inviato cifrato a tre o pi destinatari aventi un esponente pubblico e =3 il messaggio in chiaro m pu essere decifrato conoscendo soltanto

PROVA

i tre messaggi cifrati c1, c2 e c3 e le tre chiavi pubbliche 3, n1 , 3, n2 e 3, n3

si supponga che un avversario intercetti tre cifrature dello stesso messaggio m c1 = m3 mod n1 c2 = m3 mod n2 c3 = m3 mod n3

e = 3 vulnerabilit/patch
conoscendo anche le tre chiavi pubbliche dei destinatari 3, n1 , 3, n2 e 3, n3 e utilizzando il teorema cinese del resto, lavversario pu calcolare m3 mod n1 n2 n3 essendo m < ni per i = 1, 2, 3 m3 < n1 n2 n3 m3 mod n1 n2 n3 = m3 lavversario pu risalire ad m estraendo una radice cubica ordinaria anche questa vulnerabilit pu essere rimossa mediante un padding random
in pratica si evita che uno stesso messaggio cifrato venga inviato a pi destinatari

e = 3 vulnerabilit/patch
Si osservi che nelle applicazioni pratiche di RSA,
il messaggio m generalmente una chiave di un algoritmo di cifratura a chiave segreta e in ogni caso m molto pi piccolo di n sempre possibile aggiungere dei bit di riempimento (padding) in modo tale che il messaggio risultante presenti delle caratteristiche desiderate se per ogni destinatario il padding scelto random la precedente vulnerabilit viene rimossa la vulnerabilit pu essere rimossa anche usando come padding gli identificatori univoci (ID) dei destinatari

Come scegliere p e q se e = 3
Essendo e = 3,
come possibile selezionare p e q garantendo che e e (n) siano relativamente primi? necessario garantire che (p 1) e (q 1) siano relativamente primi rispetto a 3 ci pu ottenersi
scegliendo p tale che scegliendo q tale che (p 1) mod 3 = 1 (q 1) mod 3 = 1 p mod 3 = 2, e q mod 3 = 2 (p 1) non divisibile per 3 (q 1) non divisibile per 3

Come scegliere p e q se e = 3
essendo p e q due interi dispari
p = 2kp + 1 q = 2kq + 1

per imporre anche che risulti


p mod 3 = 2 q mod 3 = 2

si pu porre
p = (2kp + 1)3 + 2 = 6kp + 5 q = (2kq + 1)3 + 2 = 6kq + 5

dopodich pu essere effettuato il test di primalit

Perch e = 65537?
La scelta di e = 65537
(in opposizione ad altri interi della stessa dimensione)

deriva dal fatto che 65537 = 216 + 1 ed primo (65537)2 = 10000000000000001 lesponenziazione richiede 17 moltiplicazioni
pi lenta del caso e = 3, ma molto pi veloce del caso in cui e scelto in modo randomico; mediamente sono richieste 768 moltiplicazioni nel caso di 512 bit

non presenta le vulnerabilit viste nel caso e = 3

e = 65537 introduce vulnerabilit?


La scelta di e = 65537 rimuove o riduce quasi del tutto le vulnerabilit viste nel caso e = 3
la prima vulnerabilit con 3 si ha se m3 < n nel caso e = 65537
a meno che n non sia molto pi lungo di 512 bit

non ci sono molti valori di m tali che m65537 < n quindi lestrazione della 65537-esima radice ordinaria di m non costituisce una vulnerabilit seria

e = 65537 vantaggi/svantaggi
la seconda vulnerabilit con 3 si ha se uno stesso messaggio m cifrato inviato a 3 destinatari nel caso e = 65537 la stesso tipo di vulnerabilit si ha quando m viene inviato a 65537 destinatari!
non si pu dire certo che si tratti i un messaggio segreto!

in fine, la scelta di fissare a priori e = 3 ha richiesto di scegliere n in modo tale che (n) e 3 fossero relativamente primi nel caso e = 65537 conviene
generare p e q come se e non fosse prefissato, e rigettare ogni valore di p o q che uguale a 1 mod 65537 tale evento si verifica con una probabilit molto piccola (2-16)

Vulnerabilit arcane di RSA


Nel caso della firma digitale risulta che
per ogni numero x < n x la firma digitale del messaggio mx = xe mod n
infatti, mxd mod n = (xe mod n)d mod n = xed mod n = = x(1 mod (n)) mod n = x mod n = x

banale falsificare la firma di qualcuno se il messaggio m da firmare non interessa la difficolt sta nel falsificare la firma di uno specifico messaggio

Vulnerabilit arcane di RSA


generalmente, ci che viene firmato (messaggio + padding) ha una struttura sufficientemente vincolata
vengono inseriti dei bit di riempimento organizzati in pattern regolari la probabilit che un numero random costituisca un messaggio (padding incluso) valido trascurabile; cio estremamente improbabile che un numero random contenga i pattern regolari di bit tuttavia, visto che i numeri in RSA sono molto grandi un avversario ha a disposizione molti tentativi i pattern di riempimento vanno scelti in modo opportuno

Smooth Numbers
Intuitivamente, uno smooth number un numero scomponibile nel prodotto di (molti) numeri primi ragionevolmente piccoli
non conviene usare una definizione assoluta; un numero piccolo o grande in base alle capacit di calcolo dellavversario esempio, il numero 6056820 pi smooth del numero 6567587, poich 6056820 = 22 32 5 7 11 19 23 6567587 = 13 557 907

Vulnerabilit smooth number


Si tratta di una vulnerabilit di RSA prevalentemente teorica
nella pratica difficilmente realizzabile
richiederebbe unimmensa capacit di calcolo, la raccolta di un numero enorme di messaggi firmati e molta fortuna (per lavversario)

IDEA BASE
dalle firme s1 e s2 dei messaggi m1 ed m2, possibile calcolare le firme dei messaggi m1 m2, m1 / m2, m1j, m2k, e m1j m2k ad esempio, conoscendo la firma s1 = m1d mod n possibile ottenere la firma di m12 senza conoscere d (chiave privata) infatti, (m12)d mod n = (m1d)2 mod n = (m1d mod n)2 mod n

Vulnerabilit smooth number


la firma di m12 pari a s12 mod n

se un avversario riesce a collezionare molti messaggi firmati, pu ottenere la firma di ogni messaggio m esprimibile come prodotto e/o divisione di messaggi della collezione
in particolare, se ottiene le firme di due messaggi m1 e m2 tali che il rapporto m1 / m2 = p dove p un numero primo pu calcolare la firma di p

se abbastanza fortunato da raccogliere molte coppie di questo tipo


pu calcolare la firma di molti numeri primi

Vulnerabilit smooth number


pu falsificare la firma di ogni messaggio dato dal prodotto di ogni sottoinsieme di tali numeri primi ciascuno elevato ad una qualunque potenza

con abbastanza coppie, pu falsificare la firma di ogni messaggio rappresentato da uno smooth number generalmente, ci che si firma con RSA un digest messaggio con padding m* = pad(h(m))
al digest del messaggio m vengono aggiunti, in modo opportuno, dei bit di riempimento (padding) ottenendo m* se i bit di riempimento sono degli zeri, anzich essere random pi probabile che m* sia uno smooth number

Vulnerabilit smooth number


invece, estremamente improbabile che un numero random mod n sia smooth

con un padding a sinistra di soli zeri


lintero da firmare mp = h(m) rimane piccolo il padding non riduce la probabilit che mp sia smooth

con un padding a destra di soli zeri


mp = h(m) 2k un intero molto pi grande, ma divisibile per una potenza di due di nuovo, il padding non riduce la probabilit che mp sia smooth

Vulnerabilit smooth number


con un padding a destra random
lintero da firmare mp estremamente improbabile che sia smooth

tuttavia, si espone RSA alla minaccia nota come il problema della radice cubica

Problema della radice cubica


Si assuma che si optato per padding a destra random
per ridurre la probabilit che le firme prodotte siano smooth si ha in seguente inconveniente se lesponente pubblico e = 3

un attaccante pu virtualmente falsificare la firma di un qualsiasi messaggio

Problema della radice cubica


supponiamo che un attaccante, Carol, voglia falsificare la firma di un qualche messaggio m avente digest hm allora Carol applica un padding a destra, di hm, considerando bit a zero ottenendo pm = hm0000 poi calcola la radice cubica ordinaria e la arrotonda allintero pi vicino r = round(pm1/3) r la firma falsificata di m
infatti, re = r3 = pm ossia hm con un padding a destra che apparentemente casuale

Crittografia a Chiave Pubblica Parte I

PUBLIC-KEY CRYPTOGRAPHY STANDARD (PKCS)

PKCS
PKCS sta per Public-Key Cryprography Stanbdard
Standard di Crittografia a Chiave Pubblica si visto che ogni applicazione di RSA, cifratura, decifratura e firma, pu essere soggetta a diversi tipi di attacchi
che possono essere sventati con opportune contromisure, basate sulla scelta di unopportuna codifica/formato (quindi padding) del messaggio da cifrare/firmare

PKCS: impieghi
esistono 15 standard PKCS per le diverse situazioni in cui la cifratura a chiave pubblica viene utilizzata nelle prossime slides si esaminer solo PKCS #1

Tale standard stabilisce le codifiche per


la chiave pubblica RSA la chiave privata RSA la firma RSA la cifratura RSA di messaggi corti (ossia chiavi segrete) la firma RSA di messaggi corti (tipicamente digest)

PKCS #1: minacce considerate


Lo standard PKCS #1 stato concepito per fronteggiare le seguenti minacce:
cifratura di messaggi prevedibili smooth number per le firme destinatari multipli di uno stesso messaggio quando e = 3 cifratura di messaggi di lunghezza inferiore ad un terzo della lunghezza di n quando e = 3 firma di messaggi dove linformazione posta nei bit pi significativi ed e = 3

PKCS #1: Cifratura


PKCS #1 definisce uno standard, tra laltro, per la formattazione di un messaggio da cifrare con RSA
in genere, RSA non viene usato per cifrare messaggi ordinari, ma per cifrare delle chiavi segrete
per questioni di efficienza conviene usare la cifratura a chiave segreta per dati ordinari

lo standard prevede il seguente formato per linput m

0 2

almeno otto ottetti random non nulli

data

PKCS #1: Cifratura


i dati effettivi da cifrare, generalmente una chiave segreta, sono pi corti del modulo (cio di n, che generalmente ha una lunghezza di 512 bit)
KDES ha una lunghezza di 64 bit K3DES ha una lunghezza di 128 bit

il 1 ottetto 0 (cio otto bit nulli)


ci garantisce che m < n; se fosse m > n la decifratura produrrebbe m mod n m

il 2 ottetto 2, definisce il tipo di formato


il valore 1 stabilisce che m viene firmato il valore 2 stabilisce che m viene cifrato

0 2

almeno otto ottetti random non nulli

data

PKCS #1: Cifratura


seguono poi almeno otto ottetti di padding non nulli scelti in modo randomico e indipendente luno dallaltro
lottetto 0 (nullo) va scartato perch viene usato come separatore del padding dalla parte dati

0 2

almeno otto ottetti random non nulli

data

PKCS #1: protezione minacce cifratura


vediamo come le scelte del formato standard per la cifratura permettono di sventare le minacce precedentemente esaminate

Cifratura di messaggi prevedibili


con almeno otto ottetti (64 bit) di padding random anche se un attaccante in grado di prevedere i dati effettivi da cifrare
ad esempio i dati potrebbero appartenere ad un insieme con pochi elementi noti allattaccante lattaccante potrebbe cifrare ciascun dato e verificare se quanto ottenuto coincide con il testo cifrato

lattaccante dovrebbe anche indovinare il padding


cio una sequenza di almeno 64 bit random

PKCS #1: protezione minacce cifratura


Spedizione di uno stesso messaggio cifrato a pi di tre destinatari
nellipotesi e = 3

anche se i dati dati da cifrare sono esattamente gli stessi per tutti i destinatari, la scelta del padding random garantisce che, in input allalgoritmo di cifratura sono forniti, con elevatissima probabilit, dei messaggi distinti

PKCS #1: protezione minacce cifratura


Cifratura di messaggi di lunghezza inferiore ad un terzo della lunghezza di n nellipotesi e = 3

essendo il secondo ottetto non nullo, ( pari a 2),


il messaggio ottenuto m ha sicuramente una lunghezza superiore ad un terzo della lunghezza del modulo n

PKCS #1: firma digitale


PKCS #1 definisce anche uno standard per la formattazione di un messaggio da firmare con RSA
in genere, i dati da firmare consistono in un digest di un messaggio, tipicamente 128 bit analogamente alla cifratura necessario applicare un padding lo standard prevede il seguente formato per linput m

0 1

almeno otto ottetti di ff16

tipo-di-digest e digest

il tipo-di-digest viene specificato con una notazione ASN.1

PKCS #1: protezione minacce firma


il 1 ottetto pari 0 m < n il 2 ottetto 1, e specifica il tipo di formato PKCS
in questo caso, una quantit da firmare

il padding con almeno otto ottetti pari a ff16 (otto bit a 1) rende la quantit da firmare molto grande altamente improbabile che sia uno smooth number

PKCS #1: protezione minacce firma


Domanda: perch viene anche incluso il tipo di algoritmo di digest utilizzato?
espresso nella notazione ASN.1

Risposta: il tipo di digest incluso per due motivi


1. viene standardizzato come comunicare allaltra parte lalgoritmo di digest utilizzato 2. serve a prevenire una minaccia oscura

PKCS #1: protezione minacce firma


la minaccia oscura la seguente una funzione di hash, ad esempio MD4, potrebbe essere debole
qualcuno potrebbe essere in grado di generare un messaggio con un particolare digest MD4 si supponga, che nel firmare un messaggio m venga usato MD5, ma non sia incluso lalgoritmo di digest usato un avversario potrebbe allora generare un messaggio m tale che MD4(m) = MD5(m) ed usare la firma corrispondente ad m per m

includere il tipo di algoritmo di digest il rischio di falsificazione che si corre dipende solo dalla robustezza di tale algoritmo

Crittografia a Chiave Pubblica

APPENDICE

Teoremi di Eulero e di Fermat


Teorema di Eulero: per ogni intero a relativamente primo ad n si ha a(n) = 1 mod n
nel caso in cui n primo (n) = n 1 il teorema assume una forma pi semplice e un altro nome

Teorema di Fermat: se p primo e 0 < a < p ap 1 = 1 mod p

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

Potrebbero piacerti anche