Introduzione alla crittografia a chiave pubblica

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