Sei sulla pagina 1di 16

Primo passo verso la crittograa...

Dal greco kriptos = nascosto e da graphein = scrivere prende il suo nome la crittograa, ossia la scienza dei messaggi segreti sicuri, tali cio` che possano essere decifrati da precisi e destinatari. Un tempo associata ai servizi militari, alle spie, ai vari agenti 007 sparsi in tutto il mondo, oggi la crittograa ` entrata a far parte della vita quotidiana di tutti grazie e allavvento dellinformatica e della crescente potenza di calcolo dei computer. Nata come raccolta di tecniche e di sistemi per nascondere messaggi tra regnanti, imperatori, amanti, etc, la crittograa ` maturata denitivamente a rango di scienza solo nei e primi del 1900 con lavvento di nuove teorie e tecniche matematiche legate al concetto di informazione. In realt` la crittograa ha origini antichissime, basti pensare che pi` di 6000 anni fa a u si scrivevano geroglici egizi in modo non standard e ancora oggi si lavora per la loro interpretazione. Troviamo il primo esempio di messaggio cifrato nella Bibbia, in Geremia 20,25 si parla di re di Sesach, dove Sesach ` la cifratura di Babele. Il sistema usato era la sostituzione e di ogni lettera dellalfabeto con la lettera che occupa la stessa posizione nellalfabeto scritto al contrario. Questa parte sulla crittograa ` interessante perch` si occupa di argomenti molto recenti, e e alcuni (il codice RSA) di appena 26 anni fa, e in continua evoluzione. Per chiarire come questo metodo sia attuale, basta dire che la crittograa a chiave pubblica ` alla base e di tutta la comunicazione digitale, nel senso che la trasmissione delle e-mail, le comunicazioni via telefono cellulare, la televisione digitale e satellitare sono possibili perch` e il loro sistema di sicurezza si basa su codici che seguono questo schema. Per spiegare in due parole tale legame basta dire che tutto ` fondato sulla dicolt` di fattorizzare e a un prodotto di numeri primi (si parla di numeri con centinaia di cifre) con lulteriore precauzione che, dopo precisi intervalli di tempo, i numeri usati per la codica vengono modicati. Si potrebbe quasi dire che ` merito dei numeri primi se le comunicazioni sono diventate e cos` semplici e sicure!

Spolveriamo i ricordi
Per introdurre largomento riprendiamo alcuni concetti gi` noti. a Ricordiamo che un numero ` primo se e solo se ` divisibile soltanto per se stesso, per e e il suo opposto, per 1 e per -1. Sono esclusi dalla denizione di primo sia lo 0 che l1 e il -1. Viene denito quoziente (esatto) fra due numeri naturali a e b, con b = 0, quel numero naturale x (se esiste), tale che x b = a; in tal caso si scrive x = a : b. Non sempre per` il quoziente esatto esiste; ad esempio non c` alcun numero intero o e x tale che 3 = 2 x e quindi in Z non c` il quoziente esatto 3 : 2 (anche se in Q esiste il e 3 numero non intero 2 ). Anche quando il quoziente esatto non esiste, si pu` comunque eseguire una divisione o con resto. Dati due numeri naturali a e b, con b = 0, esistono sempre (e sono unici) i due numeri naturali q e r tali che: a = q b + r con la condizione 0 r < |b| Tali due numeri naturali q e r si dicono rispettivamente quoziente e resto della divisione con resto di a per b. Ricordiamo inoltre che il massimo comun divisore tra due numeri a e b ` il pi grande di e tutti i divisori comuni ad entrambi i numeri. Detto questo, provate a risolvere il seguente ESERCIZIO: calcolare il M CD(20491, 19169)

