Introduzione alla crittografia a chiave pubblica 1. Classi di resto Per ogni intero n > 1, introduciamo un nuovo insieme di numeri interi, denotato Zn così costituito. Sia r un intero e si denoti con r l’insieme di tutti i numeri m che differiscono da r per un multiplo di n. Diremo che m è congruo a r modulo n, e scriveremo: m = r modulo n. Ciò significa soltanto che esiste un intero h tale che si abbia: m ! r = hn . Se ad esempio n = 3, saranno definiti gli insiemi: 0 = {0,3, !3, 6, !6,...} 1 = {1, 4, !2, 7, !5,...} 2 = {2,5, !1,8,...} 3 = {3, 6, 0, !3, !6,...} 4 = {4, 7,1, !2,...} ................ ..... Si noti che 0 = 3 , 1 = 4 , 2 = 5 ,.... ; cioè i nuovi insiemi sono soltanto 3: 0 = {0,3, !3, 6, !6,...} 1 = {1, 4, !2, 7, !5,...} 2 = {2,5, !1,8,...} Inoltre i tre insiemi sono a due a due disgiunti, cioè privi di elementi comuni e ogni numero intero appartiene a uno (e quindi uno solo) dei tre insiemi. Questi fatti sono veri in generale quando n sia un intero qualsiasi, cioè gli unici insiemi, n in totale, che abbiamo in realtà introdotti sono i seguenti: 0 = {0, n, !n, 2n, !2n,...} 1 = {1,1 + n,1 ! n,...} 2 = {2, 2 + n, 2, !n,...} ...... _______ n ! 1 = {n ! 1, n ! 1 + n, n ! 1 ! n,...} e ogni numero intero appartiene a uno e uno solo di tali insiemi. E’ in effetti facile vedere che si ha: 0 = n = 2n = .... , 1 = n + 1 = .... , !1 = n ! 1, ..... . Per capire questo fatto basta osservare che il numero m e il resto r della sua divisione per n appartengono allo stesso insieme: se m = qn+r allora m = r . Inoltre si osservi che, se il numero m appartiene all’insieme r e anche all’insieme r , con r ≠ s entrambi compresi fra 0 e n ! 1 , allora si ha contemporaneamente: 1 m = qn+r, m = tn+s e quindi la divisione di m per n ha due resti diversi, il che è assurdo. _ _ _____ Nell’insieme Zn ={ 0,1,...,n "1 } introduciamo le seguenti operazioni: _ _ ______ a+ b = a + b _ _ ____ ab =! ab Ciò significa ad esempio, se n = 4: 2!3 = 6 = 2 3!3 = 9 = 1 2+3 = 5 =1 3+3 = 6 = 2 Le operazioni sono ben definite, cioè ad ogni coppia di elementi è associato un solo elemento dello stesso insieme, loro somma ovvero loro prodotto. In effetti, se a = a ' , b = b ' , si ha: _ _ ______ a+ b = a + b _ _ ____ a b = ab ma anche a ' + b ' = a '+ b ' a 'b ' = a 'b ' e quindi occorre far vedere che si ha: a + b = a '+ b ' ab = a ' b ' Queste proprietà si dimostrano facilmente se si osserva che i resti della divisione di a e di a ' per n coincidono, e lo stesso vale per b e b ' . Le due operazioni soddisfano alle principali proprietà delle operazioni fra numeri. Le proprietà associativa, commutativa, distributiva sono molto semplici da verificare, l’insieme 0 sommato con ogni altro lo lascia invariato (e quindi si comporta come il numero 0), l’insieme 1 moltiplicato per ogni altro lo lascia invariato (e quindi si comporta come il numero 1), l’opposto di m è !m (ad esempio l’opposto di 3 in Z5 è !3 = 2 . Occorre però osservare che in generale non vale la legge di annullamento del prodotto. Ad esempio _ _ 2 " 2 = 4 # 0 mentre 2 ! 2 = 4 = 0 in Z4 (e 2 ! 0 2 " 0 ). ! 1.1 Inversa di una classe di resto. ! Abbiamo detto che la classe 1 , moltiplicata per ogni altra, la lascia invariata e si comporta quindi come il numero 1. Un elemento di Zn può quindi ammettere o no inverso. Ad esempio in Z5 la classe 3 è invertibile e ammette come inversa 2 , in quanto si ha: 2 ! 3 = 1 . Si provi invece che la classe 2 in Z4 non ammette inversa. Se n è un numero primo ogni elemento non nullo ammette inverso. In effetti, sia a una classe di resto non nulla; ciò significa che un suo rappresentante a , che possiamo supporre essere un numero 2 ! compreso fra 1 e n ! 1 , non è multiplo del numero primo n. Se con il procedimento delle divisioni successive cerchiamo il massimo comun divisore fra n ed a, otteniamo: n = h1a + r1 a = h2 r1 + r2 r2 = h3 r2 + r3 ............... fino a trovare un resto che è il massimo comun divisore 1. Si ha cioè per un certo indice i: ri !1 = hi ri + 1 . Supponiamo per semplicità che si abbia i = 3. Allora si ottiene: r2 = h3 r3 + 1 r2 ! h3 r3 = 1 a ! h2 r1 ! h3 (r1 ! h2 r2 ) = 1 a ! (h3 + h2 )(n ! h1a ) = 1 (1 + h1 (h3 + h2 ))a + (h3 + h2 )n = 1 sa + tn = 1 con s e t numeri interi opportuni. E’ facile vedere che lo stesso risultato si ottiene anche se il numero di divisioni successive è qualsiasi. Ma l’eguaglianza sa+tn = 1 equivale all’eguaglianza s ! a = 1 , cioè al fatto che a sia invertibile. Se invece n non è un numero primo ci sono classi non nulle che non hanno inversa. Ad esempio, se n = 15 = 3 x 5, si può vedere direttamente che le classi di 3 e di 5 non hanno inversa. Si può dimostrare, con lo stesso procedimento seguito per n primo, che la classe del numero a è invertibile modulo n qualsiasi se e soltanto se a ed n non hanno fattori primi comuni (salvo 1). 2. Il Piccolo Teorema di Fermat (dovuto al matematico francese Pierre Fermat – 1601-1665) Siano p un numero primo e a un qualsiasi numero intero non multiplo di p. Il Piccolo Teorema di Fermat afferma quanto segue: a p !1 = 1 modulo p . In altre parole a p !1 ! 1 è un multiplo di p. Esempio: 310 = 1 modulo 11. In effetti si ha (modulo 11): ! ! ! ! 310 = 95 = 9 ! 812 = 9 ! 42 = 9 !16 = 9 ! 5 = 45 = 1 . La dimostrazione si basa sul seguente ragionamento. Consideriamo i numeri interi a "1,a " 2,...,a "( p #1). Non è difficile vedere che si tratta di p numeri interi non solo diversi fra loro, ma anche non congrui modulo p a due a due. Supponiamo infatti per assurdo che esistano tre numeri interi i, j, h tali che axi " axj = hp . Possiamo supporre che si abbia j < i e riscrivere l’eguaglianza nella forma a(i " j) = hp . Siccome il numero intero a non è un multiplo di p e p è primo, i ! j deve essere multiplo di p. Ma i ! j è un intero differenza di due interi compresi fra 1 e p ! 1 , quindi è anch’esso un intero compreso fra 1 e p ! 1 , dunque non può essere un multiplo di p. Ma se a(i " j) = hp , uno dei due fattori, a ovvero i ! j , deve essere multiplo di p. Quindi siamo arrivati ad un assurdo, i numeri i,j,h non possono esistere. Poiché i numeri a "1,a " 2,...,a "( p #1) non sono a due a due congrui modulo p, le loro classi modulo p sono tutte distinte; trattandosi di p numeri tutti non multipli di p, le loro classi sono esattamente le ! 3 classi di equivalenza dei numeri 1, 2,..... p ! 1 , scritte eventualmente in un ordine diverso da quello naturale. Moltiplicando i numeri fra loro si ottiene quindi la seguente eguaglianza: 1" 2 " ..."( p #1) = (a "1) "(a " 2) "..." a "( p #1) modulo p. Cioè si ha: 1" 2 " ..."( p #1) = 1" 2 "..."( p #1)a p#1 modulo p ! ! p !1 ovvero 1 " 2......( p ! 1) = 1 " 2......( p ! 1) " a Ma 1 ! 2......( p " 1) è invertibile, perché è la classe di un numero intero non multiplo di p; quindi si ottiene, semplificando (cioè moltiplicando per l’inversa della classe): 1 = a p !1 modulo p . Applicazione. Si calcoli 475 modulo 5 . Si osservi che il calcolo si può eseguire senza il teorema di Fermat come segue: 475 = 1637 ! 4 modulo 5=137 ! 4 modulo 5=4 . Con il teorema di Fermat si può osservare che 75 = 4 !18 + 3 e quindi 475 modulo 5=(44 )18 ! 43 modulo 5=118 ! 42 ! 4 modulo 5=16 ! 4 modulo 5=1! 4=4 . 3. Il teorema di Eulero. Il Piccolo Teorema di Fermat si può estendere a una situazione più generale. Invece di considerare un numero primo p consideriamo un numero n = p " q , prodotto di due primi distinti fra loro p e q > p . Allora, se l’intero a non ha fattori comuni né con p né con q, si ha: a ( p !1)( q !1) = 1 modulo n = p " q ! ! ! ! ! a(p-1)(q-1) = 1 modulo n = p " q . Questo teorema, che si potrebbe enunciare in forma ancora più generale, è dovuto al matematico svizzero Euler (in Italia noto come Eulero, 1707-1783). Per dimostrarlo ! occorre qualche considerazione preliminare. Se p è un numero primo, i p ! 1 numeri interi compresi fra 1 e p ! 1 sono tutti primi con p, cioè privi di fattori comuni con p, a parte 1 stesso. Se invece n = p " q è il prodotto di due primi p e q > p , ci sono esattamente ( p ! 1)(q ! 1) numeri interi compresi fra 1 e p " q che sono primi con p " q , cioè hanno in comune con esso solo il numero stesso e 1. Come si possono contare? Se un numero m tale che 1 ! m < p " q è primo con p " q , ! allora non contiene né il fattore p, né il fattore q, che sono gli unici due fattori primi possibili di p " q . Vanno quindi ! scartati tutti i numeri minori di p " q che contengono o il fattore p o il fattore q (non entrambi perché si tratta di numeri minori di p " q ). Fra questi ci sono i numeri ! p "1, p " 2,..., p " (q #1) e q "1,q " 2,...,q "( p #1) e ovviamente non ce ne sono altri. Si tratta inoltre di numeri tutti distinti, in quanto p "i , con i < q è di certo diverso da ! un multiplo q " j di q, in quanto p e q non hanno fattori comuni e i non può avere fattori comuni con p " q #1 di numeri q. Quindi dal numero totale ! ! minori di p " q dobbiamo togliere q ! 1 + p ! 1 numeri, ottenendo: p " q # p # q +1 = ( p #1)(q #1) , che!è il numero di interi minori di p " q primi con p "!q . Il numero di interi minori di un numero n e privi di ! ! fattori diversi da 1 comuni con n si chiama indicatore!di Eulero di n e si indica con il simbolo ! (n) . Abbiamo quindi!provato che si ha: !( p) = p " 1 ! ( p # q ) = ( p " 1)(q " 1) Naturalmente non sarebbe difficile trovare una formula generale per l’indicatore di Eulero di un qualsiasi numero intero n. Lasciamo questo calcolo al lettore. Usando la nostra nuova notazione, possiamo affermare che si ha (Teorema di Eulero): 4 a "( p#q) = 1 modulo p " q . ! La dimostrazione è a questo punto simile a quella del teorema di Fermat precedente. Consideriamo in effetti i ! ( p " q ) = ( p # 1)(q # 1) numeri che sono invertibili modulo p " q , e chiamiamoli m1 , m2 ,...., !m! . Moltiplichiamoli quindi successivamente per a: a " m1 ,...,a " m# . ! E’ facile vedere, usando il fatto che a non ha fattori comuni con p " q! , che sono distinti e che a due a due non sono congrui modulo p " q . Quindi le loro classi di equivalenza modulo p " q coincidono con le classi di equivalenza invertibili modulo p " q . Otteniamo pertanto l’eguaglianza m1 """ m# = a " m1 " "" a " m# = a # " m1 """ m# modulo p " q ! ovvero ! ! (a ! " 1)(m1 ### mq ) = multiplo di p # q . ! ! ! Siccome m1 """ m# non ha fattori comuni con p " q , occorre che si abbia a ! " 1 = 0 modulo p # q . Si può notare che il teorema di Fermat e quello di Eulero si possono presentare in una forma leggermente diversa: se a è un numero qualsiasi, allora a k"( p#q)+1 = a modulo p " q (ovvero kp che esiste un modo per ottenere il numero a come opportuna !a = a modulo p ). Ciò significa ! potenza di a, purché si ragioni modulo p " q o modulo p. Se poi si sceglie a < n, mediante tale potenza, calcolata modulo p, o modulo p " q , si può ! riottenere esattamente !a, che è l’unico intero congruo ad a modulo p, o modulo p " q , e minore di n. ! Esempio. ! 2 211 modulo 11 = 2 ! (25 )! modulo 11 =2 ! 322 modulo 11=2 !100 modulo 11=2 modulo 11 . Attenzione a scegliere un numero minore 5 7 modulo 5=32 modulo 5=2 modulo 5 , ma 7 ! 2 . di n. Ad esempio si ha: La proprietà a k"( p#q)+1 = a modulo p " q (ovvero a kp = a modulo p) vale anche quando a e p " q (ovvero a e p) non sono privi di fattori comuni. Nel caso del Piccolo Teorema di Fermat la cosa è ovvia: se a e p non sono privi di fattori comuni, a deve essere o 1 o un multiplo di p, e si ha : 1p =!1 ! ! (hp ) p = 0 p = 0 (tutto ovviamente modulo p). Nel caso di n = p " q , la proprietà è di dimostrazione meno banale. Sia a un numero che ha fattori comuni con p " q , quindi a = 1, oppure a = hp, a = sq o infine a = l " p " q . Se a = 1, oppure a = l " p " q , il ragionamento precedente funziona. ! Sia ora!ad esempio a = hp e si consideri quindi (hp ) k ! ( p"q ) +1 = (hp ) k ( p #1)( q #1) +1 = 0 modulo p. ! Quindi: kk ( q !1) p !1 ! p !1 (hp )((hp ) ) = (hp )(1) = hp modulo q , per il Piccolo Teorema di Fermat applicato al primo q. Ma allora (hp ) k ! ( p"q ) +1 = hp modulo p e anche modulo q, cioè la differenza (hp ) k ! ( p"q ) +1 # hp è un multiplo sia di p sia di q, e quindi anche del loro prodotto. In conclusione (hp ) k ! ( p"q ) +1 = hp modulo p " q . ! 5 4. Crittografia a chiave pubblica Supponiamo di avere un messaggio scritto in lettere. Siccome oltre alle lettere minuscole che si usano nella lingua italiana ci sono anche lettere come ad esempio x,y,w e tutte le maiuscole ed inoltre occorrono gli spazi fra le parole, la punteggiatura, ecc., occorreranno ben più delle nostre 21 lettere. Si tratta di un numero non meglio precisato N di simboli, ma si può ragionevolmente pensare che N = 256 copra abbondantemente tutte le esigenze. Allora possiamo far corrispondere a ogni lettera, spaziatura, segno di punteggiatura, ecc. un intero compreso fra 0 e N ! 1 = 255 . La corrispondenza, usata da tutti i computer, si chiama “codice ASCII”, ed è riportata nel successivo cap. 7. Ad esempio si vede che alla lettera “a” corrisponde il numero 97, alla lettera “b” il numero 98, ecc. Quindi un messaggio in lettere può essere tradotto facilmente in una successione di numeri interi compresi fra 0 e N ! 1 = 255 . Se viceversa abbiamo una successione di numeri interi, e conosciamo la corrispondenza lettere-numeri, possiamo tornare alle lettere facilmente. Ha quindi perfettamente senso occuparci di messaggi che sono successioni di numeri compresi fra 0 e N ! 1 = 255 . Ci sono molti modi di mascherare un messaggio. Ad esempio un modo è basato sull’uso delle matrici, ma questo modo, valido prima dell’avvento dei computer, è oggi obsoleto, perché con l’uso di un computer è possibile decodificarlo molto facilmente e in fretta. Ma, oltre al requisito di essere difficilmente decifrabile da terzi, ne esiste anche un secondo che, almeno per certi scambi di messaggi, è utile sia posseduto da un sistema di codifica. Talvolta le persone, o gli enti, che si scambiano messaggi, sono moltissimi e non possono comunicare direttamente per scambiarsi le chiavi di codifica e decodifica. E’ allora possibile rendere pubbliche, magari in una specie di guida telefonica, le chiavi di codifica di coloro che partecipano allo scambio di messaggi? Naturalmente ciò deve avvenire in modo che una terza persona non riesca lo stesso a decodificare. Un sistema di questo tipo si chiama “a chiave pubblica”. Un primo tentativo di rendere più difficile la decodificazione è basato sul Piccolo Teorema di Fermat. Precisamente, se A deve ricevere messaggi, fissa un numero primo p, che rende pubblico. A fissa poi un secondo numero e compreso fra 1 e p ! 1 ; la chiave pubblica per codificare sarà per A la copia ( p, e) . Chi deve inviare un messaggio ad A trasforma ogni numero m del suo messaggio mediante la seguente formula: m ---> me modulo N. Chi riceve il messaggio può ritrovare m facilmente: basta che si procuri il numero d tale che ed = 1 modulo p ! 1 . In effetti si avrà: (me ) d = med = m modulo p per il Piccolo Teorema di Fermat. Bisogna naturalmente fare attenzione a un particolare: occorre che si abbia m < N ≤ p. In questo caso un numero m < N potrà in effetti essere pensato come una classe di resto modulo p. Tuttavia il problema della crittografia resta quello di poter comunicare in segreto senza che una terza persona possa leggere i messaggi in chiaro. Se una terza persona sa che la chiave di A è ( p, e) , basta che riesca a trovare il numero d tale ed = 1 modulo p ! 1 e che conosca il Piccolo Teorema di Fermat. Si tratta di due informazioni facili da reperire; la seconda in particolare si ottiene in pochissimo tempo anche se p è molto grande, basta usare un computer. Il punto è che, fissati p ed e, basta percorrere tutti i prodotti ed fino a trovarne uno che sia congruo a 1 modulo p ! 1 . La cosa diventa molto più complicata, anche per un computer, se si usa il Teorema di Eulero. Se in effetti A sceglie un numero n = p " q , prodotto di due primi distinti, e un numero e invertibile modulo ( p ! 1)(q ! 1) , la ricerca di d tale che ed = 1 modulo ( p ! 1)(q ! 1) diventa estremamente difficile se non si conoscono i due numeri p e q. La chiave pubblica di A sarà quindi ( p " q , e) e chi gli manda il messaggio m!(< p " q ) lo trasforma in me. Solo A sarà in grado di ritrovare m come med, sempreché l’informatica non migliori sensibilmente e non si costruiscano computer capaci di trovare i due fattori di p " q , anche in presenza di numeri con molte decine di cifre. ! ! ! 6 5. Chiave pubblica RSA (dalle iniziali dei tre inventori Rivest, Shamir, Adleman) Vediamo ora l’elenco delle operazioni necessarie a inviare un messaggio in codice secondo il metodo a chiave pubblica detto RSA. Passo 1. Tutti coloro che sono interessati a scambiarsi messaggi in codice e che chiameremo brevemente X, Y, Z, ... scelgono la propria chiave pubblica. Per l’utente che chiameremo X, la chiave pubblica KX è una coppia di numeri (nX,eX), dove nX = pX ! qX è il prodotto di due primi distinti, mentre eX è un qualsiasi intero compreso fra 0 e ! (nX ) , primo con ! (nX ) stesso. Occorre scegliere nX > 255, per ragioni che saranno chiare ai passi 3, 4 e 6. La chiave pubblica KX viene inserita in un pubblico elenco, accessibile a chiunque. Passo 2. L’utente X sceglie la propria chiave privata LX, costituita anch’essa da due numeri interi; il primo è lo stesso nX, il secondo è dX = intero compreso fra 0 e ! (nX ) inverso di eX modulo ! (nX ) . Quindi si dovrà avere: eX ! d X = 1 mod ulo " (nX ) . La chiave privata LX = (nX,dX) rimane segreta, a conoscenza del solo X. Passo 3. Sia ora Y un utente che vuole inviare un messaggio mY a X, e che dispone quindi della chiave pubblica KX e anche delle sue chiavi pubblica e privata KY e LY. Il messaggio mY sarà formata da lettere, segni di interpunzione, spazi,...; ognuno di tali simboli ha come corrispondente un numero compreso fra 0 e 255 nel codice ASCII (si veda il cap. 7). Quindi il messaggio viene trasformato in una successione SY di numeri interi compresi fra 0 e 255. Passo 4. Y deve cifrare il messaggio; a questo scopo sostituisce ogni numero r della successione SY con il numero r eX mod ulo nX e trasmette a X la nuova successione di numeri. Passo 5. Y deve firmare il messaggio, cioè deve aggiungere al suo messaggio un secondo messaggio che serva a garantire a X che il messaggio proviene proprio da Y. A questo scopo traduce le lettere del proprio nome in codice ASCII, ottenendo una nuova successione FY di numeri compresi fra 0 e 255. Se nY < nX Y trasforma ogni numero r della successione nel numero s = r dY modulo nY e quindi trasforma s, che è un intero minore di nY < nX, nel numero s eX modulo nX . Se invece nY > nX , le trasformazioni successive sono: r --> s = s = r eX modulo nX , s --> s dY modulo nY . In ogni caso Y invia a X la successione di numeri così trasformati. Passo 6. X trasforma ogni numero r eX modulo nX del messaggio (esclusa la firma) mediante la sua chiave privata, ottenendo il numero (r eX ) dX modulo nX = r1+ h! ( nX ) modulo nX = r modulo nX grazie al teorema di Eulero. La nuova successione di numeri, interpretati come codici ASCII, dà il messaggio originale in chiaro. Si noti che è necessario avere 255 < nX. Se questa condizione non è verificata, si passa dal numero r < 255 al numero (r eX ) dX modulo nX = r1+ h! ( nX ) modulo nX , che potrebbe essere diverso da r modulo 255. Ad esempio, con nX = 15, si ha: (163)3 modulo 15 = 1 modulo 15 ≠ 16. Passo 7. X legge la firma di Y. Se ad esempio nY < nX ,, X riceve come firma la successione di numeri (r dY )eX . Allora eleverà il risultato a dX (a lui noto perché è la sua chiave privata) e poi a eY 7 (noto perché è la chiave pubblica di Y). Per il solito teorema di Eulero ritrova r e quindi la firma di Y, applicando i soliti codici ASCII. 6. Istruzioni per l’uso del programma CCP (Crittografia a Chiave Pubblica-RSA) 6.1 Premessa Il programma è fornito sotto forma di alcune macro di EXCEL. Per usarlo si deve anzitutto aprire il file EXCEL di nome CCP.XLS. A questo scopo occorre preliminarmente impostare, se non lo è già, il livello di protezione di EXCEL a “medio”. Per questo si deve scegliere, nel menu di EXCEL: • “Strumenti”->”Opzioni”->”Protezione”->”Medio” (anche “Basso” consente di aprire le macro, ma è pericoloso) Aprendo il file si riceve la richiesta di abilitare o no le macro, e bisogna attivarle. A questo punto compare il normale foglio EXCEL, che contiene già dei dati dimostrativi. 6.2 Scelta delle chiavi Questa è la prima azione richiesta ad ogni utente del sistema nella sua qualità di ricevente; essa può essere fatta una tantum, o ripetuta quando si vogliono cambiare le chiavi. I comandi sono: • “Strumenti”->”Macro”->”Macro”, che fa comparire la lista delle macro presenti, in ordine alfabetico (ma non operativo): o codifica o decodifica o genera_chiavi • doppio clic su “genera_chiavi”; verrà richiesto un numero positivo, che l’utente deve scegliere e confermare con “OK”; poi viene richiesto di inserire il proprio nome (una stringa qualsiasi di caratteri, usata per la firma); il programma risponderà mettendo la chiave pubblica dell’utente nelle caselle B6,C6 , la chiave privata nelle caselle B7,C7 , e il nome nella casella B4 • se si ricevono segnalazioni di numeri troppo grandi o troppo piccoli, occorre ripartire assegnando un numero rispettivamente più piccolo o più grande. La chiave privata rimane segreta, a conoscenza solo dell’utente che l’ha generata; la chiave pubblica e il nome vengono comunicati a chiunque desideri conoscerli. Ovviamente se si rigenerano le chiavi, occorre ricomunicare la nuova chiave pubblica. 6.3 Codifica di una frase Questa è l’azione che compie chi intende inviare un messaggio, decifrabile solo dal ricevente. Per codificare un messaggio destinato ad un dato utente di cui si conosce la chiave pubblica occorre anzitutto inserire la chiave pubblica del ricevente nelle caselle B14,C14, e la frase da codificare nella casella B15, poi dare i comandi: • “Strumenti”->”Macro”->”Macro”, che fa comparire la lista delle macro presenti, in ordine alfabetico (ma non operativo): o codifica o decodifica o genera_chiavi • Doppio clic su “codifica”; il programma chiede conferma dell’avvenuto inserimento della chiave pubblica del ricevente nelle caselle B14,C14; se è stato fatto si continua con “OK”, altrimenti occorre fermare il programma, farlo e ricominciare l’esecuzione della macro “codifica”; di seguito il programma chiede conferma dell’avvenuto inserimento del 8 messaggio da codificare nella casella B15; se è stato fatto si continua con “OK”, altrimenti occorre fermare il programma, farlo e ricominciare l’esecuzione della macro “codifica”. Il programma produce: • La successione dei valori cifrati corrispondenti ai caratteri inseriti, nelle caselle A18,B18,C18,…..chiusa convenzionalmente dal simbolo “$”; si continua fino alla massima lunghezza di una riga EXCEL • La successione dei valori cifrati corrispondenti alla firma dell’inviante, nelle caselle A21,B21,C21,…..chiusa convenzionalmente dal simbolo “$”; si continua fino alla massima lunghezza di una riga EXCEL Chi invia il messaggio deve spedire al ricevente la successione dei valori cifrati, presa dalle caselle A18,B18,C18,….., e la successione della firma cifrata, presa dalle caselle A21,B21,C21,….. 6.4 Decodifica Questa è l’azione che compie chi riceve un messaggio, codificato con la sua chiave pubblica, e completo di firma dell’inviante Occorre anzitutto inserire • La chiave pubblica dell’inviante nelle caselle B27,C27 • la successione dei valori cifrati ricevuti nelle caselle A29,B29,C29, … chiudendo convenzionalmente con il simbolo “$” • la successione dei valori cifrati corrispondenti alla firma nelle caselle A32,B32,C32, … chiudendo convenzionalmente con il simbolo “$” Fatto questo, si danno il comando “Strumenti”->”Macro”->”Macro”, che fa comparire la lista delle macro presenti, in ordine alfabetico (ma non operativo): o codifica o decodifica o genera_chiavi Si fa doppio clic su “decodifica”; il programma chiede conferma dell’inserimento di tutti i dati richiesti; se è stato fatto si continua con “OK”, altrimenti occorre farlo e ricominciare l’esecuzione della macro “decodifica”. Il programma scrive la frase decifrata nella casella B34, e la firma decifrata nella casella B35. 9 7. Tabella dei codici ASCII La tabella che segue riporta i codici numerici (da 0 a 255) e i caratteri ad essi assegnati. Si vedono le normali lettere dell’alfabeto, maiuscole e minuscole, e vari simboli speciali. 8. Proposta per i docenti. Questa proposta è rivolta a docenti e studenti di scuole secondarie superiori. Gli autori suggeriscono di procedere nel modo seguente. 10 L’insegnante dedica due o tre ore in classe alla teoria delle classi di resto, al Piccolo Teorema di Fermat e al teorema di Eulero, per arrivare quindi alla crittografia a chiave pubblica RSA. Quindi potrebbe portare la classe nell’aula informatica attrezzata con computer e internet, invitando gli studenti a scambiarsi messaggi in codice. L’elenco delle chiavi pubbliche di ciascuno potrebbe essere appeso sulla porta dell’aula. 11