Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Luca Grilli
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
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
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
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
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
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
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
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
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
Mq|
N<n N<n
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
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
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
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
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: 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
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?
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 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)
DOMANDA: assumendo che Bob intercetti il messaggio di Carol, possibile impedirgli di ottenere informazioni?
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!
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
La soluzione pi ovvia
moltiplicare 54 volte 123 per se stesso
ottenendo un prodotto enorme (circa 100 cifre decimali)
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
la corretta sequenza di potenze al quadrato e di moltiplicazioni (per la base 123) da effettuare in cascata per ottenere 12354
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
non richiesta la stessa efficienza delle altre operazioni RSA; deve comunque essere garantita unefficienza ragionevole
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!
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
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
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
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.
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
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
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!
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
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
si pu porre
p = (2kp + 1)3 + 2 = 6kp + 5 q = (2kq + 1)3 + 2 = 6kq + 5
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 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)
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
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
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
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
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
tuttavia, si espone RSA alla minaccia nota come il problema della radice cubica
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
0 2
data
0 2
data
0 2
data
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
0 1
tipo-di-digest e digest
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
includere il tipo di algoritmo di digest il rischio di falsificazione che si corre dipende solo dalla robustezza di tale algoritmo
APPENDICE
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