Per determinare il M CD tra due numeri a e b si pu` anche usare lALGORITMO o EUCLIDEO. Lidea di base ` molto semplice: e se a = bq + r ogni divisore comune ad a e b ` anche un divisore comune tra b e r. e Vogliamo calcolare il M CD(a, b). Se supponiamo a b > 0, si divide il maggiore dei due per laltro, ottenendo un quoziente q1 e un resto r1 , ossia a = bq1 + r1 0 r1 < b

Si divide poi b per r1 ottenendo un nuovo quoziente q2 e un nuovo resto r2 , b = r 1 q2 + r 2 0 r2 < r 1 .

Si ripete il procedimento no ad ottenere resto zero. Lultimo resto non nullo ` il M CD cercato. e Due interi tali che M CD(a, b) = 1 si dicono coprimi. Calcoliamo il M CD dellesercizio precedente con questo nuovo metodo. Esempio 1. a = 20491 e b = 19169 20491 = 19169 1 + 1322 19169 = 1322 14 + 661 1322 = 661 2 + 0 pertanto M CD(20491, 19169) = 661. Il calcolo del M CD mediante la decomposizione in fattori primi pu` sembrare cono cettualmente pi` semplice per`, quando abbiamo a che fare con numeri molto grandi, u o quel metodo pu` risultare estremamente lungo; invece con lalgoritmo euclideo i calcoli o si sveltiscono notevolmente. Quanto detto servir` concretamente pi` avanti, quando si parler` di codici di sicurezza a u a e crittograa. Esercizio 1. : trovare M CD(47011, 52333) usando lalgoritmo euclideo.

Le Classi di resto
Per denire cosa sono le classi di resto possiamo partire da un esempio pratico per poi passare a una formulazione pi` matematica. u Vogliamo risolvere il seguente Problema 1. Come faccio, se oggi ` gioved` 7 febbraio, a stabilire che giorno sar` il 26 e a febbraio? Possiamo ragionare nel seguente modo: da oggi al 26 febbraio ci sono 19 giorni 19 = 7 2 + 5 fra 14 = 7 2 giorni sar` nuovamente gioved` a 5 giorni dopo sar` marted` a E possibile ragionare anche in un altro modo: 19 = 7 3 2 fra 21 = 7 3 giorni sar` nuovamente gioved` a 2 giorni prima sar` marted` a In realt` ci` che noi chiamiamo gioved` non ` solo un giorno ma ` un insieme di tanti a o e e giorni che si ripetono a distanza di 7 giorni luno dallaltro. Immaginiamo di stabilire una sorta di giorno 0 e di numerare poi ciascun giorno successivo con un numero progressivo. Otteniamo che se ad esempio il giorno 0 ` gioved` sar` gioved` ogni giorno e , a con un numero che ` un multiplo di 7, invece sar` venerd` ogni giorno che dierisce di e a 1 da un multiplo di 7. Vediamo ora qualche denizione pi` formale. u Prima di tutto, se n ` un numero intero, indicheremo con il simbolo nZ linsieme di tutti e i suoi multipli (positivi e negativi). Ad esempio se consideriamo n = 2 avremo che 2Z ` linsieme di tutti i numeri pari. e Diremo che a e b sono congrui modulo n e scriveremo a b mod n se dieriscono per un multiplo di n, cio` se a b nZ. Da notare che due numeri sono e congrui modulo n se i resti della loro divisione per n sono uguali, cio` a b mod n se e a = n s + r e b = n t + r. Facciamo alcuni esempi di congruenze: 5 37 mod 2 perch` 5 37 = 42 che ` pari e e 4

44 12 mod 2 perch` 44 12 = 32 che ` pari e e 15 12 mod 2 perch` 15 12 = 3 che ` dispari e e La relazione di congruenza gode di molte propriet` delluguaglianza tra numeri interi. a Il simbolo ` stato introdotto dal matematico Gauss proprio per questa sua analogia e con la relazione di uguaglianza. Come abbiamo visto nellesempio della settimana, possiamo indicare con un nome collettivo tutti i numeri che dieriscono tra loro per un multiplo di n: useremo il nome classe di resto modulo n. Poich` abbiamo detto che ogni classe di resto ` caratterizzata dal comune resto della e e divisione per n, possiamo ottenere a partire da Z esattamente n classi di resto modulo n poich` i possibili resti della divisione per n sono gli interi compresi tra 0 e n 1. e Ogni classe ` solitamente indicata usando tale resto oppure un qualsiasi altro numero e della classe con una soprallineatura per distinguerlo dal numero usuale. Di conseguenza linsieme delle classi di resto modulo n ` e {0, 1, . . . , n 1} Questo insieme viene solitamente indicato con Zn . Bisogna tenere presente che numeri diversi possono individuare classi di resto uguali. Ad esempio 12 = 37 = 18 per` le loro classi modulo 5 sono uguali perch` i resti delle divisioni per 5 hanno tutti o e per resto 2. Otteniamo quindi delle uguaglianze apparentemente molto strane: 12 37 18 2 mod 5

Come ` fatto linsieme Zn? e


