Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
1
❖ PROBLEMA COMPUTAZIONALE
Sia 𝑝 un primo ed 𝛼 una radice primitiva (𝑚𝑜𝑑 𝑝). Dati 𝛼 𝑥 (𝑚𝑜𝑑 𝑝) e 𝛼 𝑦 (𝑚𝑜𝑑 𝑝), si
riesce a trovare 𝛼 𝑥𝑦 ?
- Se Eve fosse in grado di calcolare il logaritmo violerebbe subito il sistema, calcola 𝑥, 𝑦
e ricava 𝛼 𝑥𝑦 .
- Eve potrebbe non aver bisogno di calcolare 𝑥 o 𝑦 per recuperare il messaggio. Non è
noto se ci sia un metodo più facile che calcolarsi il logaritmo discreto, sicuramente non
più difficile.
All’algoritmo
Alice e Bob credono di interloquire tra loro
questo perché Eve ha corrotto il protocollo senza
rompere la sicurezza matematica del logaritmo
discreto ma semplicemente infilandosi nel
mezzo è riuscita a concordare un segreto con
Alice ed un altro con Bob. A questo punto, Alice
e Bob hanno condiviso con Eve entrambi i loro
segreti. Segreti che poi vengono usati per
cifrare-decifrare con cifrario simmetrico dati
sensibili, perché il meccanismo di Diffie-
Hellman serve ad instaurare la chiave di
sessione. In questo caso le chiavi di sessione sono 2, una tra Alice e Eve, l’altra tra Eve e
Bob. L’unico modo per contrastare questo attacco è autenticando i messaggi tramite firma
digitale.
2
2- RSA, Ronal Rivest, Adi Shamir e Leonard Adleman, 1977
Metodo di cifratura asimmetrica basato sul problema matematico della fattorizzazione di
grandi numeri interi, utilizzato anche per scambiare chiavi di sessione, basta invertire il
protocollo di cifratura.
❖ FASE 2: CIFRATURA
La chiave pubblica è usata per cifrare.
Procedura
1- Alice scrive il messaggio segreto come un numero 𝑚. Se 𝑚 > 𝑛, Alice spezza il
messaggio in blocchi di lunghezza < 𝑛, per il momento supponiamo 𝑚 < 𝑛.
2- Alice cifra 𝑚, calcolando: 𝑐 ≡ 𝑚𝑒 (𝑚𝑜𝑑 𝑛).
3- Alice invia 𝑐 a Bob.
❖ FASE 3: DECIFRATURA
La chiave privata, corrispondente a quella pubblica, viene usata per decifrare.
Procedura
1- Bob decifra 𝑐, calcolando 𝑚 ≡ 𝑐 𝑑 (𝑚𝑜𝑑 𝑛).
3
❖ ESEMPIO
𝑝 = 885320963, 𝑞 = 238855417
→ 𝑛 = 𝑝𝑞 = 211463707796206571
𝑒 = 9007
Alice vuol inviare la stringa ′𝑐𝑎𝑡′, con la convenzione che:
𝑎 = 01
𝑏 = 02
…
𝑧 = 26
→ 𝑐𝑎𝑡 = 030120 = 30120
𝑐 ≡ 𝑚𝑒 ≡ 301209007 ≡ 113535859035722866 (𝑚𝑜𝑑 𝑛).
Mediante l’algoritmo di Euclide esteso, Bob calcola 𝑑 = 116402471153538991 ed
infine, 𝑐 𝑑 ≡ 113535859035722866116402471153538991 ≡ 30120 (𝑚𝑜𝑑 𝑛), coincidente
con 𝑚.
Tutti gli elevamenti a potenza vanno fatti con il metodo visto nel capitolo precedente.
❖ SICUREZZA
1- Eve conosce 𝑛 ed 𝑒 e può intercettare 𝑐 = 𝑚𝑒 ma non riesce a trovare la radice 𝑒-
esima.
2- Non conosce 𝑝, 𝑞, 𝑑, quest’ultimo va mantenuto segreto perché la fattorizzazione di 𝑛 è
possibile se si conosce 𝑑. Anche 𝜑(𝑛) dev’essere mantenuto segreto, altrimenti Eve
riesce a ricavare 𝑑 dato che 𝑒 è il suo inverso moltiplicativo, non è possibile perché non
conosce il modulo, essendo (𝑚𝑜𝑑 𝜑(𝑛)).
3- Bob sceglie 𝑝 e 𝑞 a caso, indipendenti l’uno dall’altro e molto grandi, almeno 100
cifre, meglio se di lunghezze leggermente diversi, alcune scelte vanno evitate perché
facilitano la fattorizzazione.
4- Trovare 𝜑(𝑛) o 𝑑, esponente di decifratura è difficile quanto fattorizzare 𝑛.
Sia 𝑛 = 𝑝𝑞, il prodotto di due primi distinti, se 𝑛 e 𝜑(𝑛) sono noti, allora 𝑝 e 𝑞
possono essere calcolati:
𝑛 − 𝜑(𝑛) + 1 ± √(𝑛 − 𝜑(𝑛) + 1)2 − 4𝑛
𝑝, 𝑞 =
2
Come radici del polinomio:
𝑋 2 − (𝑛 − 𝜑(𝑛) + 1)𝑋 + 𝑛
= 𝑋 2 − (𝑝𝑞 − (𝑝 − 1)(𝑞 − 1) + 1)𝑋 + 𝑝𝑞
= 𝑋 2 − (𝑝 + 𝑞)𝑋 + 𝑝𝑞
= (𝑋 − 𝑝)(𝑋 − 𝑞)
→ 𝑋 2 − (𝑛 − 𝜑(𝑛) + 1)𝑋 + 𝑛 = (𝑋 − 𝑝)(𝑋 − 𝑞)
→ se conosco sia 𝜑(𝑛) che 𝑛 riesco a trovarmi 𝑝 e 𝑞.
4
❖ VELOCITÀ
- Richiede il calcolo di potenze in aritmetica modulare, come 𝑚𝑒 (𝑚𝑜𝑑 𝑛), che per via
dei numeri in gioco, richiede un metodo efficiente di calcolo. Tempo richiesto: potenza
di log (𝑛).
- Tempi accettabili se la mole di dati da cifrare, o firmare, è contenuta. Per questo è
impiegata:
A- Scambio di chiave di sessione.
La differenza con l’algoritmo di Diffie-Hellman sta nel fatto che la chiave è scelta
in maniera autonoma da Alice.
B- Mandare messaggi corti.
In entrambi i casi il sistema è one shot, non c’è un rimbalzo d’informazioni tra
destinatario e mittente, il mittente fornisce al destinatario tutti gli elementi per risalire
al messaggio.
❖ ATTACCHI
A- TEOREMA
𝑡 𝑡
Sia 𝑡 il numero delle cifre di 𝑛 = 𝑝𝑞. Se si conoscono le prime 4, o le ultime 4, cifre di
𝑝, allora si può fattorizzare 𝑛 in modo efficiente.
B- TEOREMA
Sia (𝑛, 𝑒) una chiave pubblica RSA, sia 𝑡 il numero delle cifre di 𝑛 e sia 𝑑, l’esponente
𝑡
di decifratura. Se si hanno almeno le ultime 4 cifre di 𝑑, allora si può trovare 𝑑 in modo
efficiente in un tempo che è lineare in 𝑒 log 2 𝑒.
C- TEOREMA
Se 𝑒 è piccolo, allora è piuttosto veloce trovare 𝑑 quando si conosce una parte
consistente di esso. Se 𝑒 è grande, per esempio quanto 𝑛, il teorema non dà un risultato
più favorevole di una ricerca di 𝑑 caso per caso, ricerca esaustiva.
D- TEOREMA
Siano 𝑝 e 𝑞 due primi tali che, 𝑞 < 𝑝 < 2𝑞.
Sia 𝑛 = 𝑝𝑞.
Siano 1 ≤ 𝑑, 𝑒 ≤ 𝜑(𝑛), tali che 𝑑𝑒 ≡ 1 (𝑚𝑜𝑑 (𝑝 − 1)(𝑞 − 1)).
1
1
Se 𝑑 < 3 𝑛4 → 𝑑 può essere calcolato rapidamente in un tempo polinomiale in log (𝑛).
5
E- ATTACCHI BASATI SUL TEMPO D’ESECUZIONE E SIDE CHANNEL
ATTACKS
Applicabili a tutti i sistemi crittografici, furono introdotti da Paul Kocher nel 1995 e
consistono nella stima del tempo impiegato per eseguire operazioni crittografiche al
fine di scoprire informazioni segrete, giacché alcune possono richiedere più o meno
tempo di altre e quindi lo studio di queste informazioni temporali può essere
un’informazione preziosa per il crittoanalista. L’implementazione di questo tipo di
attacco è intimamente legato all’hardware e al software attaccato.
Esempio
Possibile algoritmo di calcolo di Bob per 𝑦 𝑑 (𝑚𝑜𝑑 𝑛) dove la chiave di decifratura
𝑑 = 𝑏1 𝑏2 … 𝑏𝑤 è un numero binario ed 𝑦, 𝑛 interi:
1- Imponi il contatore dei bit 𝑘 = 1 e lo stato 𝑠1 = 1.
2- Se 𝑏𝑘 = 1 allora calcola 𝑟𝑘 ≡ 𝑠𝑘 𝑦 (𝑚𝑜𝑑 𝑛).
Se 𝑏𝑘 = 0 allora calcola 𝑟𝑘 ≡ 𝑠𝑘 (𝑚𝑜𝑑 𝑛).
3- Aggiorna lo stato 𝑠𝑘+1 ≡ 𝑟𝑘2 (𝑚𝑜𝑑 𝑛).
4- Quando 𝑘 = 𝑤 fermati.
Se invece 𝑘 < 𝑤, 𝑘 = 𝑘 + 1 e riparti dal punto 2.
Alla fine, 𝑟𝑤 ≡ 𝑦 𝑑 (𝑚𝑜𝑑 𝑛).
Supponiamo che per ogni testo cifrato 𝑦𝑖 , Eva sappia stimare il tempo 𝑡𝑖′ per
effettuare la moltiplicazione 𝑠𝑘 𝑦𝑖 , non sapendo se venga effettivamente eseguita o
meno, se lo saprebbe, conoscerebbe la chiave segreta.
Di conseguenza può anche stimare il tempo necessario per tutte le altre operazioni,
𝒕′′ ′
𝒊 = 𝒕𝒊 − 𝒕𝒊 e calcola:
𝑡1′′ +⋯+𝑡𝑛
′′
1- Il tempo medio impiegato per eseguire tutte le altre operazioni, 𝜇 ′′ = 𝑛
2 ′′ −𝜇′′ )2
(𝑡1′′ −𝜇 ′′ ) +⋯+(𝑡𝑛
2- Lo scarto quadratico medio o varianza annesso, 𝑉𝐴𝑅{𝑡𝑖′′ } = 𝑛
A questo punto ci sono due casi:
1- Se la moltiplicazione viene eseguita → 𝒕′𝒊 , tempo necessario per fare quella
moltiplicazione e 𝒕′′
𝒊 , tempo necessario per fare tutto il resto, sono
statisticamente indipendenti, perché due operazioni diverse, allora vale la
seguente relazione:
6
𝑡𝑖 = 𝑡𝑖′ + 𝑡𝑖′′ → 𝑉𝐴𝑅{𝑡𝑖 } ≈ 𝑉𝐴𝑅{𝑡𝑖′ } + 𝑉𝐴𝑅{𝑡𝑖′′ } > 𝑉𝐴𝑅{𝑡𝑖′′ }
→ 𝑽𝑨𝑹{𝒕𝒊 } > 𝑽𝑨𝑹{𝒕′′
𝒊}
In sintesi:
A- 𝑽𝑨𝑹{𝒕𝒊 } > 𝑽𝑨𝑹{𝒕′′
𝒊 } → 𝒃𝒌 = 𝟏.
In conclusione, Eve ricorsivamente, bit per bit, calcola 𝑉𝐴𝑅{𝑡𝑖 } e 𝑉𝐴𝑅{𝑡𝑖′′ }, procede
al confronto e ricostruisce la chiave senza conoscerla soltanto perché c’è un if che
varia il comportamento dell’algoritmo di decifratura in funzione dei bit della chiave
segreta. Affinché l’attacco vada a buon fine, la decifratura non deve avere durata
fissa → un possibile rimedio ad attacchi di questo tipo, è quello di rendere le
operazioni a tempo-potenza d’esecuzione costante, per esempio, facendo conti
inutili, poi scartati.
7
- Se voglio avere un numero primo 𝑝 con circa 100 cifre, dimensione classica di
RSA, parto con lo scegliere un primo un po' più piccolino che sarà il fattore
grande, per esempio 𝑝0 ≈ 1040 .
- Si cercano gli interi della forma: 𝑘𝑝0 + 1, con 𝑘 che varia tra alcuni interi attorno a
1060 , perché così facendo 𝑘𝑝0 ≈ 10100 .
8
❖ TEST DI PRIMALITA’
Con l’avvento di RSA sono stati introdotti molti test volti a stabilire se un numero è primo
o meno. Se questo è pari sicuramente non lo è, se dispari continua a leggere.
Esempio
Preso un intero 𝑛 di 200 cifre, è primo?
1- Metodo a forza bruta classico.
Divido 𝑛 per tutti i numeri primi che gli sono minori.
Impossibile da mettere in pratica.
9
❖ SCELTA DEGLI ESPONENTI DI CIFRATURA, 𝐞 E DECIFRATURA, 𝐝
- Esponenti bassi = ↑ 𝑣𝑒𝑙𝑜𝑐𝑖𝑡à ↓ 𝑠𝑖𝑐𝑢𝑟𝑒𝑧𝑧𝑎.
- Una scelta furba è definire 𝑒 = 216 + 1 = 65537, in questo modo molti numeri che ne
derivano sono primi e quindi la condizione 𝑀𝐶𝐷(𝑒, (𝑝 − 1)(𝑞 − 1)) = 1, cioè 𝑒
coprimo con 𝜑(𝑛), è molto probabilmente verificata. Anche perché il numero ottenuto
è più grande di 1 di una potenza di 2, per cui l’elevamento a potenza di questo numero
può essere eseguita rapidamente:
𝑚65537 = {[[(𝑚2 )2 ]2 ]… }2 ∙ 𝑚 , dove l’elevamento a quadrato è svolto 16 volte.
La dimensione ridotta di 𝑚 rende efficiente l’attacco cypher text only da parte di Eva:
1- Genera due liste:
- 𝑐𝑥 −𝑒 (𝑚𝑜𝑑 𝑛) per ogni 1 ≤ 𝑥 ≤ 109 ;
- 𝑦 𝑒 (𝑚𝑜𝑑 𝑛) per ogni 1 ≤ 𝑦 ≤ 109 .
𝑥 ed 𝑦 due contatori che arrivano fino a 109 per il paradosso del compleanno, √𝑚 ≅
109 .
2- Si cerca una corrispondenza tra un elemento della prima lista ed uno della seconda.
3- Se ne trova una, ho un valore di 𝑥 ed uno 𝑦, tale per cui:
𝑐𝑥 −𝑒 ≡ 𝑦 𝑒 (𝑚𝑜𝑑 𝑛)
𝑐 ≡ (𝑥𝑦)𝑒 (𝑚𝑜𝑑 𝑛)
→ 𝑚 = 𝑥𝑦
L’attacco ha successo solo se 𝑚, prodotto dei due interi 𝑥 ed 𝑦, è < 109 . Se uno dei due
fosse primo, l’attacco andrebbe a vuoto perché avrei un numero grande circa 1017 e
l’altro 1.
Risulta un attacco molto più efficiente della prova di tutte le 1017 possibilità, a forza
bruta, di 𝑚, perché lavoro con 2𝑥109 valori ogni volta.
Prevenzione → Aggiungendo a caso qualche cifra all’inizio o alla fine di 𝑚 in modo da
formare un testo in chiaro molto più lungo. Quando Bob decifra, rimuove queste cifre
casuali e riottiene 𝑚.
Un modo per estendere il messaggio è tramite l’operazione di padding, una versione
intelligente è l’Optimal Asymmetric Encryption Padding, OAEP.
10
❖ OPTIMAL ASYMMETRIC ENCRYPTION PADDING, OAEP
Introdotto da Bellare e Rogaway, è uno schema random padding che:
1- Aggiunge una componente di casualità che può essere usata per convertire uno schema
di crittazione deterministico, come RSA, in uno probabilistico. Ogni volta che cifro lo
stesso messaggio ottengo un testo cifrato diverso.
2- Controllo integrità del segnale ricevuto, se non ci sono gli zeri finali il testo cifrato non
corrisponde ad una cifratura valida.
Cifratura
1- Al messaggio 𝑚 va applicato un padding di 𝑘1 zeri per arrivare ad una lunghezza di 𝑛 −
𝑘0 bit.
2- 𝑟 è una stringa casualmente generata lunga 𝑘0 bit.
3- 𝐺 espande i 𝑘0 bit di 𝑟 a 𝑛 − 𝑘0 bit.
4- 𝑋 = 𝑚00. .0 ⊕ 𝐺(𝑟).
5- 𝐻 riduce gli 𝑛 − 𝑘0 bit di 𝑋 a 𝑘0 bit.
6- 𝑌 = 𝑟 ⊕ 𝐻(𝑋).
7- L’output è 𝑋||𝑌, ovvero la concatenazione di 𝑋 ed 𝑌.
Decifrare
1- Recuperare 𝑟 calcolando 𝑌 ⊕ 𝐻(𝑋).
2- Recuperare il messaggio 𝑚 tramite 𝑚00. .0 = 𝑋 ⊕ 𝐺(𝑟).
11
❖ PROBLEMA DI DECISIONE
Eva afferma di essere in possesso del testo in chiaro 𝑚, corrispondente al testo cifrato, 𝑐.
Una qualsiasi persona può agevolmente verificare quanto afferma perché basta calcolarsi
𝑚𝑒 (𝑚𝑜𝑑 𝑛) ≡ 𝑐, dato che 𝑛 ed 𝑒 sono pubblici. Ciò è possibile perché la cifratura è
deterministica.
3- PRIMA DI LORO
James Henry Ellis nel 1970 concepì l’idea di una “cifratura non segreta”, ovvero della
crittografia a chiave pubblica.
Clifford Cocks nel 1973 ideò lo schema che oggi conosciamo come RSA.
Malcolm John Williamson nel 1974 ideò lo schema che oggi conosciamo come lo scambio di
chiavi di Diffi-Hellman.
Il problema è che questi lavoravano per il Government Communications HeadQuarters, GCHQ,
cioè l’agenzia governativa, con sede nel Regno Unito, che si occupa della sicurezza, nonché
dello spionaggio e controspionaggio, nell’ambito delle comunicazioni, che all’epoca
classificava queste scoperte segrete.
Soltanto nel 1997 il governo britannico le ha declassificate, rendendo pubblico il contributo di
Ellis, Cocks e Williamson.
12
❖ FASE 1: GENERAZIONE COPPIE CHIAVI, PRIVATE → PUBBLICHE
Bob sceglie un primo 𝑝 grande abbastanza affinché il logaritmo discreto sia difficile da
calcolare ed una radice primitiva 𝛼 (𝑚𝑜𝑑 𝑝), stessa cosa di Diffie-Hellman.
Bob sceglie un intero 𝑎 e calcola 𝜷 ≡ 𝜶𝒂 (𝒎𝒐𝒅 𝒑).
Le chiavi di Bob: pubbliche {𝒑, 𝜶, 𝜷}, privata {𝒂}.
❖ FASE 2: CIFRATURA
Alice vuole inviare un messaggio 𝑚 a Bob.
Si assume 0 ≤ 𝑚 < 𝑝, altrimenti si spezza il messaggio in blocchi < 𝑝 e si cifra un blocco
alla volta.
Alice ottiene la chiave pubblica di Bob {𝑝, 𝛼, 𝛽}.
Alice sceglie a caso un intero 𝒌 segreto e calcola la coppia (𝑟, 𝑡) da inviare a Bob:
- 𝒓 ≡ 𝜶𝒌 (𝒎𝒐𝒅 𝒑)
- 𝒕 ≡ 𝜷𝒌 𝒎 (𝒎𝒐𝒅 𝒑), vi è un prodotto quini c’è un po' di RSA, se avesse continuato con
gli esponenti non ne sarebbe venuto fuori, a meno che non fai Shamir-Massey-Omura,
che però non è un algoritmo one shot.
❖ FASE 3: DECIFRATURA
Bob decifra calcolando:
−𝒂
𝒕𝒓−𝒂 ≡ 𝜷𝒌 𝒎(𝜶𝒌 ) ≡ (𝜶𝒂 )𝒌 𝒎𝜶−𝒂𝒌 ≡ 𝜶𝒂𝒌 𝒎𝜶−𝒂𝒌 ≡ 𝒎 (𝒎𝒐𝒅 𝒑)
❖ PROBLEMA DI DECISIONE
Eva afferma di essere in possesso del testo in chiaro 𝑚, corrispondente al testo cifrato,
(𝑟, 𝑡).
Questa verifica da parte di una qualsiasi persona ha difficile soluzione in quanto non si
conosce il valore di 𝑘 usato per la cifratura.
Per cui il problema decisionale di RSA è di facile soluzione, essendo un sistema
deterministico in origine, quello di ElGamal no, essendo statistico per via di 𝑘.
13