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