In Zn ` possibile denire delle operazioni di somma e prodotto ponendo e a+b=a+b ab=ab Queste operazioni sono ben denite, cio` il loro risultato non cambia se sostituiamo e ad una delle classi di resto un altro rappresentante. Possiamo provare a prendere dimestichezza con le operazioni in questi nuovi insiemi calcolando per esteso le tavole additive e moltilplicative in Zn con n = 4.

Tabella delle operazioni in Z4 + 0 1 2 3 0 0 1 2 3 1 1 2 3 0 2 2 3 0 1 3 3 0 1 2 0 1 2 3 0 0 0 0 0 1 0 1 2 3 2 0 2 0 2 3 0 3 2 1

Ora vediamo se avete capito come funziona; provate a compilare le tabelle di Z5 . Tabella delle operazioni in Z5 + 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4

Notate qualche dierenza tra le due? Osservate bene le due tabelle moltiplicative. Nella tabella di Z4 succede un fatto molto curioso... 22=0 ossia esistono due classi (non nulle) che moltiplicati tra loro danno 0. Questo ci dice che in Z4 non vale la legge di annullamento del prodotto; come mai questo non succede in Z5 ? La spiegazione ` molto semplice: in Zn otteniamo 0 quando moltiplichiamo due e classi che contengono dei divisori di n. Quindi in Z5 funziona tutto correttamente perch` 5 ` un numero primo e quindi non e e possiede divisori! Allo stesso modo anche in Z6 abbiamo dei problemi ad esempio considerando 3 2. Queste classi particolari che moltiplicate tra loro danno 0 vengono chiamate divisori dello 0.

Il cifrario di Cesare
Gi` Giulio Cesare, in unepoca in cui pochi sapevano leggere e scrivere, era solito cifrare a i messaggi. Egli usava la sostituzione, cio` ad ogni lettera dellalfabeto ne faceva e corrispondere unaltra traslata di un certo numero di posizioni. Se usiamo la chiave 3 tutte le lettere vengono scalate di 3 posizioni, quindi in corrispondenza del vecchio alfabeto troviamo il nuovo A B C D E F G H I L M N O P Q R S T U V Z U V Z A B C D E F G H I L M N O P Q R S T Questa tabella ` la chiave usata per la cifratura ed ` la stessa che viene usata per la e e decifratura; si rende quindi necessaria una precedente comunicazione tra le due parti al ne di scambiarsi questa informazione. Nella necessit` di un accordo preliminare sta una delle principali debolezze di questo e a di ogni altro metodo crittograco vecchio stile, perch` anche la comunicazione iniziale e corre il rischio di essere intercettata. Possiamo generalizzare il metodo di Cesare ricorrendo alle classi di resto, cos` da ot tenere un metodo che non solo trasli le lettere, ma che le rimescoli anche. Associamo ad ogni lettera dellalfabeto un numero da 1 a 21, o meglio una classe di resto modulo 21. Fissati poi due numeri interi a e b (i parametri di cifratura) otteniamo la lettera che sostituir` la lettera individuata dalla classe x come quella individuata da y, dove a y = ax + b In pratica basta eseguire il calcolo ax + b, dividere per 21 e prendere il resto y. Data la chiave y = 5x + 1 compilare la tabella seguente A B C D E F G H I L M N O P Q R S T U V Z

crittare questa frase del celebre matematico Karl Friederich Gauss:

DIO FA ARITMETICA

decrittare la seguente frase:

IF PFGEPFGDRF E MEIIF !

Usando ora la chiave y = 3x + 2 decrittare la parola:

SSVS

Qual ` il problema? e

Analizziamo nel dettaglio come si decritta la prima frase. I F 9 6 P F G 14 6 7 E 5 P F 14 6 G 7 D R F 4 16 6 E 5 M E 11 5 I I F 9 9 6

