L`algoritmo RSA: un approccio algebrico ed astratto

L'algoritmo RSA: un approccio algebrico ed
astratto
Dott. Ing. Tiziano Binda
Summary 0.0.1. Il seguente lavoro mira ad esaminare l'algoritmo a chiave pub-
blica/privata RSA. Per dimostrare la valenza teorica di tale algoritmo si presenteranno il teorema di Eulero/Fermat e il piccolo teorema di Fermat secondo l'approccio
di Hernstein. Si illustreranno le basi della teoria dei gruppi, in particolare i gruppi
niti, le classi di resto, laterali destri e teorema di Lagrange per i gruppi niti. Si
faranno poi osservazioni di carattere algoritmico e computazionale per giusticare
l'ecacia pratica di questo algoritmo, e metterne in evidenza i limiti.
Indice
Capitolo 1.
La crittograa: una introduzione storica
5
1.1.
L'esigenza della comunicazione di informazioni riservate
1.2.
Il cifrario Cesare
6
1.3.
Cenni di crittograa simmetrica
7
1.3.1.
1.4.
1.4.1.
1.5.
Codici monoalfabetici: crittograa da settimana enigministica
La seconda guerra mondiale e la macchina Enigma
Codici polialfabetici: crittograa da prete
L'informatica e la crittograa
Macchine dell'informazione
1.5.2.
La chiave, forza di un protocollo simmetrico e il problema
1.5.3.
La chiave, debolezza di un protocollo simmetrico
1.7.
1.7.1.
9
La crittograa Asimmetrica
10
10
L'RSA, la chimera della crittograa
Chiave ( o chiavi?) e canali sicuri
Il problema computazionale
Capitolo 2.
8
9
9
computazionale
1.6.1.
7
9
1.5.1.
1.6.
5
11
11
12
I gruppi dell'algebra astratta. Le basi
13
2.1.
Denizione di gruppo
13
2.2.
Esempi
14
2.3.
Lemmi
15
2.3.1.
Ordine di gruppi
16
2.3.2.
Gruppi ciclici
16
2.4.
Sottogruppi
17
2.4.1.
relazione di congruenza per sottogruppi
17
2.4.2.
Laterali (destri)
18
2.4.3.
2.5.
2.5.1.
Il teorema di Lagrange per i gruppi niti
Teorema di Eulero
19
20
Sintesi della dimostrazione
22
2.6.
Piccolo teorema di Fermat
22
2.7.
Considerazioni numeriche
22
2.7.1.
Piccolo Teorema di Fermat
22
2.7.2.
Teorema Cinese del Resto
23
Capitolo 3.
L'RSA - perché funziona
25
3.1.
Due Primi Grandi
25
3.2.
Chiave Pubblica. Chiave Privata.
25
3.3.
L'algoritmo
26
3.4.
Codica e Decodica: un esempio
27
3.5.
Applicazioni
29
3.5.1.
Comunicazione segreta
29
3.5.2.
Non ripudio
29
3.5.3.
Firma digitale
3.6.
29
Limiti Computazionali
29
3
4
INDICE
Appendice
31
Esempio
31
Secondo esempio
31
Sorgenti Ansi-C
34
CAPITOLO 1
La crittograa: una introduzione storica
Una delle prime notizie documentate dell'uso della crittograa, come la intendiamo oggi, è storicamente attribuita a Giulio Cesare. Egli, come evidenziato dalla
Vita dei Cesari di Svetonio, usava giá una sorta di cifratura per inviare i suoi
dispacci ai suoi luogotenenti. Questo accadeva quasi 21 secoli fa.
Per migliaia di anni, re, regine e generali hanno avuto bisogno
di comunicazioni ecienti per governare i loro Paesi e comandare
i loro eserciti.
Nel contempo, essi compresero quali conseguenze
avrebbe avuto la caduta dei loro messaggi in mani ostili:
infor-
mazioni preziose sarebbero state a disposizione delle nazioni rivali
e degli eserciti nemici. Fu il pericolo dell'intercettazione da parte
degli avvessari a promuovere lo sviluppo di codici e cifre, tecniche
di alterazione del messaggio destinate a renderlo comprensibile solo alle persone autorizzate.
Simon Singh, Codici & Segreti -
Introduzione
1.1. L'esigenza della comunicazione di informazioni riservate
Nell'era dell'informazione non c'è molto da dire sull'esigenza di comunicare in
modo sicuro, e segreto, fra due parti. Oggi siamo costantemente collegati con gli
altri e spesso abbiamo bisogno di fare comunicazioni in modo riservato, garantendo
l'autenticitá del contenuto, del mittente e anche del destinatario.
L'esempio più
emblematico è quello dell'home banking, ovvero della gestione diretta attraverso
internet del proprio conto corrente.
Un cliente ha la necessitá di autenticarsi, ovvero di fornire credenziali che dimostrino il più inequivocabilmente possibile che egli è chi asserisce di essere. Per
esempio la mia banca raggiunge questo scopo attraverso una terna di informazioni:
Nome Utente, Password, Data Chiave. È chiaro che chiunque avesse a disposizione
queste tre informazioni sarebbe a tutti gli eetti identicato come titolare di quel
conto corrente, e come tale gli sarebbe garantito libero accesso a tutte le funzioni
dispositive, per esempio fare un bonico di tutto il denaro su un altro conto corrente,
magari estero.
Più in piccolo possiamo pensare a una tessera bancomat. Per poter accedere
ai servizi bancomat una persona deve fornire, oltre alla tessera, anche un numero
che identichi il titolare.
È forse meno ovvio che il problema dell'autenticazione può scaturirsi anche al
contrario, ovvero anche il destinatario spesso ha bisogno di identicarsi in maniera
inequivocabile.
1
Immaginiamo di accedere a uno sportello bancomat trualdino :
dentro il bancomat c'è un tizio che prende la vostra tessera, legge il vostro PIN
(Personal Identier Number) e li immette in un secondo, e vero, bancomat.
Voi
avete chiesto 100 Euro e lui ne preleva 200, tenendosi 100 Euro come commissione.
Benchè buo questo tipo di attacco è teoricamente e praticamente possibile e in
1C'è
un lm (Killer per caso ) in cui Ezio Greggio compie esattamente questa manovra.
5
6
1. LA CRITTOGRAFIA: UNA INTRODUZIONE STORICA
nomenclatura va sotto il nome di Man in the middle (e trova nell'hijacking la sua
miglior realizzazione), ovvero furto di credenziali.
Figura 1.1.1
Party Man in the Middle
Per tornare all'esempio dell'homebanking se un sito potesse spacciarsi per il sito
della nostra banca potrebbe, una volta convinti noi stessi di essere il sito originale,
rubarci le credenziali di accesso e divertirsi a piacimento con i nostri dati.
Questo tipo di attacco è possibile anche se tecnicamente complicato da mettere
in piedi.
Questo spiega perché quando ci colleghiamo per la prima volta al sito
della banca, ci appaia una nestra che ci chiede se accettare oppure no un certo
certicato di autenticitá del sito stesso.
Allo stesso modo, le informazioni che inviamo al sito devono essere protette.
Esse devono essere disponibili a noi, alla banca e a nessun altro. Se qualcuno riuscisse a monitorare la connessione e da questa attivitá estrapolare le informazioni
di autenticazione saremmo punto e a capo. Inoltre potrebbe anche curiosare informazioni sensibili, come per esempio i saldi dei nostri conti correnti e le operazioni
che eseguiamo. Quindi l'intero traco di informazioni deve essere in qualche modo
protetto fra mittente e destinatario da occhi indiscreti.
1.2. Il cifrario Cesare
Agli albori, le informazioni sensibili erano associate più all'attivitá militare
e politica che a quella nanziaria.
Il primo uso ampamente documentato di un
sistema crittograco risale a Gaio Giulio Cesare. Egli, a partire dalle campagne in
Gallia, prese l'abitudine di comunicare i suoi dispacci scrivendoli su pergamena e
adandoli poi a galoppini, una sorta di servizio postale. Dato però che si trovava
in territorio nemico, e che anche i galli conoscevano il latino, si presentava l'ovvia
necessitá di impedire che queste informazioni potessero cadere in mano nemica. Se
i galli, catturando o corrompendo un galoppino, avessero potuto sapere in anticipo
tattiche, entitá, posizioni delle truppe e ordini dello stesso Cesare ne avrebbero
tratto un ovvio vantaggio tattico e strategico.
Per ovviare a questo problema, e anche per certicare che l'autore del dispaccio
fosse egli stesso, Cesare prese a scrivere i suoi dispacci in modo diverso:
prima
li scriveva in latino, poi li trascriveva sulla pergamena da adare al galoppino
applicando un trucco. Anzichè scrivere per esempio A, egli scriveva D. Al posto
di B scriveva E e così via. Chiaramete al posto di Z metteva C e al posto
di Y metteva B. Ogni lettera veniva, quindi, scambiata con quella che stava
tre posizioni più avanti.
Inoltre per ovviare al problema delle ultime tre lettere
dell'alfabeto egli stabilì che dopo Z si dovesse ricominciare con A e così via,
chiudendo quindi il protocollo
2Un
2
di cifratura.
protocollo non è altro che un insieme di regole da seguire per rispettare una certa
procedura. In questo caso le regole per cifrare e decifrare il messaggio.
1.3. CENNI DI CRITTOGRAFIA SIMMETRICA
7
Figura 1.2.1. Gaio Giulio Cesare
Allo stesso modo, invertendo l'associazione (ovvero spostando indietro di tre
posizioni nell'alfabeto con l'ovvia precauzione di far precedere Z ad A) si poteva
tornare al messaggio originale, ovvero decifrare il messaggio.
Questo tipo di protocollo a noi può far sorridere, e forse far venire il dubbio che
i galli non fossero questi maestri di sagacia. Va però detto che questo fu il primo
caso di cifratura della storia, e che, almeno secondo alcuni storiogra, da quella
volpe che Cesare era, faceva accompagnare i dispacci cifrati da altri in chiaro non
del tutto adabili. Così i galli si tenevano le informazioni in chiaro senza sospettare
che invece le altre in versione criptica avessero una qualche valenza.
1.3. Cenni di crittograa simmetrica
Il cifrario Cesare, come viene chiamato, è un esempio di crittograa simmetrica.
Come è facile notare il sistema di cifratura/decifratura si inverte con facilitá. Se
indichiamo con CC(3) l'algoritmo che sostituisce a ogni lettera quella che sta tre
posizioni più avanti secondo il protocollo discusso sopra, è ovvio che CC(-3) eseguirá
la decifratura.
Se preferiamo possiamo creare un algoritmo DCC(3)=CC(-3) che
esegue la decifratura. La simmetria di questi codici sta nel fatto che l'algoritmo di
cifratura è in sostanza lo stesso che si usa in decifratura: basta una banale inversione
del parametro di cifratura.
1.3.1. Codici monoalfabetici: crittograa da settimana enigministica. Ogni tipo di codice che sostituisce a numero uguale carattere ugualè' viene
chiamato monoalfabetico.
Questo a signicare che c'è sempre e solo un'associ-
3
azione fra un determinato carattere nel testo in chiaro
e un determinato carattere
del testo cifrato. Quindi, nell'esempio del cifrario Cesare, ogni A in chiaro viene
riscritta come D nel cifrato. È evidente che quindi vale anche il viceversa, ovvero
ogni D nel cifrato dovrá essere ritrasformata in A nel testo decifrato.
Per sua stessa costruzione, il cifrario Cesare può essere esteso no a fornire,
usando l'alfabeto inglese, 26 diversi modi di crittare uno stesso messaggio. È lapalissiano che CC(0)=CC(26) e che applicare CC(0) a un testo produrrá nient'altro
che il testo in chiaro stesso. Ci sono quindi 26 diversi codici Cesare costruibili con
questo protocollo, dei quali uno banale.
3Si
dice testo in chiaro il testo con il messaggio non codicato
8
1. LA CRITTOGRAFIA: UNA INTRODUZIONE STORICA
L'algoritmo di cifratura/decifratura rimane identico per tutti e 25 i cifrari cesare. Quello che cambia è l'entitá dello spostamento in avanti. In tutti i sistemi di
cifratura esistono questi due elementi: l'algoritmo e la chiave, ovvero il parametro,
che fa lavorare in qualche modo l'algoritmo.
Anche se si conosce l'algoritmo, la
mancanza della chiave rende comunque dicoltoso risalire al messaggio in chiaro.
Questo si ottiene, ovviamente, avendo un'ampia scelta di chiavi ovvero avendo un
insieme di chiavi grande. Così da garantire che anche provandole tutte, il tempo
necessario per trovare quella giusta sia mediamente improponobile.
Per esempio per violare
un cifrario cesare non ci vuole molta fatica. Una volta
che si sa che un messaggio è stato cifrato usando un cifrario Cesare basta provarli
tutti e 25 per trovare quello giusto ed avere quindi la chiave di decifrazione.
Di
particolare nota il fatto che non è aatto necessario trasformare tutto il testo in
questa fase, ma solo poche parole e vericare se esse hanno senso. Appena trovata
una possibile corrispondenza si decifra tutto il testo e cest voilá tout il gioco è
fatto.
Va da sè che spesso fa comodo aggiungere caratteri al nostro alfabeto: segni
di punteggiatura, accenti e gli stessi spazi bianchi sono elementi importanti che
devono essere considerati. Quindi si può costruire un alfabeto esteso che contenga
tutti i simboli che noi vogliamo nascondere e associare a ogni simbolo un altro nel
medesimo alfabeto. Così facendo, e dando il sistema di trascrizione fra un alfabeto
e l'altro, si può eseguire la cifratura e la decifratura del messaggio. Siccome si usa
un singolo alfabeto, o meglio una singola corrispondenza biunivoca fra l'alfabeto in
chiaro e quello cifrato, questi codici vengono anche detti monoalfabetici.
Per dare qualche numero, se si dispone di un alfabeto di 10 caratteri, quanti
codici monoalfabetici, anche banali, si possono costruire?
Al primo carattere si può associare uno qualsiasi degli altri 10. Al secondo uno
degli altri 9 rimasti (uno è andato persò' dato che è giá stato associato al primo
carattere). Al terzo uno degli altri 8 rimasti e così via. Dato la ovvia indipendenza
della scelta del secondo carattere rispetto alla scelta del primo, stante che non si
possono scegliere lo stesso carattere, per il resto non ci sono vincoli:
totale di alfabeti diversi è
1 ∗ 2 ∗ 3 ∗ ... ∗ 9 ∗ 10 = 10! = 3628800.
il numero
Ora se passassimo
a un alfabeto a 26 caratteri, come ad esempio l'inglese, avremmo
26! > 4 ∗ 1026
che
è un numero decisamente enorme.
Questi numeri potrebbero far credere che rompere un codice di questo tipo
sia quindi un'impresa titanica. Eppure, come nel racconto Gli omini danzantì' di
Sherlock Holmes, è possibile, e spesso senza nemmeno avere a disposizione grandi
potenze di calcolo.
Conoscendo informazioni del messaggio, come per esempio la lingua in cui è
scritto, il tema di cui tratta, lo stile dell'autore, è possibile fare delle osservazioni
di carattere statistico. Per esempio in una certa lingua come l'inglese, il carattere
più spesso ripetuto è la vocale è'. Quindi se disponiamo di un testo cifrato di una
certa lunghezza, possiamo ipotizzare che il carattere che occorre più spesso sia quello
associato al carattere è'. Andando avanti in questo modo, studiando le parole che
si ottengono e scartando le ovvie associazioni che portano a non sensè', si possono
indovinare, sempre più in fretta, le altre associazioni fra lettere dell'alfabeto in
chiaro e lettere dell'alfabeto cifrato. E proprio così che questa generazione di codici
divenne rapidamente obsoleta e debole, nel senso che si poteva facilmente risalire al
testo in chiaro anche senza la chiave.
1.4. La seconda guerra mondiale e la macchina Enigma
L'idea successiva fu quella di non basarsi su un unico alfabeto. In eeti se ne
possono usare per esempio due: uno per i caratteri in posizione dispari e uno per
1.5. L'INFORMATICA E LA CRITTOGRAFIA
9
quelli nelle posizioni pari. Oppure ne potrei usare 10: uno per il primo carattere, un
secondo per il secondo e così via no al decimo per poi ripartire dal primo alfabeto.
In questo modo anche il numero degli alfabeti diventa un'incognita e non di
poco conto.
1.4.1. Codici polialfabetici: crittograa da prete . Storicamente, uno
dei primi a proporre un sistema di questo tipo per cifrare testi fu un abate tedesco:
Trithemius, nato nel 1472.
Per la loro natura non monoalfabetica, questi cod-
ici si dicono polialfabetici, e per lungo tempo i crittogra si sentirono frustrati
nell'impossibilitá di violarli.
Su questo principio venne costruita la macchina enigma, strumento di crittograa usato dai tedeschi durante la seconda guerra mondiale. Convinti di avere
uno strumento inviolabile, i tedeschi usarano pesantemente la cifratura e ci si darono ciecamente.
Eppure uno dei padri dell'informatica, Alan Turing, aveva
scoperto delle falle in questo sistema, e mise il suo genio a disposizione del proprio
paese, la Gran Bretagna, per violare engima.
Usando l'analisi statistica, alcune
debolezze dovute ai fattori umani e ad alcune imperfezioni tecniche, egli risucì, in
genere, ad aver la meglio su Enigma. E per quando le sue brillanti intuizioni non
bastavano, aveva costruito delle bombè' (veri e propri calcolatori) che provavano
brutalmente tutte le possibilitá.
1.5. L'informatica e la crittograa
Come si vede il problema di violare la crittograa era ormai diventato un problema di matematica, ingegneria elettrica e sociale, ovvero quello di sfruttare gli
errori e la pigrizia umana, e un problema di informatica, nel senso di provare il più
rapidamente possibile una quantitá di chiavi nel tentativo di isolare quella giusta.
1.5.1. Macchine dell'informazione. I calcolatori, proprio per la loro natura, sono gli stumenti ideali per implementare sistemi crittograci e strumenti di
rottura di sistemi crittograci.
L'aumento esponenziale dei messaggi scambiati
durante l'ultima guerra mondiale ha creato un problema di sovrabbonadanza di
informazione che andava immagazzinata e processata. Si è stimato che l'esercito
nazista abbia trasmesso ben oltre un milione di dispacci nell'ultima guerra.
Le
capacitá di immagazzinare, processare e fare ricerche è diventata critica, oltre a
quella di poter eseguire operazioni aritmetico logico massivamente su enormi moli
di dati.
1.5.2. La chiave, forza di un protocollo simmetrico e il problema
computazionale. Ora che si è chiarito che la forza di un protocollo sta nella
chiave vediamo di chiarire meglio questo punto.
Se le chiavi disponibili fossero poche, basterebbe provarle tutte e analizzare i
singoli testi decifrati proposti per trovare poi quello giusto. Quindi va da sè che
dobbiamo avere un vasto insieme di chiavi nel quale prendere la nostra, cosicchè
la probabilitá che scegliendone a caso una si prenda quella giusta sia piccola. Per
esempio un insieme di un miliardo di chiavi può sembrare adeguato, ma se si pensa
con quale velocitá oggi un computer di media potenza può provare queste combinazioni, ci si rende conto che non sono molte. Per amor di chiacchiera si immagini
che un computer possa provare un milione di chiavi al secondo, cifra tutto sommato ragionevole, allora gli basterebbero 1000 secondi, meno di venti minuti, per
esaurire tutto lo spazio delle chiavi. Una sicurezza probabilmente insuciente per
la maggior parte delle possibili applicazioni.
Si tenga poi conto che grandi soci-
etá e organizzazioni governative possono disporre di ben altre risorse informatiche.
Si conclude che per avere delle garanzie da parte del nostro protocollo dobbiamo
avere uno spazio delle chiavi molto più grande. Si ricordi che in media è suciente
10
1. LA CRITTOGRAFIA: UNA INTRODUZIONE STORICA
provare la metá di tutte le chiavi per trovare quella giusta. Inoltre è verosimile che
un computer abbastanza veloce possa provare 1000 miliardi di chiavi in un giorno
(pari a 10 milioni al secondo circa), che in un anno sono quasi 500 mila miliardi di
chiavi.
Si conclude quindi che per avere una chiave che mediamente possa resistere
almeno un anno, bisognerebbe avere uno spazio di almeno un milione di miliardi di
chiavi, sempre che i computer non aumentino di prestazioni nel frattempo.
1.5.3. La chiave, debolezza di un protocollo simmetrico. In tutto questo
discorso c'è un unico grosso neo: la chiave. Essa deve essere disponibile sia al mittente che al destinatario. Deve quindi essere in qualche modo distribuita fra di essi
in modo sicuro. Va da sè che un modo di distribuire dati in modo sicuro è proprio
quello che ci manca, e quindi è proprio questo l'anello debole di questa catena.
Inoltre ogni chiave è soggetta a un fenomeno di usura (invecchiamento o aging in
inglese). Più viene adoperata piu lascia tracce di sè. Queste tracce furono utilizzate
proprio durante la seconda guerra mondiale a Bletchey Park per trovare sistemi decisamente più rapidi per identicare la chiave che i nazisti usavano quel giorno.
Per dirla il più semplicemente possibile, l'unico modo davvero sicuro di crittare un
messaggio è quello di usare una chiave grande quanto il messaggio stesso, e di non
riutilizzare la chiave mai più. Ogni volta che la si riutilizza si possono usare tecniche
e processi statistici per ridurre progressivamente lo spazio delle chiavi. Il risultato
è quello di riportare il problema entro valori e tempi accettabili, e fu quello che gli
inglesi realizzarono, sia attraverso le bombe di Turnig che Colossus.
Inoltre la distribuzione delle chiavi porta a un problema logistico e organizzativo enorme e estremamente dispendioso, dato che esse devono essere consegnate
massivamente e in modo sicuro. Rubare la chiave equivale a rompere il codice a
tutti gli eetti.
1.6. La crittograa Asimmetrica
In quest'ottica sono entrati in scena i sistemi asimettrici. Essi usano due chiavi, diverse, una per cifrare e una per decifrare.
Quello che deve essere chiaro è
che esiste sempre un unico algoritmo di cifratura che chiameremo C. La chiave
di cifratura la chiameremo CK (Cipher Key) e quella di decifratura DK(decipher
Key). Chiameremo T il testo in chiaro da cifrare, CT (Ciphred Text) il testo cifrato
e DT (Dechipred Text) il testo decifrato. Dopo questa mole di denizioni possiamo
quindi descrivere l'algoritmo asimmetrico:
Algorithm 1.6.1. CT=C(T,CK). CT è ottenuto dall'algoritmo C applicato al
testo T secondo la chiave CK.
Viene inviato in modo non sicuro CT al nostro destinatario. Egli calcola quindi
DT.
DT=C(CT,DK), applicando l'algoritmo C su CT con la chiave DK. Si deve
avere che DT=T e il protocollo si chiude.
Il truco sta nel fatto che il destinatario crea le due chiavi, CK e DK. Si tiene
DK per sè, nascosta, e invia, anche in chiaro, CK al mittente. Il mittente applica
l'algoritmo C su T con CK e invia CT al destinatario.
Inserire qui un'immagine delle fasi dell'algoritmo
Ora, per ritrasformare CT in DT=T si ha bisogno di DK, che non è stata trasmessa
e quindi sta al sicuro dal destinatario. Il fatto di usare due chiavi distinte, di cui
una nascosta, garantisce la sicurezza. O almeno sempre che sia dicile ricostruire
DK da C e CK. Se così non fosse il gioco non starebbe in piedi.
L'idea può essere schematizzata così:
Io ho una cassa alla quale applico un
mio lucchetto. Mi tengo la chiave e invio la cassa al destinatario. Egli appone un
1.7. CHIAVE ( O CHIAVI?) E CANALI SICURI
11
secondo lucchetto, sempre sullo stesso anello, si tiene la chiave e mi rinvia la cassa.
Io ricevo la cassa, levo il mio lucchetto con la mia chiave e la rinvio al destinatario
che la riceve chiusa con il suo solo lucchetto. Che quindi può levare senza problemi.
La cassa ha sempre viaggiato chiusa a chiave, e quindi in modo sicuro.
4
1.6.1. L'RSA, la chimera della crittograa. Die e Hellman teorizzarono
per primi questo protocollo nel 1975. Bello in teoria, ma in pratica irrealizzabile
per via della procedura a due lucchettì' che si sposa male con le operazioni che
in genere possiamo fare. Infatti quando noi facciamo una sequenza di azioni, per
tornare indietro dobbiamo fare le azioni opposte ma in ordine invertito. Immaginate
di girarvi a destra e fare 5 passi.
poi di girarvi a sinistra e farne altri 5.
Per
tornare al punto di partenza dovrei fare 5 passi indietro, girarmi a destra, fare
altri 5 passi indietro poi girarmi a sinistra. Se invertissi l'ordine delle due rotazioni
mi troverei in un posto diverso.
La ricerca di una funzione con queste proprietá
proseguì per due anni senza nessun successo no al 1977 quando Rives, Shamir e
Adlemann scoprirono come usare i moduli e le operazioni su di essi per implementare
il protocollo simmetrico.
Questo protocollo sará analizzato nel dettaglio nel capitolo 3, dopo aver appreso i rudimenti della teoria dei gruppi, irrinunciabile base teorica a giusticazione
dell'ecacia del protocollo.
1.7. Chiave ( o chiavi?) e canali sicuri
Per poter cifrare e decifrare si ha quindi bisogno di una informazione comune,
la chiave. Essa deve essere la stessa da entrambe le parti, e si pone quindi l'ovvio
problema della distribuzione sicura di questa chiave. Se essa cadesse in mani nemiche tutto il sistema sarebbe compromesso. Allo stesso modo se avessi un canale
sicuro per trasferire la chiave, perché non usare lo stesso sistema per trasferire tutto
il messaggio? È il classico cane che si morde la coda.
In quest'ottica sono entrati in scena i sistemi asimettrici. Essi usano due chiavi,
diverse, una per cifrare e una per decifrare.
Quello che poi deve essere chiaro è
che esiste sempre un unico algoritmo di cifratura che chiameremo C. La chiave
di cifratura la chiameremo CK (Cipher Key) e quella di decifratura DK(decipher
Key). Chiameremo T il testo in chiaro da cifrare, CT (Ciphred Text) il testo cifrato
e DT (Dechipred Text) il testo decifrato. Dopo questa mole di denizioni possiamo
quindi descrivere l'algoritmo asimmetrico:
Algorithm 1.7.1. CT=C(T,CK). DT è ottenuto dall'algoritmo C applicato al
testo T secondo la chiave CK.
Viene inviato in modo non sicuro DT al nostro destinatario. Egli calcola quindi
DT
DT=C(CT,DK), applicando l'algoritmo C su CT con la chiave DK. Si deve
avere che DT=T e il protocollo si chiude.
Il truco sta nel fatto che il destinatario crea le due chiavi, CK e DK. Si tiene
DK per sè, nascosta, e invia, anche in chiaro, CK al mittente. Il mittente applica
l'algoritmo C su T con CK e invia CT al destinatario.
Ora, per ritrasformare CT in DT=T si ha bisogno di DK, che non è stata
trasmessa e quindi sta al sicuro dal destinatario. Il fatto di usare due chiavi distinte,
di cui una nascosta, garantisce la sicurezza.
O almeno sempre che sia dicile
ricostruire DK da C e CK. Se così non fosse il gioco non starebbe in piedi.
L'idea può essere schematizzata così:
Io ho una cassa alla quale applico un
mio lucchetto. Mi tengo la chiave e invio la cassa al destinatario. Egli appone un
4
Questo bellissimo esempio è preso as is direttamente da Codici & segretì'
12
1. LA CRITTOGRAFIA: UNA INTRODUZIONE STORICA
secondo lucchetto, sempre sullo stesso anello, si tiene la chiave e mi rinvia la cassa.
Io ricevo la cassa, levo il mio lucchetto con la mia chiave e la rinvio al destinatario
che la riceve chiusa con il suo solo lucchetto. Che quindi può levare senza problemi.
La cassa ha sempre viaggiato chiusa a chiave, e quindi in modo sicuro.
1.7.1. Il problema computazionale. Al giorno d'oggi è solo un problema di
forza bruta, ovvero provare tutte le possibili combinazioni della chiave no a trovare
quella giusta. I computer moderni hanno capacitá di calcolo inimmagginabili solo
pochi decenni di anni fa. I codici che usiamo non sono intrinsecamente sicuri, ma
solo probabilmente
5
sicuri.
Ovvero oggi ci vorrebbero anni o decine di anni per
provare tutte le possibili chiavi.
Questo perché non esistono algoritmi ecienti,
ovvero rapidi, per risolvere certi problemi, come per esempio trovare i fattori di un
numero intero grande, dell'ordine delle centinaia di cifre decimali. La sicurezza sta
solo in questo fatto. Quindi, al crescere della potenza di calcolo dei computer, o
se si trovasse un procedimento che permettesse di arrivare molto rapidamente alla
soluzione, il nostro codice diverrebbe violabile.
L'RSA si basa sul fatto che per trovare i fattori di un numero grande ci vuole
un tempo proporzionale alla radice del numero stesso, ovvero per trovare i fattori
di un numero che vale circa un milione ci vogliono, salvo casi triviali, un migliaio di
operazioni. Se il numero ha 10 cifre, ci vogliono un numero con 5 cifre di operazioni
(circa 100.000). Per un numero che avesse, per dire, 18 cifre, ci vorrebbero circa un
miliardo di operazioni. Per un numero con 100 cifre ci vorrebbero circa 10 alla 50
operazioni, numero decisamente enorme.
5
Ovvero si ha una probabilitá grande che non si possa rompere il codice in un tempo breve.
Si noti che la probabilitá di non rompere il codice è funzione decrescente del tempo a disposizione.
CAPITOLO 2
I gruppi dell'algebra astratta. Le basi
2.1. Denizione di gruppo
Qui e nel prosieguo faremo riferimento a un insieme G, nito o no che sia. Esso
è composto da vari elementi. Fra questi elementi deniamo una certa operazione
binaria, ovvero un'applicazione che presi come argomenti due elementi dell'insieme
1
G, restituisca un elemento ancora di G. Chiameremo questa operazione + , anche
se non vorremo nè dovremmo confonderla con la somma ordinaria.
∀a, b ∈ G, ∃c ∈ G : c = a + b
Nel linguaggio delle applicazioni, o funzioni, dovremmo scrivere
c = +(a, b)
dove la funzione + ha per argomenti i valori rappresentati dalle variabili a e b e
restituisce il valore c. Va da sè' che il valore di c è unico, ovvero ogni volta che
facciamo
a+b
otteniamo sempre e solo un certo
c
La propietá summonenzionata viene detta di
2
.
chiusura. Ovvero, computando
attraverso + una qualsiasi coppia di elementi di G, si ottiene sempre un elemento
di G; non si può scapparè' da G attraverso +.
È forse meno ovvio che non è detto che
a + b = b + a.
Questo è vero per
l'usuale somma, ma se intendiamo una funzione con due argomenti, diventa più
spontaneo immaginare che lo scambio degli argomenti possa portare in generale
3
a un valore diverso . Per esempio
4
si pensi all'elevamento a potenza, dove a può
essere l'esponente e b la base o viceversa. Ovviamente lo scambio della base con
l'esponente in genere porta ad un risultato diverso.
Più semplicemente basta considerare la sottrazione dove
e solo se
a−b = b−a
è vera se
a = b.
Una seconda importante proprietá di questa operazione è l'associativitá:
∀a, b, c ∈ G : (a + b) + c = a + (b + c)
dove il signicato delle parentesi è quello naturale di regolare la precedenza nell'applicazione dell'operazione. Vediamo come diventerebbe in forma di funzione:
5
∀a, b, c ∈ G : +( +(a, b) , c) = +(a, +(b, c) )
ovvero anche eseguendo l'ordine delle operazioni diversamente, il risultato non
cambia.
Ogni insieme dotato di operazione che gode delle proprietá enunciate sopra,
chiusura ed associativitá, è detto semigruppo.
1
In realtá, almeno per gruppi astratti, potrebbe essere più sagace usare l'operazione - che
anche nell'aritmetica ordinaria non è commutativa. Solo si perderebbe la capacitá di denire il
monoide
(N, +)
.
2
Va da sè che se esistesse un d diverso da c tale che
dell'uguaglianza
3
d=c
Per esempio i generale
4L'esempio
d = +(a, b) = c
, per la ransitivitá
contro l'ipotesti che siano distinti.
f (a, b) 6= f (b, a)
è macchinoso, la sottrazione si presterebbe decisamente meglio!!!
5
Da notare che siccome +() produce come risultato un elemento di G allora è perfettamente
lecito che +() possa essere considerato come un argomento di un'altra operazione +().
13
14
2. I GRUPPI DELL'ALGEBRA ASTRATTA. LE BASI
Se inoltre in G, semigruppo, esiste un elemento, che chiameremo e, tale che
∀a ∈ G, a + e = e + a = a
chiameremo e elemento neutro di + in G, e diremo che
(G, +)
è un monoide.
Se poi
∀a ∈ G, ∃b ∈ G : a + b = b + a = e
diremo che b è elemento inverso di a e in generale lo indicheremo con
a−1 .
Se ogni
elemento di G è invertibile, ovvero ammette elemento inverso, diremo che (G,+) ha
la struttura di un gruppo.
Riassumendo:
(1) Un insieme G dotato di un'operazione, detta +, chiusa e associativa si
dirá che è un (una struttura di) semigruppo.
(2) Se (G,+) è semigruppo ed ha elemento neutro, diremo che (G,+) ha la
struttura di un monoide.
(3) Se (G,+) è un monoide e ogni elemento di G ammette inverso, diremo che
(G,+) ha la struttura di un gruppo.
(4) Se (G,+) è un gruppo e l'operazione + è commutativa, diremo che (G,+)
ha la struttura di un gruppo commutativo (o abeliano).
Il numero di elementi dell'insieme G, spesso indicato come supporto della struttura
algebrica in esame, porta poi ad un'altra distinzione: gruppi niti e gruppi non
niti.
2.2. Esempi
Example 2.2.1. L'usuale operazione di somma e l'insieme dei numeri naturali
N.
Consideriamo quindi la struttura
(N, +).
La somma di due numeri naturali è sempre un numero naturale.
Come ben
sappiamo n dalle elementari, l'ordine in cui si sommano gli addendi non cambia il
risultato nale, e quindi la somma ordinaria è associativa. Il numero 0 è il nostro
elemento neutro, dato che aggiunto a qualsiasi numero non cambia il numero stesso.
Per l'inverso abbiamo qualche problema: il numero da sommare a 4 per farlo
diventare 0 è -4, e non è un naturale.
Quindi
(N, +)
è un monoide, ma non un gruppo.
Se considerassimo l'insieme dei numeri interi (ovvero
Z)
allora avremmo sì un
gruppo. Gruppo fra l'altro commutativo e innito.
Example 2.2.2. Dell'orologio.
Immaginiamo di avere un orologio da polso
analogico, ovvero con le lancette. Sul quadrante compaiono i numeri dall'1 al 12.
Se ora sono le ore 4, fra 5 ore saranno le ore 9. Se passano altre 4 ore saranno le ore
1. La somma delle ore su un orologio è quindi un'operazione chiusa e associativa,
come nell'esempio precedente.
L'elemento neutro è il valore 12 (ovvero un giro
completo delle lancette). Vediamo se riusciamo a trovare gli elementi inversi.
L'inverso di un'ora è il numero di ore da sommargli per arrivare alle ore 12.
Quindi l'inverso di 1 è 11, di 2 è 10, di 3 è 9 e così via. La cosa più bua di questo
gruppo è che l'inverso di 12 è 12 (che in realtá non è per nulla strano, essendo 12
l'elemento neutro allora deve essere inverso di sè stesso come vedremo nel prossimo
paragrafo). L'operazione, come sopra, è pure commutativa.
Abbiamo quindi che l'insieme
G = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}
con la som-
ma sul quadrante dell'orologio è un gruppo abeliano. Ed è nito, come si vede.
Fin qui abbiamo visto solo gruppi, o monoidi, commutativi, cosa che potrebbe
portarci a credere che la commutativitá sia un qualcosa di scontato. Un bell'esempio
di gruppi non commutativi potrebbero essere il gruppo delle permutazioni, il gruppo
delle matrici quadrate con la moltiplicazione. Un altro bell'esempio più facile da
2.3. LEMMI
15
immaginare è quello degli itinerari: immaginatevi a New York con tutte le strade
che si incrociano ad angolo retto. Immaginate un itinerario del tipo svolta a destra
e poi a sinistrá'. Immaginiamo di invertire l'ordine delle svolte e come si vede dal
disegno il punto che si raggiunge non è esattamente lo stesso.
Figura 2.2.1. Itinerari a New York
2.3. Lemmi
Per lemma intendiamo una sorta di teorema, ovvero una veritá dimostrata con
un procedimento logico deduttivo a partire dai nostri assiomi. La lieve dierenza
con un teorema è che il lemma viene enunciato e poi dimostrato, all'opposto dei
teoremi. Spesso però si tratta solo di quisquiglie e dierenze marginali. In realtá
quello che indichiamo come teoremi sono spesso delle veritá logicamente dedotte
ma di interesse primario. I lemmi invece sono, spesso, usati a supporto delle dimostrazioni stesse e in qualche misura più banali, fors'anche ovvi, dei teoremi. Ciò
nonostante qui ne elencheremo e dimostreremo alcuni dei più fondamentali nella
teoria dei gruppi.
Lemma 2.3.1. L'elemento neutro di un gruppo è unico
Dimostrazione. Consideriamo
(G, +).
Per denizione, e è un elemento neu-
tro, ma non è stato assunto che sia anche l'unico. Immaginiamo quindi che ne esista
distinto da e. Essendo entrambi elementi
almeno un secondo che chiameremo f
neutri possiamo scrivere che
e+f = f
paragrafo 1, questo porta a concludere
e anche
e=f
e + f = e.
Per quanto detto nel
contro l'ipotesi iniziale. Avendo ot-
tenuto un assurdo signica che l'ipotesi è falsa e che quindi non esiste un secondo
elemento con le stesse proprietá di e che quindi è unico in
(G, +).
Riassumendo
∃e, f : e 6= f : ∀a ∈ G =⇒ e + a = a + e = f + a = a + f = a =⇒ e = e + f = f
Quanto appena detto è vero per un generico gruppo. Ovvero vale per tutti i
gruppi.
Lemma 2.3.2. Leggi di cancellazione.
a, x, y appartenenti
x + a = y + a =⇒ x = y .
diciamoli
a G, se
Dato un gruppo (G,+) e tre elementi,
a+x = a+y
allora
x = y,
e viceversa, se
Dimostrazione. Nel gruppo (G,+) esiste l'elemento neutro e.
Ovviamente
b + a = e. Quindi x =
e + x = (b + a) + x = b + (a + x) = b + (a + y) = (b + a) + y = e + y = y , che
conclude la dimostrazione.
esiste anche un elemento b inverso di a, ovvero tale che
Ovvero si può cancellare a dalle equazioni. Attenzione però. L'elemento uguale
si può cancellare solo se si presenta sullo stesso lato dell'operazione, oppure se
l'operazione è commutativa.
Si noti che in questa dimostrazione abbiamo usato l'ovvio assioma cose logicamente equivalenti (uguali) possono essere interscambiate senza alterare il valore di
un'espressione.
Lemma 2.3.3. Unicitá dell'inverso
∃!b ∈ G : b + a = a + b = e
16
2. I GRUPPI DELL'ALGEBRA ASTRATTA. LE BASI
Dimostrazione. Come prima neghiamo la tesi e vediamo dove ci conduce,
ovvero dato
a∈G
esistano
b, c ∈ G
b 6= c.
e = a+c
entrambi inversi di a e tali che
proprietá dell'elemento inverso, possiamo scrivere
e = a+b
ed
Per le
da cui
a + b = a + c. Ma per il lemma precedente siamo quindi obbligati a concludere che
b = c contro l'ipotesi iniziale, che quindi è falsa. Quod Erat Demostrandum, l'unica
alternativa è che non esistano due elementi distinti inversi di uno stesso elemento,
ovvero che l'elemento inverso sia quindi unico.
Lemma 2.3.4. L'inverso dell'inverso è l'elemento stesso
∀a ∈ G : (a−1 )−1 = a
∀a ∈ G : (a−1 )−1 = a
−1
inverso. b
: b−1 + b = e
Dimostrazione. Chiariamo cosa vogliamo dimostrare:
−1
b = a e calcoliamone l'elemento
b−1 + a−1 = e . Ora aggiungiamo a a destra di entrambe
−1
le espressioni ottenendo b
+ a−1 + a = e + a ⇐⇒ b−1 + e = a ⇐⇒ b−1 = a .
−1
−1 −1
Riscrivendo b = a
si ottiene (a
) = a.
. Deniamo allora
è equivalente a scrivere
Lemma 2.3.5.
(a + b)−1 = b−1 + a−1 .
Dimostrazione. Basta provare che
b−1 + a−1
è l'inverso di
a + b.
Vediamo
subito che
(b−1 +a−1 )+(a+b) = b−1 +(a−1 +(a+b)) = b−1 +(a−1 +a)+b = b−1 +e+b = b−1 +b = e
e si ha concluso.
D'ora in avanti parleremo sempre di gruppi, e per non appesantire la notazione
scriveremo spesso G intendo con esso la struttura (G,+) che è gruppo. L'abuso di
linguaggio sará comunque sempre accompagnato dalle parole, ed evitato quando il
contesto non sia immediatamente esplicito.
2.3.1. Ordine di gruppi. Un caso in cui si può confonderè' G con (G,+) è
quando parliamo dell'ordine di un gruppo. Esso non è altro che la cardinalitá
6
del
supporto del gruppo G. Va da sè che in generale ha senso parlare della cardinalitá di
un insieme quando essa è nita, e così anche per l'ordine di un gruppo. Arriviamo
quindi alla seguente denizione
Definition. L'ordine di un gruppo nito (G,+), che indicheremo semplice-
mente con o(G) invece di o( (G,+) ), è la cardinalitá dell'insieme G a supporto del
gruppo.
2.3.2. Gruppi ciclici. Di tutti i gruppi possibili ce n'è una categoria particolare che va sotto il nome di gruppo ciclico. Questi gruppi particolari, niti, hanno
almeno un elemento che è in grado, a furia di essere computato da solo, di generare
tutti gli altri.
L'esempio più semplice è quello del gruppo delle ore visto prima.
Se ci si pensa le ore 1, per somme successive, possono generare tutte le altre ore.
Non bisogna però credere che questa proprietá sia naturale del numero 1. Infatti il
numero 1 non è un generatore del gruppo
(Z, +).
Come si verica facilmente, ogni
numero positivo, cioè naturale, si può scomporre come somma nita di unitá. Ma
non c'è modo di ottenere un numero negativo come somma di numeri positivi.
Per i gruppi niti invece le cose non vanno esattamente così.
Problem 2.3.6. Trovare tutti i generatori del gruppo delle ore dell'orologio.
Enunciamo quindi un classico teorema di teoria dei numeri:
Theorem 2.3.7. Un gruppo nito con p elementi dove p è un numero primo
allora è un gruppo ciclico.
6
Ricordiamo che per cardinalitá intendiamo il numero di elementi, se nito, di un insieme
2.4. SOTTOGRUPPI
17
Da notare che il viceversa non è vero. Dato un elemento si può costruire un
gruppo di ordine qualsiasi che ammette quell'elemento come generatore.
Inoltre si può facilmente costruire un gruppo di ordine 4 che non sia ciclico. Si
G = {e, a, b, c, }
a + a = b + b = c + c = e e posto, per esempio,
pensi al gruppo G che abbia come supporto l'insieme di 4 elementi
dove e è l'elemento neutro. Posto che
a + b = c; a + c = b; b + c = a
è il gruppo, commutativo, cercato.
La dimostrazione al momento si omette.
Sará poi vista come un corollario
dell'importantissimo teorema di Lagarange per i gruppi niti.
2.4. Sottogruppi
Definition. Un sottogruppo di un gruppo, i.e. (G,+), è un sottoinsieme di G
che è comunque gruppo rispetto alla medesima operazione + denitia in (G,+).
Sia quindi A ⊂ G tale che A sia sottogruppo di G. Scriveremo d'ora in poi che
A ∈ sg(G, +) dove per sg(G, +) intendiamo l'insieme di tutti i possibili sottogruppi
di (G,+).
2.4.1. relazione di congruenza per sottogruppi. In questo paragrafo indicheremo sempre con
H ∈ sg( G, +) un sottogruppo di (G,+).
a ∈ G e si cerchino gli elementi b ∈ G che soddisno la
∈ H . L'insieme, d'ora in avanti lo chiameremo classe, degli
Si prenda un elemento
a + b−1
b ∈ G che rispettano
proprietá che
elementi
la condizione di pocanzi gode di alcune interessanti
proprietá:
a ∈ G modulo H viene denita come
b ∈ G tali che a+b−1 ∈ H e scriveremo che a ≡ b mod H =
Definition. La classe di congruenza di
l'insieme degli elementi
{b ∈ G : a + b−1 ∈ H}.
La classe di congruenza è quindi un sottoinsieme di G. Elenchiamo alcune ovvie
proprietá:
(1)
a ≡ a mod H . Per assurdo, come potrebbe essere il contrario?
a ≡ b mod H ⇐⇒ b ≡ a mod H .
Se a ≡ b mod H e b ≡ c mod H allora a ≡ c mod H .
Se a 6= b mod H ⇐⇒ b 6= a mod H .
(2) Se
(3)
(4)
Dalle prime tre proprietá di sopra, la cui dimostrazione viene lasciata come utile
esercizio al lettore con l'unica indicazione di ricordare che H è sottogruppo e quindi
gruppo a sua volta, portano a concludere che:
Lemma 2.4.1. La relazione di congruenza modulo un sottogruppo in (G,+) è
una relazione di equivalenza, ovvero una relazione riessiva, simmetrica e transitiva.
La quarta proprietá non fa altro che ricordarci che classi di equivalenza diverse
sono disgiunte, ovvero non hanno in comune nemmeno un elemento.
Example. Classi di resto: si consideri il gruppo
(Z, +)
il gruppo additivo dei
numeri interi. Si prenda il sottoinsieme dei multipli di 5, ovvero
{x ∈ Z : ∃n ∈ Z : x = 5 ∗ n}
ma.
Si consideri il numero 23.
{23, 28, 33, ..., 3, −2, −7, ...},
mod H =⇒ 23 − x ∈ H .
H = {..., −15, −10, −5, 0, 5, 10, ...} =
. H è ovviamente un sottogruppo rispetto alla somLa classe di resto di 23 è composta dai numeri
come si deduce immediatamente dal fatto che
23 ≡ x
Ovvero che 23-x deve essere multiplo di 5. Quindi a
23 si deve sottrarre un numero tale che il risultato sia un multiplo di 5 e questo è
possibile se e solo se 23 e x danno lo stesso resto nella divisione per 5.
Si osservi che una classe di congruenza non è necessariamente un gruppo, dato
che in genere non vi appartiene l'elemento neutro.
18
2. I GRUPPI DELL'ALGEBRA ASTRATTA. LE BASI
2.4.2. Laterali (destri). D'ora innanzi passeremo alla più classica e tradizionale
notazione moltiplicativa. Ovvero l'operazione che prima chimavamo genericamente
+ ora la denoteremo genericamente *. Tranne negli esempi, ovviamente.
Definition. Si chiama classe laterale destra di un sottogruppo H di un grup-
po
(G, ∗),
il sottoinsieme degli elementi di G ottenuti applicando l'operazione del
gruppo a tutti gli elementi di H con un dato elemento di
a ∈ G.
Detto in simboli
a ∈ G, H ∗ a = {z ∈ G : z = h ∗ a, h ∈ H}
Un esempio tipico è il gruppo
G = (Z, +)
e il suo sottogruppo dei multipli di
un certo numero, per esempio 5. È ovvio che somme e dierenze di multipli di 5
x ∈ Z e si consideri
H +x, dove H è il sottoinsieme dei multipli di 5, ai quali si somma il valore
danno ancora multipli di 5. Ora si prenda un qualsiasi elemento
l'insieme
di x. Esso è una classe laterale dei multipli di 5. Si prenda in considerazione il valore
x = 2, allora la classe H +2 = {5n+2 : n ∈ Z} = {..., −3, 2, 7, 12, ...}. La prima cosa
da notare è che H + 2 = H + 7 = H − 3 = H + 2 + 5n, n ∈ Z. Le possibili, e distinte,
classi laterali sono solo 5 e in sostanza sono H = H +0; H +1; H +2; H +3; H +4 che
coincidono con le classi di resto modulo 5. Inoltre si nota che ogni classe laterale può
essere messa in corrispondenza biunivoca, con lo stesso procedimento, con l'insieme
a supporto del sottogruppo H, ovvero
|
H
l
H +a
Ogni classe
7
Ha
h1
l
h1 + a
|
h2
...
l
h2 + a ...
hn
l
hn + a
...
...
contiene tanti elementi quanti sono gli elementi di H. Per
convincersene basta vericare che se così non fosse dovrebbero esistere almeno due
elementi di H, distinti, che moltiplicati con a darebbero lo stesso risultato, ovvero
∃h1 6= h2 : h1 a = h2 a
Tenuto conto che però nel gruppo G ogni elemento è invertibile, allora esiste di
certo l'inverso di a che sará chiamato
a−1
8
a−1
. Si Computi
con l'equazione di
sopra e si ottiene
h1 aa−1 = h2 aa−1 =⇒ h1 = h2
contro l'ipotesi
elementi di
H,
h1 6= h2 !
Ha non contiene meno
Ha e H hanno la stessa
L'assurdo porta a concludere che
e certamente nemmeno di più, e quindi
cardinalitá.
∀a ∈ G, o(Ha) = o(H)
Qui c'è da rimarcare l'abuso di linguaggio nel parlare di
c'è nessuna garanzia che
Ha
o(Ha).
A rigore non
9
sia un sottogruppo , e quindi non si può parlare di
ordine. Comunque ci si permetterá di confondere l'ordine di un sottogruppo con la
cardinalitá di un insieme mantenendo, per comoditá, lo stesso simbolismo.
In maniera analoga si può procedere induttivamente come mostrato nello schemino in cui a ogni elemento di
H
Ha.
a, b ∈ G.
si associava un unico elemento in
Si considerino ora due laterali destri di
H , Ha
e
Hb,
dove
Essendo
sottoinsiemi di G possono aversi solo tre alternative:
7
D'ora innanzi, per non appesantire la notazione, scriveremo
Ha in luogo di H ∗a e passeremo
alla notazione moltiplicativa.
8
L'inverso di
a
è l'elemento
a−1
tale che
a ∗ a−1 = a−1 ∗ a = 1,
con
1
elemento neutro del
gruppo. Inoltre basta ricordarsi che devono valere le leggi di cancellazione.
9
Anzi, si può facilmente dimostrare che
Ha
è sottogruppo se e solo se
a ∈ H!
2.4. SOTTOGRUPPI
Ha = Hb
(1)
19
se entrambi i laterali sono composti da tutti e soli gli stessi
elementi
Ha ∩ Hb = ∅ se i laterali non hanno in
Ha ∩ Hb = F 6= ∅ se i laterali hanno
(2)
(3)
comune nemmeno un elemento
in comune solo qualche elemento
(quelli nell'insieme F, ma non tutti!).
Ora si desidera dimostrare che il terzo caso non è possibile.
assurdo, si immagini di trovarsi in questo caso.
f ∈ Ha
e
f ∈ Hb
Allora, ancora per
f ∈ F . Come
h1 , h2 ∈ H tali che
Si prenda
ovvero devono esistere due elementi di
tale è
h1 a = f = h2 b
Da questa relazione, e ricordando che H è sottogruppo, allora in H esiste
elemento inverso di
h1 .
Applicando
h−1
1 h1 a
h1−1 h2
=
h−1
1
h−1
1
all'ultima equazione otteniamo
h−1
1 h2 b
=⇒ a = h−1
1 h2 b
è il prodotto di due elementi di H e quindi, sempre perché H è sottogruppo,
rappresenta un elemento di H, ovvero
a = hb ∈ Hb.
concludere che
ha, h ∈ H}.
.
Questo porta a
Ha = {x : x =
ha = hhb ∈ Hb. E si
di Hb. Potendo scrivere
Ma quindi ora consideriamo l'insieme
Ogni elemento in
Ha
si può riscrivere come
conclude che quindi ogni elemento di
b = h−1 a
∃h ∈ H : h = h−1
1 h2
Ha
è un elemento
è vero anche il viceversa e si ha concluso che se due laterali hanno in
comune anche un solo elemento, allora li hanno in comune tutti.
Inoltre va chiarito n da subito che se
garantito che
ha = hb,
a 6= b
e
Ha = Hb
allora non è aatto
che anzi è falso per le leggi di cancellazione.
Ha = Hb
signica che i due insiemi sono composti dagli stessi elementi, ma essi possono
essere generati in maniera diversa. Il procedimento di sopra mostra come generare
gli elementi di
Ha
da quelli di
Hb
e viceversa.
Queste osservazioni permettono di aermare il seguente
Lemma 2.4.2. Due classi laterali di un sottogruppo o coincidono o sono dis-
giunte.
Ora ci sono tutti gli strumenti per dimostrare il teorema di Lagrange.
Si osservi che in realtá potremmo dire di più sui laterali destri. Per esempio che
la relazione di appartenenza a uno stesso laterale è una relazione di equivalenza.
Anzi, che appartenere allo stesso laterale signica che i due elementi sono congruenti
a ∈ Hb possiamo
∈ H =⇒ a ≡ b mod H .
modulo H. Se infatti
ottenendo
−1
ab
moltiplicare entrambi i termini per
b−1
2.4.3. Il teorema di Lagrange per i gruppi niti.
Theorem 2.4.3. (di Lagrange per gruppi niti) Dato un gruppo
nito (G, ∗),
in cui sia denita l'operazione *, e un sottogruppo H di G, allora l'ordine di H
divide l'ordine di G.
o(H)|o(G)
Dimostrazione. Si basa su come si possono raccoglierè'
G. Da G si raccolgono tutti gli elementi di H, che sono
altro elemento di G detto
g.
Considerando
Hg ,
o(H).
10
gli elementi di
Poi si prende un
essa o coincide con
condivide nemmeno un elemento, per quanto dimostrato poc'anzi.
caso si avranno
2o(H)
o non ne
elementi distinti. Proseguendo con tutti i possibili laterali si
otterrá uno schema simile al seguente
10
H
Nel secondo
Raggruppare è forse più azzeccata, ma si rischia di diventare ripetitivi
20
2. I GRUPPI DELL'ALGEBRA ASTRATTA. LE BASI
Tabella 1. Schema 1
h1
h1 g
h2
h2 g
...
...
hn−1
hn−1 g
hn
hn g
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Come si vede, su ogni riga ci sono n elementi, tanti quanti l'ordine di H. Ogni
riga corrisponde a un distinto laterale destro, ovvero se gli elementi di un certo
laterale sono giá stati presi in considerazione non si ripeteranno.
laterale aggiunge sempre
o(H)
elementi.
elementi di G su k righe, ciascuna di
Ogni distinto
Alla ne si avranno enumerati tutti gli
n = o(H)
elementi.
C'è solo da convincersi che vengono enumerati tutti gli elementi di G. Si ricordi
che H è sottogruppo e quindi l'elemento neutro ne fa parte. Considerando tutti i
possibili elementi in
Hg
al variare di
g∈G
viene naturale vericare che
g ∈ Hg
e
che quindi l'unione di tutti i laterali destri contiene almeno tutti gli elementi di G.
Chiamato
iG (H)
il numero di distinti laterali destri di
H
in
G,
e allora
o(G) = iG (H)o(H)
Essendo l'ordine di G multiplo intero dell'ordine di H la conclusione è che
l'ordine di un sottogruppo divide l'ordine del gruppo relativo
generalitá con cui abbiamo scelto
H
o(H)|o(G).
E per la
, che è un qualsiasi sottogruppo, si conclude
che
L'ordine di un qualsiasi sottogruppo di un gruppo nito è un
divisore dell'ordine del gruppo di partenza.
2.5. Teorema di Eulero
Theorem 2.5.1. Sia a un numero intero e n un numero naturale primi fra
loro. Allora
aφ(n) ≡ 1 mod n.
Per il resto del paragrafo
n
sará sempre un numero naurale. Per comprendere
appieno questo teorema bisogna specicare cosa si intende per
funzione
φ()
mod n
e per la
.
Definition. Due numeri interi sono congruenti modulo n quando la loro
dierenza è multipla, intera, del numero n.
Interessante notare che in genere la denizione data, specie in informatica, non
è esattamente questa ma Due numeri sono congruenti modulo n se danno lo stesso
resto nella divisione per n.
Basta però qualche esempio per convincersi che le
denizioni indicano la stessa proprietá.
Si considerino i numeri 8 e 13 modulo 5. Come si nota, il resto di 8 diviso 5 è
3 che è lo stesso di 13 mod 5. Infatti
13 − 8 = 5
che è multiplo di 5.
Usando l'algoritmo della divisione ogni numero intero a può essere scritto come
a=q∗n+r
dove
r<n
ovviamente è il resto della divisione intera, mentre q il quoziente.
Per tornare all'esempio precedente, notiamo che
scriveremo
13 − 8 = 5
è multiplo di 5, e
8 ≡ 13 mod 5.
Allo stesso modo 102 e 1577 sono congruenti modulo 5, dato che
1475
1577 − 102 =
che è multiplo di 5. Come si nota un qualnque numero intero è congruente
2.5. TEOREMA DI EULERO
modulo n a uno e un solo numero minore di n.
21
Quindi quando si parla di con-
gruenza modulo n ci si può limitare a considerare solo gli elementi minori di n, e
chiaramente maggiori o uguali di 0. Si può anche dimostrare che questa relazione
è di equivalenza.
Example. Si prenda il numero 24. Elencando tutti i naturali minori di 24 si
ottiene il seguente insieme:
I24 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23}
In questo insieme si cerchino solo quei numeri che non hanno divisori comuni con
24, ovvero che sono coprimi con esso. Si scomponga in fattori primi 24:
23 ∗ 3.
24 = 8∗3 =
Quindi 24 ha come divisori primi i numeri 2 e 3.
Si genera quindi l'insieme
J
che contiene tutti i numeri di I che però non hanno
nessun divisore comune, eccetto il numero 1, con 24. Allora
Come si nota la cardinalitá di
nostra funzione
J24
J24 = {1, 5, 7, 11, 13, 17, 19, 23}.
Jx è proprio la
è 8. La cardinalitá dell'insieme
φ().
#Jx = φ(x)
Questa denizione, certamente non molto rigorosa, ha però il vantaggio di essere
immediatamente operativa. Si può provare a fare un altro esempio, ovvero calcolare
la
φ(35),
11
esempio non casualmente scelto come prodotto di due numeri primi.
Gli elementi di
Jn
rispetto alla moltiplicazione modulo n formano un gruppo,
φ(n). Ora ricordando che preso
a ∈ G, si può costruire il sottogruppo
come visto precedentemente. Essi sono esattamente
un elemento di un guppo nito, chiamiamolo
ciclico generato da a come
(a) = {g ∈ G : g = an , n ∈ N}
ovvero di tutti gli elementi di G ottenbili come potenzè' di
e quindi il suo ordine deve dividere l'ordine di G. Ovvero
un naturale
k∈N
tale che
o(G) = k o(a).
ao(G) = ak
a, esso è un sottogruppo,
o(a)|o(G) e quindi esiste
Si può allora concludere che
o(a)
= (ao(a) )k
k o(a) possono essere computati in
k righe da o(a) elementi a ciascuna.
Nell'ultimo passaggio si è sfruttato il fatto che i
qualsiasi modo, ovvero li si può raggruppare in

o(a)


z
}|
{

o(a)

a
= a ∗ a ∗ ... ∗ a



o(a)


 o(a)
z
}|
{
a
= a ∗ a ∗ ... ∗ a
k righe

.
.

.
.


.
.



o(a)


}|
{
z
 o(a)
a
= a ∗ a ∗ ... ∗ a
Ma per la denizione di ordine di un elemento
12
,
ao(a) = 1 e moltiplicando 1
k volte
con sè stesso si riottiene sempre 1 e quindi
(ao(a) )k = 1k = 1
11
E l'insieme da calcolare sará composta, guarda un pò!, da 24 elementi, ovvero 6*4. E allora
di prova anche con
12
φ(6) e con φ(10) così che i neuroni siano invitati a cercare la correlazione giusta.
Questa dimostrazione è stata fatta in una lezione rpecedente, anche se non è male ricordare
il fatto che gruppo e sottogruppo sono niti, con tutte le consguenze che ne derivano.
22
2. I GRUPPI DELL'ALGEBRA ASTRATTA. LE BASI
2.5.1. Sintesi della dimostrazione. Ora, la classe di resto modulo n ha
esattamente, come visto prima,
φ(n)
elementi, che quindi è il suo ordine.
ipotesi del teorema di Eulero si aerma che i numeri
a
e
n
Nelle
sono coprimi fra loro,
a ≡ an mod n è congruente a un elemento di Jn . Passando ai moduli, i
(a) e (an ) sono uguali, (a) ≡ (an ), e quindi sottogruppi di Jn .
Per il teoema (2.4.3) di Lagrange allora o(a)|o(Jn ) = φ(n), ovvero φ(n) = k ∗ o(a).
Abbiamo che φ(n) deve essere multiplo intero dell'ordine del sottogruppo ciclico
generato dall'elemento a. Quindi
e quindi
sottogruppi ciclici
aφ(n) ≡ ak∗o(a)
mod n ≡ (ao(a) )k
mod n ≡ 1k
mod n ≡ 1
mod n
Che è la tesi voluta.
2.6. Piccolo teorema di Fermat
Nella stessa losoa del teorema precedente, si ha il seguente teorema:
Theorem 2.6.1. Dati due numeri interi, diciamoli a e p, con l'unico vincolo
che p sia un numero primo, allora
ap ≡ a mod p
Si distinguono due casi fondamentali
(1) a è multiplo di p, ovvero
∃n ∈ N : a = n ∗ p.
multiplo di p. Quindi, per denizione dell'operazione di modulo,
a ≡ ap mod p.
a non è multiplo di p, ovvero @n ∈ N : a = n ∗ p anzi, esiste un numero
0 < r < p tale che a = n ∗ p + r. In questo caso allora a e p non hanno
mod p
(2)
e anche
ap ≡ 0 mod p
ap è
a≡0
Va da sè che anche
che conclude
divisori comuni (p ha come unico divisore non banale p stesso che non
divide a ) e quindi, applicando in questo caso il teorema (2.5.1) di Eulero
si ottiene che
aφ(p) ≡ 1 mod p.
Maφ(p)
= p − 1,
infatti tutti i numeri
interi più piccoli di p non hanno altri divisori comuni con p se non il
numero 1!
ap−1 ≡ 1 mod p.
Questo ci porta a scrivere
Moltiplicando
entrambi i membri per a si ottiene
ap ≡ a mod p
che conclude la dimostrazione.
In questa dimostrazione abbiamo anche dimostrato che
φ(p) = p − 1.
In modo
diverso si poteva notare che tutti i numeri maggiori di zero e minori di p non
possono avere divisori comuni con p : p è primo. Quindi sono tutti coprimi con p
Jp contiene p-1 elementi e quindi
demostrandum.
e sono p-1.
φ(p) = p − 1 ⇔ p ∈ P
Quod erat
2.7. Considerazioni numeriche
Per poter gettare le basi dell'RSA si devono applicare i teoremi appena visti in
chiave numerica, ovvero sui numeri interi.
2.7.1. Piccolo Teorema di Fermat. Un modo equivalente di formulare il
PTF è il seguente
Theorem 2.7.1. Dato un numero primo
mod (p − 1)
p
allora per qualsiasi intero m si ha
e un secondo numero tale che
ma ≡ m mod p.
a≡1
Si vuole arrivare a questo teorema partendo da quello che giá si dispone. Allora
si noti che da questo deriva subito il PTF nella formulazione della sezione precedente
grazie all'osservazione che
p = 1 + (p − 1) ≡ 1 mod (p − 1) = 1 mod φ(p).
a ≡ 1 mod (p − 1)
Armati da questo fatto, si passa a notare che se
a = 1 + k(p − 1)
allora
. Ma a questo punto la dimostrazione è analoga a quella fatta per
2.7. CONSIDERAZIONI NUMERICHE
(2.6.1) , considerando il caso in cui
p
divide
m
23
oppure no e scomodando il teorema
di Eulero nel secondo caso.
Lo studente provi per esercizio ad adattare la dimostrazione del PTF (2.6.1) a
questa variante, giocando con le proprietá banali delle potenze e delle clasi di resto.
2.7.2. Teorema Cinese del Resto. L'ultimo mattone è il seguente corollario
del più generale teorema Cinese del Resto.
Theorem 2.7.2. Dati due numeri primi distinti detti
p, q
e un terzo numero
z
tale che:
z ≡ 1 mod p
z ≡ 1 mod q
z ≡ 1 mod (pq).
(1)
(2)
Allora
q = 11 . Si cerchi z con le proprieá richieste dalle
1 andrebbe benissimo. Si provino in sequenza:
1, 8, 15, 22, 29, 36, 43, 50, 57, 64, 71, 78, 85, ..., 7k + 1, ...
1, 12, 23, 34, 45, 56, 67, 78, 89, ..., 11j + 1, ...
I numeri che rispettano le ipotesi sono gli z del tipo z = 7k + 1 = 11j + 1. Si
consideri quindi z − 1 = 7k = 11j . L'ovvia considerazione è che z − 1 è multiplo
sia di 11 che di 7. Stando la primalitá quindi è anche multiplo di 77.
Example. Siano
p=7
e
premesse del teorema. Ovviamente
7k = 11j
Impone che
7 divida j che quindi ne è multiplo intero: j = 7 ∗ j
11 divida k che quindi ne è multiplo intero: k = 11 ∗ k
Da cui segue che 7k = 7 ∗ 11 ∗ k = 11j = 11 ∗ 7 ∗ j che conclude che k = j
più importante che z − 1 è multiplo di 77.
Dall'ultima relazione segue che z − 1 = 77k =⇒ z ≡ 1 mod 77.
(1)
(2)
ma cosa
La generalizzazione di questo teorema al caso in cui p e q siano generici è
esattamente analoga all'esempio appena visto e si invita lo studente a cercarla.
Altro fatto interessante, e che sará utile, è il viceversa:
n = pq con p, q numeri primi,
x ≡ 1 mod p e x ≡ 1 mod q .
Lemma 2.7.3. Dato
x ≡ 1 mod pq
allora
e un numero
x
tale che
La dimostrazione si basa sempre su argomenti di carattere numerico ed è facile
da intuire dopo quanto detto sopra.
L'ultimo fatto che rimane è una generalizzazione del Teorema (2.7.2) :
Theorem 2.7.4. Dati due numeri primi distinti detti
tale che:
z ≡ m mod p
z ≡ m mod q
z ≡ m mod (pq).
(1)
(2)
Allora
p, q
e un terzo numero
z
CAPITOLO 3
L'RSA - perché funziona
3.1. Due Primi Grandi
L'RSA si basa su due numeri primi grandi.
Essi devono essere grandi per
garantire la sicurezza, solo di tipo probabilistico sia chiaro, che non si possa rompere
il codice. È ovvio che nell'esempio che andremo ad illustrare si useranno numeri
piccoli anche se non c'è alcun problema ad usare numeri anche di 9 cifre se si usa
un linguaggio di programmazione di capacitá superiori. Per esempio il linguaggio
Java ha nelle sue librerie la classe BigInt che permette di gestire numeri interi non
negativi di grandezza arbitraria (in teoria no al milione di cifre), anche se con
numeri di tale dimensione i tempi di calcolo, ovviamente, si allungano.
Si prendano quindi due numeri primi, p e q.
p = 61
q = 53
Si consideri ora n = p ∗ q = 61 ∗ 53 = 3233 e φ(n) = (p − 1) ∗ (q − 1) = 60 ∗ 52 =
3120.1
Ora si sceglie un numero e che deve essere coprimo con φ(n). Questo test di
primalitá si può eseguire con l'algoritmo di Euclide che ha un complessitá quadratica
nel numero delle cifre dei numeri coinvolti.
Per esempio si scelga
e = 77,
con l'unica limitazione che sia coprimo e minore
di n.
Come si vede dalla gura 3.1.1, l'inverso di e è il numero, chiamiamolo d,
1013. Ovvero
e ∗ d = 1 mod φ(n).
Sará a partire da questi tre numeri
e, d, n
che
realizzeremo l'algoritmo di cifratura.
3.2. Chiave Pubblica. Chiave Privata.
Dai tre numeri
(d, n)
e, d, n
si producono le due chiavi:
(e, n)
detta chiave pubblica;
detta chiave privata. Come è naturale la prima sará disponibile a chiunque,
mentre la seconda sará custodita gelosamente dal proprietario. I numeri primi
p, q
si possono tranquillamente distruggere, dato che non hanno più nessun ruolo nella
cifratura.
Per poter realizzare appieno il protocollo c'è però la necessitá di un deposito
centrale delle chiavi pubbliche.
Al giorno d'oggi esistono siti web che si occu-
pano proprio di questi aspetti, mettendo a disposizione le risorse necessarie per la
creazione di questi database di chiavi pubbliche. Esattamente come un elenco del
1
Se un numero n è prodotto di due primi, p e q, i numeri più piccoli di n che non sono coprimi
con n sono quelli che sono multipli di p o di q.
Ora,
n = pq ;
quindi
{p, 2p, ..., kp, ..., (q − 1)p}
sono tutti e soli i numeri minori di n che hanno in comune il fattore p con n stesso. Essi sono
chiaramente
q − 1, dato che pq = n.
pq che però è escluso.
primo sarebbe
E fra essi non ce n'è nessuno che è anche multiplo di q, il
Analogamente si vede che ci sono
p−1
numeri multipli di
q e minori di n che non sono multipli di p. I numeri minori di n sono ovviamente n-1. Di essi
ce ne sono
p−1+q−1=p+q−2
che non sono coprimi con n. In totale si hanno quindi che i
numeri minori di n e coprimi con esso sono:
p(q − 1) − (q − 1) = (p − 1)(q − 1)
n − 1 − (p + q − 2) = n − p − q + 1 = pq − p − q + 1 =
che conclude la dimostrazione.
25
26
3. L'RSA - PERCHÉ FUNZIONA
Figure 3.1.1. Euclide esteso
telefono, ognuno può cercare al suo interno il numero, che in questo caso sará la
chiave pubblica, del nostro destinatario ed usarla per preparare, cifrare, il messaggio che vogliamo mandargli. Come si vedrá nella prossima sezione, per decifrare il
messaggio serve la chiave privata, che è appannaggio solo del destinatario, il quale
sará quindi l'unico a poter ricavare il testo in chiaro.
L'idea è quella di un lucchetto con due toppe, ciascuna associata a una chiave
diversa. E ciascuna con una funzione diversa: una permette di chiudere la serratura,
l'altra di aprirla. Sul web c'è una copia della chiave che permette la chiusura del
lucchetto, e quindi disponibile a tutti. La chiave per aprire è invece conservata solo
dal destinatario.
Altro esempio è quello di una serratura e due chiavi distinte: una gira in senso
orario per chiudere e l'altra, distinta, può girare in senso antirorario per aprire.
3.3. L'algoritmo
Il mittente dispone, in qualche modo, della chiave pubblica del destinatario.
Alla peggio essa può essere anche trasmessa direttamente, e in chiaro, dallo stesso
destinatario:
non c'è nessun motivo perché essa debba essere tenuta segreta, e
quindi trasmessa in modo sicuro.
Questa chiave è la coppia
(e, n)
(e sta per en-
cryption key).
Quello che ora deve essere chiaro è che un messaggio può essere diviso in blocchi,
e che ad ogni blocco può essere associato, con una relazione biunivoca, un numero
intero. Questo deriva facilmente dal fatto che in informatica ogni informazione è di
fatto trasformata in una stringa di bit, che in quanto tale può essere interpretata
2
come un numero, intero, in base binaria .
Ci sará quindi una preelaborazione del testo per dividerlo in blocchi di dimensione compatibile con l'operazione di cifratura. Nella seguente operazione aritmetica si chiamerá m il blocco di messaggio da cifrare e c il risultato della sua cifratura:
c = me
2
mod n
In genere questo fatto va anche sotto il nome di processo di aritmetizzazione di Gï¾÷del.
3.4. CODIFICA E DECODIFICA: UN ESEMPIO
Il valore
c
è uno degli inniti esemplari possibili che
equivalenti, e in genere si prende il valore fra
0
e
n
27
mod n
sono fra loro
che è spesso il rappresentante
della classe di equivalenza che è il risultato dell'operazione di cifratura. Da qui in
poi avremo sempre a che fare con l'aritmetica
mod n
e sulla classe di equivalenza
degli elementi come appena denito.
L'operazione di decifratura, partendo dalla chiave privata (che ricordiamo è la
coppia
(d, n))
e il ciphertext, è
t = cd
mod n
Si noti che
c
}|
{
z
t = (me mod n)d
mod n = (me )d
mod n = med
mod n
ed = 1 mod (φ(n)) = 1 mod ((p − 1)(q − 1)).
ed = 1 mod (p − 1) e
ed = 1 mod (q − 1). La dimostrazione è quasi banale e ritengo
Per come li abbiamo costruiti,
Ora si deve dimostrare che dall'ultima relazione deriva che
analogamente che
che sia un utile esercizio da proporre agli studenti, cosï¾÷ da scomodare qualche
capacitá di lavorare con i numeri interi.
Quanto detto porta a vericare le ipotesi del PTF 2.7.1 che permette allora di
med = m mod p e med = m mod q . Ora sfruttando il teorema
ed
2.7.4 si può concludere che m
= m mod n e ricordando che me = c che t = cd
ed
mod n = m
mod n = m mod n che ci assicura di essere tornati al punto di
concludere che
partenza, ovvero la decodica del messaggio originale.
3.4. Codica e Decodica: un esempio
Si prendano due numeri primi per esempio 17 e 19. Si useranno numeri piccoli
per permettere di poter gestire questi calcoli con un foglio elettronico e utilizzare
caratteri a 8 bit come elementi di base dell'algoritmo.
n = p ∗ q = 323
φ(n) = 288.
e = 5. Attraverso l'algoritmo di Euclide esteso si calcola il
valore di d che deve essere tale che e ∗ d = 1 mod φ(n). Nel nostro caso l'algoritmo
arriva a computare il numero 115, che però è congruo −1 mod 288. Si computi
quindi il numero 288 − 115 = 173 che, come si dimostra facilmente, è congruo 1
mod 288.
Abbiamo quindi la chiave pubblica (5, 323) e la chiave privata (173, 323).
con
Si scelga per esempio
Un modo semplice per procedere alla cifratura è quello di dividere il messaggio
in blocchi e di eseguire quindi la cifratura di ogni blocco secondo la procedura
c = me
mod n
Va da sè che la dimensione di ogni blocco non può eccedere il valore di
altrimenti perderemmo la biunivocitá dell'algoritmo.
n,
I possibili valori di ogni
blocco, una volta trasformato in numero naturale, devono essere interni all'insieme
{0, .., n − 1}.
Tutti i valori più grandi non potrebbero essere decodicati perché
congrui, modulo
n,
a un valore in
{0, .., n − 1}.
La parte più dicile di questo algoritmo rimane valutare
anche non elevati di
e
me .
Infatti per valori
il valore ottenuto rapidamente eccede il valore massimo
rappresentabile dalle variabili intere in genere in uso nei calcolatori. Non rimane
che notare il seguente fatto:
me
mod n = (m ∗ (me−1
e sfruttare l'ovvia relazione di ricorrenza.
mod n)
mod n
Pagando il calcolo del modulo a ogni
passaggio si riesce a tenere sotto controllo il valore calcolato cosï¾÷ che non diventi
mai troppo grande. Solo che con questo algoritmo bisogna procedere ad eseguire
e
28
3. L'RSA - PERCHÉ FUNZIONA
Figure 3.4.1. Euclide Esteso
moltiplicazioni e moduli. Un modo decisamente più sagace è quello di riscrivere il
numero
e
nelle sue cifre binarie:
e = en en−1 ...e1 e0 =
n
X
2i ei
i=0
Questo fatto permette di calcolare
Pn
me = m
(3.4.1)
i=0
2i ei
=
n
Y
m2
i
ei
i=0
Si noti che
i+1
m2
i
= m2
∗2
i
= (m2 )2
fatto che permette di passare da un elemento a quello successivo nella produttoria
n).
log2 e + 1 3.
(3.4.1) con un'unica operazione (modulo
Le cifre binarie signicative del numero
e
Nella produttoria, sempre modulo
sono chiaramente inferiori a
anche qui sono al più
n,
i
e
che sono 1, e
log2 e + 1. Cosï¾÷ in un tempo proporzionale
e si può cifrare il nostro messaggio.
al numero di
termini diversi da uno sono tutti e soli quelli delle cifre binarie di
cifre binarie del numero
Dopo questa dissertazione sarebbe interessante chiedere agli studenti perché,
in genere, valori popolari di
e
sono nella forma
2k + 1
(come per esempio 65537 e
257 per citare i due più famosi sul web [?]).
Fatte queste considerazioni si hanno a disposizione tutti gli strumenti per
costruire l'RSA. Si può usare un foglio elettronico, non sarebbe dicile costruirne uno con openCalc, oppure un qualsiasi linguaggio di programmazione dal C, al
Pascal o Java o il php. In appendice ci sono per esempio due programmi in ANSI-C.
Detti programmi possono essere usati per decodicare la sequenza di numeri
proposta come esercizio in appendice nella tabella 1.
3
Qui
e
non è il numero di Nepero ma l'elemento della chiave pubblica
(e, n).
3.6. LIMITI COMPUTAZIONALI
29
3.5. Applicazioni
In questa sezione si immaginerá che due partner (che chiameremo come si usa
in nomenclatura Alice (A) e Bob (B) ) vogliano comunicare in modo sicuro usando
l'RSA. Si diranno
EA
e
DA
EB
le chiavi pubblica e privata di Alice;
e
DB
le chiavi,
pubblica e privata, di Bob.
3.5.1. Comunicazione segreta. Alice decide di mandare un messaggio segreto a Bob per ssare il loro prossimo appuntamento. Prende la chiave pubblica di
Bob
EB
e il proprio messaggio
il crittogramma
c
m.
Applica l'algoritmo RSA a
(EB , m)
ottenendo
che manda in chiaro, anche se si spera non via sms!, a Bob. Per
poter risalire al messaggio originale ci vuole la chiave segreta di Bob
DB
che solo
Bob dovrebbe avere, garantendo quindi la riservatezza della corispondenza.
3.5.2. Non ripudio. Se vi è mai capitato di ricevere un biglietto, una mail o
un messaggio da qualcuno che si spacciava per un altro sapete di cosa si parla. Un
falso, magari ben fatto, può essere un brutto tranello in cui cadere. Questa sezione
ha lo scopo di illustrare come l'RSA possa essere usato per garantire che il mittente
non sia un impostore.
Alice vuole mandare il suo messaggio a Bob, ma Bob è sospettoso perché sa
che Enrico potrebbe giocargli un tiro mancino. Allora chiede a Alice di usare la sua
chiave privata
DA
e l'RSA sul messaggio, prima di inviarglielo.
Alice prende il messaggio
ottenendo il messaggio
r.
m
e applica l'RSA con la sua chiave privata
(DA , m)
Ora per tornare al messaggio originale basta applicare
l'RSA con la chiave pubblica di Alice e quindi
RSA(EA , r)
sará
m,
con la garanzia
che solo Alice dovrebbe conoscere la propria chiave privata, e quindi solo ella può
aver predisposto questo messaggio. L'unico inconveniente di questo modo di procedere è che chiunque può leggere il messaggio inviato da Alice.
3.5.3. Firma digitale. Il passo successivo è proprio quello di coniugare le
due tecniche precedenti per arrivare a quella che in gergo si chiama rma digitale
che garantisce la riservatezza della comunicazione e la certezza del mittente.
m e vi applica la propria chiave privata otc1 = RSA(DA , m) garantendone quindi la provenienza. Ora
esegue a c1 la cifratura con la chiave pubblica di Bob ottenendo c2 = RSA(EB , c1 ).
Invierá c2 a Bob che potrá quindi invertire la sequenza delle cifrature: d1 =
RSA(DB , c2 ) = c1 toglie la cifratura al messaggio c2 , garantendo che solo Bob lo
possa decifrare. Ora, usando la chiave pubblica di Alice, si calcola RSA(EA , c1 ) =
m togliendo anche il secondo lucchetto e risalendo a m. Grazie al fatto che sia
Alice prende il proprio messaggio
tenendo il messaggio
Alice che Bob hanno bisogno di una chiave segreta, si garantisce la riservatezza e
l'autenticitá del messaggio.
3.6. Limiti Computazionali
L'RSA codica un blocco del messaggio sempre con lo stesso algoritmo. Questo
signica che al ripetersi di uno stesso valore di un blocco, il valore cifrato sará lo
stesso. In teoria dei codici si dice che il sistema è monoalfabetico, ovvero a simbolo
uguale corrisponde simbolo uguale. Questo è particolarmente visibile nell'esempio
che abbiamo costruito e in cui abbiamo usato i byte, caratteri in sostanza, come
blocco elementare di cifratura. Se guardiamo nel le cifrato, per esempio, a tutte le
lettere 'è corrisponde sempre lo stesso valore. Questa sarebbe una grave falla, come
storicamente si è mostrato, che permette facilemente di risalire al testo in chiaro
anche in assenza della chiave. Questo problema si può in qualche misura aggirare
prendendo un numero
n
grande, cosï¾÷ da usare blocchi molto grandi e rendere
la vita più dicile al nostro oppositore. Ma questo rende la vita dicile anche a
30
3. L'RSA - PERCHÉ FUNZIONA
noi, dato che i numeri che vengono coinvolti diventano grandi e quindi il tempo per
eseguire le operazioni sul pc aumenta in modo signicativo.
Inoltre bisogna ricorrere a numeri primi molto grandi per avere una buona
n ai suoi fattori. Fattori
d e quindi la chiave segreta. Altri problemi
probabilitá che ci voglia molto tempo per risalire dal valore
che permetterebbero di ricavare il valore
poi nel trovare numeri primi grandi e sul fatto di poter garantire che siano primi.
Appendice
Esempio
Tratto dalle ultime parole famose, ovvero Le mille balle blu di P. Gomez e M.
Travaglio. La chiave privata è
(173, 323).
Table 1.
47 53 271 115 165 286
241 230 230 42 223 109
241 223 131 190 22 181
22 230 241 109 22 165
249 75 223 249 182 223
104 22 181 22 230 53
22 165 241 193 104 271
109 223 84 204 86 56
88 223 229 271 190 22
165 42 223 104 271 109
223 230 42 115 165 190
42 193 319 53 42 230
223 69 42 169 271 190
230 42 67 193 87 22
109 169 22 42 223 206
271 190 109 53 115 131
42 230 22 193 193
Secondo esempio
Nelle tabelle successive sono presenti in totale 91 righe contenenti 6 numeri interi ciascuna. Esse sono il risultato ottenuto cifrando con l'RSA un le di testo di 1,7
(65537, 1.054.159.999) a cui corrisponde
(473.930.225, 1.054.159.999). Il testo è stato cifrato dividendolo in
kBytes. La chiave pubblica usata è stata
la chiave privata
blocchi di 3 caratteri consecutivi, generando un numero intero secondo l'algoritmo
seguente:
n = c1 ∗ 256 ∗ 256 + c2 ∗ 256 + c3
dove
ci
rappresenta la codica ASCII del carattere corrispondente. Adattando il
codice C in appendice, con i dovuti accorgimenti tecnici per gestire numeri interi
senza segno a 64 bits anzichè gli usuali a 32 bits, si può risalire al testo in chiaro. I
ragazzi riconosceranno, con stupore e forse un lo di acredine, delle famose terzine
che hanno certo studiato al terzo anno.
31
32
APPENDICE
Table 2. Da decodicare
434894881 602794454 393495317 621525751 149898611 309631509
336886207 341338898 604254301 869740089 332421753 986114580
327935613 729505350 1004095412 434697326 1031046096 324686420
369612399 919205262 146191105 1011124673 221469240 689150077
879552975 304262447 525988921 440803595 332421753 144347134
221469240 795330775 93700353 923380078 66836385 927550986
995900967 89170801 304262447 357435288 851344472 621309628
221469240 726949157 119838521 304262447 204456281 807564915
986114580 728779296 158764863 728779296 699944947 938076340
537773534 642142636 221469240 407974636 370524385 65578719
970947344 405135790 637541685 753210703 919190559 731660040
678383641 216906641 675749335 204456281 3808877 667286760
181614087 710121705 385700313 433794888 211599400 364303433
725198506 28596418 603795005 447845759 657453728 1038184623
637541685 858216684 346897738 662817518 621525751 205341127
61081449 559100821 182755874 276603473 591571773 804591562
214373862 453620340 727046824 988292166 161194989 721033360
204789965 159667465 559100821 182755874 594033345 131987742
322953054 284432872 734524718 331591431 690081102 687031627
61081449 753323880 357435288 718413310 421800349 333068946
778825974 223692008 517136440 667286760 246211302 629760928
457963668 900772580 1037682016 725459038 123421878 313396229
155427619 392799365 1011036094 970947344 760377179 843073343
303299396 332421753 805083373 504198368 833116136 531018665
190709359 629760928 747751941 559100821 182755874 640997842
32410558 28596418 726949157 873491498 1020552568 855596029
782752504 1052236693 232263437 216906641 727046824 464528653
787162714 548625789 221042347 212855281 733451800 760377179
262392795 425100643 689150077 178072729 444727333 304262447
473475490 621072674 243228444 149898611 972713313 718413310
864274382 232263437 440125122 95336576 434697326 336886207
456256517 736556072 246254310 98052877 906080284 198784804
429476484 498130094 425100643 641464063 856575661 782752504
351017668 621525751 282453309 604061275 275008724 885928321
153349028 51089135 849996943 970947344 811219008 304262447
729505350 89170801 456256517 304089234 637541685 826120568
295940845 381378694 852825894 116322831 360150109 745741179
596963101 629760928 621072674 3190243 837942458 364303433
554556162 265120873 433794888 504100055 885928321 207659234
474354031 885928321 322953054 178072729 480334417 5149851
346897738 1039853369 574947187 531156226 65578719 460794405
19944863 913691524 434697326 953010784 18843759 1016781713
28596418 265120873 614533158 204789965 554603608 313396229
81725354 970947344 953010784 906080284 771545021 453596075
316589627 774609732 517115961 958175242 708178867 394829403
621525751 155427619 227538200 961311810 1039853369 285751800
221911063 272127171 835108008 526524219 123421878 470407715
256490574 629760928 1034099050 154586067 345956374 537773534
439610177 643230772 166982162 10385257 173636945 448701078
577556605 616653483 582122835 400746913 264781004 745741179
589932194 221911063 924432284 226485054 609511802 957885712
SECONDO ESEMPIO
Table 3. Da decodicare (continua)
547887615 591571773 123421878 765978360 441034489 827322029
653461402 913691524 1011036094 970947344 498193786 216906641
123356433 992413514 938076340 117323785 434697326 1031046096
593219415 985877414 221911063 750505581 747751941 559100821
819145418 50136477 42251423 324686420 203951956 340940951
43914623 322953054 285802235 21860734 37590102 44372968
69405795 821402957 211665734 637541685 827322029 629760928
274563921 938076340 900772580 29720949 643230772 272127171
1046588943 970947344 862022251 358210560 1008192909 18520555
131987742 64635042 801775415 480334417 932300167 28596418
603795005 313881245 86567421 629924272 770899502 737525733
554556162 387667064 32410558 204789965 791253024 372175383
873305144 988292166 246211302 643230772 324686420 1039853369
624528236 1039853369 351924947 480334417 537773534 69405795
305159420 824358304 552295846 582122835 970947344 341338898
895150982 1038184623 341217664 42251423 776909040 849996943
464528653 346424657 522749372 331591431 166922142 173487170
473475490 541369134 75305114 861602028 1033165567 589334439
549067336 477271239 736556072 1033165567 493909757 389971601
916885157 545953306 667286760 1030869140 905998024 297186661
985368404 791253024 736556072 559100821 182755874 640997842
637541685 365832073 467414788 861726652 1004270699 407283285
835108008 934771844 835108008 552295846 804002793 64635042
246211302 304262447 397655766 1050306134 425645494 996473268
621525751 905998024 538510611 918255281 732675606 932300167
1037682016 905998024 104972005 965567070 683601352 198784804
1046588943 734271086 313396229 852825894 198006186 977149123
65578719 791162878 215131823 204789965 72188748 596931336
851344472 833116136 173636945 728248184 873305144 357682319
246245863 971750397 159667465 341338898 1050306134 10959730
313396229 852825894 204789965 159667465 856686407 52546207
272127171 1046588943 400746913 466640447 480191711 1035686951
1002359727 178072729 480334417 381378694 346031135 480191711
341338898 313396229 632792358 878645986 480334417 123421878
760377179 635287017 440803595 637541685 852825894 984945653
32313967 621525751 59819722 64635042 825964690 216906641
542521029 945629796 198006186 579976134 391854488 148721409
574947187 734271086 10385257 433794888 211599400 621072674
574947187 734271086 327935613 334481100 159667465 760377179
674852722 986114580 689150077 178072729 871285336 743197063
91753835 49299308 906080284 391854488 218705020
33
34
l
i
d
2
0
8
0
0
1
4
1
c
c
u
x
.
e
e
#{itncmlaudienps(<c)rtistndaif,ob(%".Gdhr>i,mq&xea1)=f0ir,xst2=n1u,xmbeBr,A;(phi(n)");
iiBps=ffcran;((atb<<>f00a(%"))Gdim,&eb)s;;eacb{==onAAradba;;numa=bebr;b(=er;)");}
Awp{rhi1lnetf("Ar\)ta!%=0bQ);\t*\tB\t+\tR\tx1\tx2\n");
/aiq{==fpbr/r;(in!=t0f)("%d2\t=1\t%d*%\dt\t+\t%d.x\1t=.%d\%txd2\=t%d\n",aq,br,x1,x2);
x
=
*
q
+
x
;
1
x
;
e}{}lse/21*x=2*;/+x1;
/
}xip{f1r=i(xnt2;*f!=B(1")%DA*ic;Pnatndfreiachttehastii%dseb1:a"of,ixdn)%;drequa)ndosiarivadaverilrestougalea1!!*/
p{fr(x=(A"xp21r=i)n(xt2f*B(x")%\2CAta*ANBl;ec)w%muAlxa;t2=e%d"h,Aa%sd;r%edst=%d\n",x21,x);1)
A
A
A
x
;
}
l
i
f
)
O
U
H
H
!
!
t
e
s
e
n
n
p
r
(
"
\
"
;
}}{rletseurn0p;rintf("\n%disOKandsoitistheinverseof%dmod%d.\n",x2,BA);
e
}
s/euclidex.c
file:/hom
e/tansiC
APPENDICE
Sorgenti Ansi-C
Euclide Esteso
2
0
8
0
0
S
1
4
A
1
c
.
R
/***DSEirinaesaegdt3inaàues.pctfiallasneraocmoedsuindtfpeeasclatrnofmii,reslauctnordciongauttneeicrhoufinptlieeavrdoiclihgnctyaeps,vlihtnodperiautbn,lxomicteuliepalinerootl(mge,rfiamd)vliaepanentmaersslpigaeutecrriaofl.adradeutacrisodtfiraeitraucra:
l
h
i
(
d
)
t
o
r
e
c
p
a
v
v
,
.
b
i
i
d
G
2
L
L
P
L
V
T
B
c
n
a
e
n
g
a
n
o
n
a
z
y
z
.
*
/
i
n
c
#i{ntmelaundce(ii<nnstt,dnainteorg,.ich>ntc)ih;a;r*argv[])
cgpFehIraiLEnsrt*cnf,Shf(");[m3F;0*i,Dl]e,sd[i10t24es]t;odionput:");/fgets(nsf,3102,4stdin);
t
r
pi{fin((fS="DfAeaormipeutinn(en/f:dE,;"")rto;"e)=disNcaaUnpLef)r(t"%udra",&deenl);filedinput(%s)!\n",nf);
}i{f(D=feoripeutnrrnf(s11,E";wrto")re=dNiUaLpe)rturadelfiledioutput(%s)!\n",s);
i}{f(argcw=p{hri1ln)etf("Ecfnechr=oindfcti(ennfgt,c(!S%\i)dnnt"!=))Ec;OhF);
p
D
"
\
"
,
)
e}{lsewp}{hrilnetf("Dc=efecsondacinfng(eS,!m"%\)dn;"),&;m)=1)
i
f
t
%
r
c
c
p
(
"
"
,
f
h
%
c
a
r
c
;
D
"
,
(
)
}
}
f
l
c
o
s
e
;
(
S
)
D
0
t
e
n
u
r
r
}
SA.c
e/tansiC
s/R
file:/hom
SORGENTI ANSI-C
RSA.c pagina 1
35
36
2
0
8
0
0
S
1
4
A
c
.
R
i{ntenc(ifoenttrun(=n,;ii1<nctc;=ee1(ic,;+*min)%tnm;)
}
APPENDICE
2
SA.c
e/tansiC
s/R
file:/hom
Figure 3.6.1. RSA.c Pagina 2