Da y = 5x + 1 dobbiamo trovare un c tale che 5c 1 mod 21 che ci permetta di ricavare la seguente formula x = c(y 1) che serve per tornare indietro e decrittare cos` il messaggio in codice. 5c 1 mod 21 vuol dire 5c 1 = k21 ricaviamo c = 17, infatti 5 17 1 = 84 = 4 21. Quindi per la lettera I, cio` y = 9, abbiamo e x = 17(9 1) = 136 e 136 21 10 L; per F y = 6, x = 17(6 1) = 85 e 102 21 1 A

e cos` via no alla soluzione: la matematica ` bella! e Domanda Quali formule del tipo y = ax + b vanno bene per trovare una chiave di decifratura x = cy + d? Risposta: a deve essere coprimo con 21, ossia a e 21 devono essere primi tra loro quindi il M.C.D. tra i due ` 1. e Questo perch` se a ` coprimo con 21 allora esiste un c tale che ac 1 mod 21 e si pu` e e o ricavare la seguente formula x = c(y b) che serve per tornare indietro e determinare ununica x di partenza. Questa condizione equivale a dire che per avere una buona chiave di cifratura bisogna scegliere a in modo che a abbia linverso in Z21 . Dobbiamo, per`, capire quante e quali classi di Zn ammettono un inverso, ossia quanti o e quali sono quei numeri a tali che M CD(a, n) = 1.

La funzione di Eulero
Problema: una ditta di cereali decide di inserire una sorpresa in un certo numero di scatole; si cerca per` un modo originale, ecace e non prevedibile dal pubblico con cui o distribuire i regali. Viene scelto il seguente metodo: si numerano le n scatole in ordine crescente no alla n-sima e si mette una sorpresina in ogni scatola rappresentata da un numero minore di n e relativamente primo con n stesso. Ora, la ditta che fornisce le sorprese non ha interesse a sapere quali scatole avranno il regalo, bens` quante sorpresine fornire. Se il numero di scatole ` relativamente piccolo si pu` direttamente contare quanti sono e o i regalini necessari. Per esempio: per n = 10 ho 1, 3, 7, 9 che sono numeri < 10 e relativamente primi con 10, quindi ho un totale di 4 sorprese; per n = 25 ho 1, 2, 3, 4, 6, 7, 8, 9, 11, 12, 13, 14, 16, 17, 18, 19, 21, 22, 23, 24 che soddisfano entrambe le condizioni e quindi occorrono 20 sorprese; per n = 30 ho 1, 7, 11, 13, 17, 19, 23, 29 e quindi 8 sorprese. Ma per 50 scatole? E per 100? Il calcolo diretto ` lungo e noioso ma si pu` riuscire a trovare il numero di sorprese e o necessarie. Si sa, per`, che la produzione industriale va ben oltre i 100 pezzi, quindi se siamo nel o caso di 1000 o 5000 scatole come si fa? Ci vorrebbe una formula che permetta di trovare, nel caso di n scatole, il numero di interi positivi minori di n e relativamente primi con n. Questa formula c` e la si deve allillustre matematico Leonhard Euler da cui prende e appunto il nome di funzione di Eulero e si indica con (n). Se conosciamo la fattorizzazione di n in fattori primi, c` un modo diretto e veloce per e calcolare il valore della funzione di Eulero. Come abbiamo visto contare le classi invertibili in Zn ` come contare i numeri tra 1 e e n 1 che sono coprimi con n.

10

Se n = p ` un numero primo, allora tutti i numeri tra 1 e n 1 (non essendo e divisibili per p) sono coprimi con p, quindi (p) = p 1 Per esempio: (11) = 11 1 = 10 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) Se n ` la potenza di un numero primo p, ossia n = pr , allora sono coprimi con n e tutti i numeri tra 1 e n 1 che non sono multipli di p, ossia tutti tranne i seguenti p 1, p 2,..., p pr1 . Quindi (pr ) = pr pr1 = pr1 (p 1). Meno facile da capire (ma vera!) ` la formula nel caso generale. Per calcolare il e valore di (n) per ogni intero n a partire dalla scomposizione di n nel prodotto di fattori primi pr1 pr2 ... prk , con pi primi tutti distinti, vale la seguente (n) = (pr1 pr2 ...prk ) = (pr1 ) ... (prk ) = pr1 1 (p1 1) ... prk 1 (pk 1). 1 2 1 1 k k k Per capire e accettare quanto detto calcoliamo (n) con n = 4, n = 6, n = 8, n = 36 (4) = (22 ) = 221 (2 1) = 2 1 = 2; (6) = (3)(2) = 30 (3 1) 20 (2 1) = 2 1 = 2; (8) = (23 ) = 231 (2 1) = 22 1 = 4; (36) = (9 4) = (32 22 ) = (32 3)(22 2) = 6 2 = 12. Esercizio 2. Calcolare (100) = (528) = (121) = (297) = (700) =

11

Possiamo a questo punto enunciare un importantissimo risultato che ` il e

Teorema di Eulero:
Siano a, n interi positivi primi tra loro. Allora: a(n) 1 mod n.

E bene osservare come tale teorema possa risolvere questioni del tipo: dire qual ` lultima cifra del numero 32782 e Intanto osserviamo che calcolare la cifra delle unit` di un numero equivale a calcolare il a resto della sua divisione per 10, ossia il numero x compreso tra 0 e 9 tale che x = 32782 . Si procede per passi, ricordando che 327 7 mod 10 quindi sar` suciente calcolare a 82 7 in Z10 . Ora, per il teorema di Eulero con a = 7 e n = 10 ho che 7(10) = 74 1 mod 10 quindi 7
82

=7

80+2

= (7 )20 7 = 1 72 = 1 49 = 49

20

perci` la cifra nale di 32782 ` 9. o e Provate voi a risolvere il seguente Esercizio 3. Trovare la cifra nale di 1875 .

Se per esempio si cercano le ultime due cifre di 3950 si procede come negli esercizi precedenti, facendo uso del teorema di Eulero nel seguente modo a(100) 1 mod 100. (100) = (25 4) = (52 22 ) = 5(5 1)2(2 1) = 40 12

dunque 340 1 mod 100 3


950

=3

2340+30

= (3 )23 3

40

30

= 1 (3 )3 = 49 = 49

10

Esercizio 4. Calcolare le ultime due cifre di 9201 .

13

Il codice RSA
Il problema dello scambio della chiave segreta viene eliminato introducendo una seconda chiave. In pratica si usa una chiave per le operazioni di cifratura e ed unaltra per le operazioni di decifratura, la chiave utilizzata per cifrare un messaggio viene resa pubblica e da questo si ha il nome crittograa a chiave pubblica. La prima applicazione pratica basata sulle tecniche di crittograa a doppia chiave fu sviluppata nel 1978 da tre professori: Ronald Rivest, Adi Shamir e Leonard Adleman, che realizzarono una procedura di calcoli matematici che prender il nome di algoritmo RSA, dalle iniziali dei suoi inventori. Il codice RSA si basa su di un procedimento che utilizza i numeri primi e le funzioni matematiche che sono quasi impossibile invertire. Dati due numeri primi, anche grandi, ` molto facile calcolare il loro prodotto, mentre ` molto pi` dicile determinarela fate e u torizzazione in primi di un numero, se molto grande. In questo modo si garantisce quel principio di sicurezza alla base della crittograa a chiave pubblica infatti loperazione di derivare la chiave segreta da quella pubblica ` troppo complessa per venire eseguita in e pratica. Il codice RSA viene considerato sicuro perch`, essendo la formula di decifrazione basata e su (n) calcolabile solo se a conoscenza della fattorizzazione di n , non esiste un algoritmo eciente per scomporre n nei suoi fattori primi p e q in tempi brevi. Nel corso degli anni esso ha dimostrato pi` volte la sua robustezza: in un esperimento del u 1994 per rompere una chiave RSA di 129 cifre, svelando il meccanismo con cui quella chiave generava messaggi crittografati, sono stati necessari 8 mesi di lavoro coordinato eettuato da 600 gruppi di ricerca sparsi in 25 paesi, che hanno messo a disposizione 1600 macchine da calcolo, facendole lavorare in parallelo collegate tra loro attraverso Internet!

Come funziona?
Ci si accorda (pubblicamente!) su come trasformare i messaggi in sequenze di numeri ciascuno di lunghezza pressata: sia m uno di questi numeri. Preparazione Il destinatario del messaggio prepara la chiave di decifrazione nel modo seguente: Costruisce un numero n moltiplicando due numeri primi p e q abbastanza grandi in modo che p e q siano sicuramente maggiori di m (e tra laltro il resto della divisione per n di ogni numero m congruo a m modulo n sia m stesso). Poich` sa e che n = pq, egli pu` facilmente calcolare la funzione di Eulero o (n) = (p 1)(q 1) 14

Sceglie inoltre un altro numero h coprimo con (n)e calcola linverso d di h in Z(n) ossia calcola d tale che hd = 1 + k(n). Inne rende pubblici i due numeri n e h, mentre mantiene il pi` assoluto segreto u sulla fattorizzazione n = pq, sul valore di (n) e su d. Come crittare il messaggio Il mittente adopera queste informazioni, ossia n e h, per crittografare il messaggio m nel modo seguente: Calcola la potenza mh e la divide per n ottenendo un resto c; comunica (pubblicamente) al destinatario il numero c che ` il messaggio cifrato. La relazione tra il messaggio e originale e la sua cifratura ` dato da: e c mh mod n ovvero c = mh in Zn Come decrittare il messaggio Il destinatario decodica il messaggio con laiuto del numero d calcolando la potenza d-esima di c e dividendola per n. Il resto della divisione ` proprio il messaggio originale. e Si ha infatti: cd = mhd = m1+k(n) = m (mk )(n) = m 1 = m Come si pu` vedere nellultimo passaggio la validit` del Teorema di Eulero sta alla o a base di questa procedura. Infatti ` grazie a questo risultato che possiamo aermare che e k (n) = 1. Notiamo che le ipotesi del teorema possono essere facilmente soddisfatte, (m ) operando se necessario piccole modiche sul messaggio iniziale m in modo da renderlo coprimo con (n). Proviamo ora a considerare un piccolo esempio per vedere praticamente come funziona questo metodo, anche se per poter fare i conti a mano sar necessaria un po di fantasia... Esempio 2. Eseguiamo una simulazione di codica e decodica di un messaggio mediante RSA. Il destinatario del messaggio, chiamiamola Francesca, ha scelto i due numeri primi 5 ed 11 e li ha moltiplicati ottenendo 55. Perch` questa simulazione con numeri e cos` piccoli abbia senso dobbiamo ngere che nessuno (a parte Francesca) sia in grado di calcolare in tempi brevi la fattorizzazione di 55. Francesca ha calcolato (55) = (5 1) (11 1) = 40, ha scelto h = 3 coprimo con 40 e ha determinato (mediante lalgoritmo euclideo) un numero d tale che dh 1 mod 40, ottenendo d = 27 (poich` 3 27 = 1 + 2 40). e Francesca comunica poi pubblicamente, a tutti coloro che vogliono scriverle in modo riservato, i due numeri n = 55 e h = 3. Paolo vuole mandarle il messaggio m = 7: calcola : mh = 73 = 343, lo divide per 55 e ottiene il resto c = 13 che spedisce a Francesca. Nessuno ` in grado di decodicare il e messaggio c = 13 tranne Francesca che possiede la chiave di decodicazione d = 27. Francesca calcola allora 1327 e quindi divide per 55 ottenendo il resto 7 che ` il messaggio e 15

in chiaro. Si noti che Francesca non deve necessariamente calcolare per intero la potenza 13 prima di eseguire la divisione per 55, ma pu` lavorare nelle classi di resto o Z55 nel modo seguente: 13
27

= (13 )9 = 52 = 3 = 19683 = 48 = 7

Come fare quando i numeri diventano pi` grandi? Possiamo ad esempio utilizzare u un software molto utile, Maple.

Esercizio con Maple


Per prima cosa calcoliamo due numeri primi. Sia p il 100 numero primo p := ithprime(100); Sia q il 109 numero primo q := ithprime(109); Calcoliamo il prodotto tra p e q n := p q; Troviamo quanto vale la funzione di Eulero di n phi(n); Poniamo h = 131 h := 131; Verichiamo che (n) e h sono coprimi, calcolando il massimo comun divisore gcd(phi(n), h); Calcoliamo linverso di h d := (h)(1) mod phi(n); Prendendo ad esempio il messaggio in chiaro m = 16 trasformiamolo nel messaggio cifrato c c := 16h mod n; Per decifrare il messaggio ` suciente calcolare la classe m = cd mod n e cd mod n;

16