Capitolo 1
4
rappresentato per molti secoli un'arma determinante nelle mani di coloro
che sapevano come usarla. Tuttavia la crittografia poteva rivelarsi un
arma a doppio taglio nel caso in cui un addetto alla codifica cadeva nelle
mani del nemico o se il nemico riusciva a forzare i cifrati: se ciò accadeva
era necessaria un’immediata modifica del metodo crittografico e questo
richiedeva, tra l'altro, il riaddestramento di un gran numero di persone.
Peggio ancora, quando il nemico è così furbo da mantenere segreta la
forzatura così da poter facilmente conoscere le informazioni più riservate
dell’avversario senza che quest’ultimo sospetti nulla
1
.
Comunque non si pensi che la crittografia sia una pratica attuata soltanto
negli ultimi secoli; in realtà è stata una pratica nota sin da tempi remoti.
Criptare è una parola che viene dal greco "cryptos" -nascosto-; si ha
traccia di applicazioni della crittografia (in special modo sulle
comunicazioni) risalenti persino agli antichi egizi. A quel tempo, i faraoni
comunicavano con i generali "al fronte" attraverso un metodo piuttosto
originale: prendevano uno schiavo, gli rasavano i capelli, scrivevano sulla
sua testa il messaggio, aspettavano che i capelli ricrescessero e poi lo
"spedivano" a destinazione. La soluzione non era certo sicura, in quanto
lo schiavo, durante il viaggio, poteva essere catturato, "letto" e ucciso e
magari sostituito con un altro sulla cui cute veniva scritto, da
qualcun’altro, un messaggio diverso e fuorviante. Un altro sempre antico
ma forse meno cruento cifrario è la “sciatola”. In Plutarco si può leggere
come più di 2500 anni fa il governo spartano trasmetteva i suoi messaggi
segreti ai generali. Mittente e destinatario facevano uso di due cilindri con
uguale raggio chiamati sciatole; il mittente vi ci avvolgeva sopra a spirale
un nastro di pergamena e scriveva il messaggio per righe longitudinali.
1
Il caso dell’ENIGMA è emblematico. Durante la seconda guerra mondiale i tedeschi utilizzavano una
macchina per la cifratura dei messaggi, l’ENIGMA appunto; gli inglesi riuscirono già prima della
guerra a forzare i messaggi cifrati con tale sistema; riuscirono inoltre a mantenere segreto questo fatto
durante la guerra potendo così continuare a leggere i messaggi tedeschi durante il conflitto.
Capitolo 1
5
Quando il nastro veniva srotolato il messaggio risultava incomprensibile
se non a chi (si sperava il legittimo destinatario) possedesse un cilindro
con lo stesso raggio su cui riavvolgere la pergamena. La sciatola fu un
prototipo di quelli che si chiamano cifrari a trasposizione, cioè un metodo
secondo il quale le lettere del messaggio restano sempre quelle ma in
posizione differente rispetto all’inizio.
Dai cifrari a trasposizione si differenziano invece quelli a sostituzione nei
quali ad ogni lettera del testo in chiaro se ne sostituisce un’altra che
continua ad occupare la stessa posizione della lettera del testo in chiaro.
Un esempio storico di tali tipi di cifrario fu il "Cesareo", utilizzato dagli
imperatori romani. Cesare Augusto, ad esempio, scriveva i suoi messaggi
sostituendo ogni lettera con quella successiva, cosi che "CESARE"
diventava "DFTBSF", mentre Giulio Cesare sostituiva ogni lettera con
quella che la segue tre posti più in là nell'alfabeto, così che ad esempio
codificando "CESARE" si ottiene "FHVDUH".
Generalizzando il cifrario di Cesare se ne può costruire uno nel quale
l'alfabeto del cifrario sia traslato di "k" lettere invece che sempre di tre,
ottenendo così un cifrario cosiddetto di tipo additivo. Additivo in quanto
traducendo ogni lettera in numeri, il processo di crittazione consiste
nell’addizionare il valore k al numero corrispondente alla lettera in
chiaro, ovviamente il tutto modulo 26. Con un ragionamento simile si può
pensare di costruire un cifrario moltiplicativo. Un miglioramento
successivo consiste nello stabilire una corrispondenza arbitraria fra i
simboli del testo chiaro (come le 26 lettere dell'alfabeto) ed i simboli del
testo cifrato; ad esempio:
Testo in chiaro: a b c d e f g h i j k l m no p qr s t uv w x y z
Testo cifrato: q w e r t y u i o p a s d f g h j k l z x c v b n m
Capitolo 1
6
Questo sistema generale è noto come sostituzione monoalfabetica, in cui
la chiave è la stringa di 26 lettere corrispondente all'alfabeto completo.
Tale cifrario potrebbe sembrare sicuro perché anche se il crittoanalista,
scoprisse che è stato adottato il metodo di sostituzione lettera per lettera,
sarebbe lo stesso difficile per lui trovare la chiave giusta fra tutte quelle
possibili (che sono 26!). In realtà è facile attaccare il cifrario: basta
conoscere le proprietà statistiche del linguaggio con cui il testo chiaro è
stato scritto, per esempio le lettere, i digrammi, i trigrammi più ricorrenti
in quel particolare linguaggio e sostituire quindi queste lettere a quelle
più ricorrenti nel testo cifrato. In questo modo non bisogna fare molta
fatica per rivelare esattamente tutto il contenuto reale del crittogramma.
Si potrebbe a questo punto pensare di appianare le differenze nelle
frequenze delle lettere del testo cifrato introducendo più alfabeti da usare
a rotazione, ottenendo un cosiddetto cifrario polialfabetico. Un esempio è
il cosiddetto cifrario di Vigenère che consiste di una matrice quadrata
contenente 26 alfabeti di Cesare. La prima riga, chiamata riga "A",
contiene l'alfabeto reale; la seconda riga (riga "B") contiene l'alfabeto
traslato e ruotato di una posizione (BCDE....XYZA) e così via fino
all'ultima riga detta riga "Z" che contiene la sequenza ZABC....WXY. Il
suo utilizzo presuppone una chiave che consiste in una singola parola o
frase, possibilmente facile da ricordare che viene ripetutamente scritta
sopra il testo da cifrare. Ad esempio, con la chiave "volare":
v o l a r e v o l a r e v o l a r e v o l a r e
s o p r a l a p a n c a l a c a p r a c a m p a
La lettera della chiave sopra la lettera del testo in chiaro determina la riga
da usare per la cifratura. In questo modo una lettera del testo in chiaro
sarà rappresentata da lettere diverse nel testo cifrato, a seconda della sua
Capitolo 1
7
posizione nel testo chiaro. Purtroppo anche questi cifrari possono essere
facilmente svelati: se per ipotesi si conoscesse la lunghezza "k" della
chiave, si potrebbe spezzare il testo cifrato in blocchi aventi quella
lunghezza, sovrapporli e ottenere così ogni colonna codificata secondo un
cifrario monoalfabetico, che abbiamo visto essere facile da attaccare
2
.
I cifrari richiamati sopra sono stati adoperati con una certa frequenza
negli anni addietro ma agli stessi oggi nessuno si sognerebbe di affidare i
propri messaggi riservati
La crittografia moderna si basa sulle stesse idee di quella tradizionale,
cioè sostituzione e trasposizione, ma la sua importanza è diversa.
Tradizionalmente i crittografi hanno utilizzato algoritmi molto semplici e
si sono affidati a chiavi molto lunghe per la loro sicurezza. Oggi invece la
tendenza si è invertita: si cerca di rendere l'algoritmo di cifratura così
complicato che anche se il crittoanalista disponesse di enormi quantità di
testo cifrato di sua propria scelta, non sarebbe in grado di trovarci alcun
senso.
Al giorno d'oggi la crittografia utilizza una grande varietà di tecniche il
cui obiettivo congiunto è quello di garantire la completa riservatezza delle
informazioni. Alcuni metodi si possono basare sulla segretezza degli
algoritmi utilizzati; tuttavia essi non sono adeguati alle esigenze del
mondo moderno. Il principio di Kerckhoffs prevede infatti che la
sicurezza di un crittosistema non deve dipendere dalla segretezza
dell’algoritmo usato, ma solo dalla segretezza della chiave. La ragione è
piuttosto ovvia e consiste nel fatto che la quantità di sforzi necessari per
inventare, collaudare ed installare un nuovo metodo ogniqualvolta quello
2
Per conoscere la lunghezza k della chiave si può ricorrete al test di Kasiski che prevede
l’individuazione della lunghezza della chiave attraverso il processo di misurazione delle distanze tra
sequenze ripetute oppure è possibile utilizzare il test di Friedman che basandosi sul concetto di Indice
di coincidenza determina una formula atta ad individuare la lunghezza della chiave. Per una descrizione
più dettagliata si rimanda a: L. BERARDI, A. BEUTELSPACHER, Crittologia, come proteggere le
informazioni riservate, FrancoAngeli, Milano, 1996.
Capitolo 1
8
vecchio è compromesso (o si pensa che lo sia), renderebbe poco pratico il
mantenimento di tale segreto, ed il fatto di pensare che esso sia un segreto
quando in realtà non lo è più potrebbe essere ancora più dannoso.
Entra quindi in gioco la chiave, che è una stringa di caratteri che
seleziona una tra le molte cifrature potenziali. Per alcuni algoritmi le
chiavi utilizzate per cifrare e decifrare sono uguali, mentre per altri sono
diverse.
In base a questa sostanziale differenza gli algoritmi basati sull’utilizzo di
chiavi si dividono in algoritmi simmetrici (detti anche a chiave
simmetrica o a chiave segreta) ed asimmetrici (detti anche a chiave
asimmetrica o a chiave pubblica).
Gli algoritmi simmetrici sono quelli usati dalla crittografia classica e
permettono al mittente ed al destinatario di usare la medesima chiave
rispettivamente per crittare e decrittare un messaggio.
Le tecniche asimmetriche utilizzano invece coppie di chiavi
complementari. Un singolo utente possiede una coppia univoca di chiavi
complementari; di esse, una è una chiave pubblica, nel senso che può
essere conosciuta da tutti, ed è usata per cifrare il messaggio, mentre
l'altra è una chiave privata ed è tenuta al sicuro dal suo proprietario, di
modo che solo lui possa utilizzarla.
Le due chiavi sono create in maniera tale che un messaggio cifrato da una
delle due può essere decifrato solo e soltanto dall'altra.
In pratica se si vuole spedire un messaggio ad una certa persona, si critta
quel messaggio con la sua chiave pubblica, e si è sicuri che soltanto
quella persona potrà decifrarla con la propria chiave privata; neanche la
chiave pubblica utilizzata per cifrare riuscirà a decrittare il messaggio.
Capitolo 1
9
1.1 – Algoritmi crittografici simmetrici
Come preannunciato gli algoritmi di crittazione simmetrici o secret-key
prevedono l’utilizzo di una sola chiave detta appunto segreta, utilizzata
sia nel processo di crittazione sia in quello di decifrazione del messaggio.
Da un punto di vista più formale, denotando con f l’algoritmo cifrante e
con k una certa chiave comune scelta dal mittente e dal destinatario, si ha
che per ogni k diversa si ottiene una certa personalizzazione f
k
dell’algoritmo f. Queste applicazioni f
k
sono chiamate trasformazioni.
Una delle caratteristiche principali che tali applicazioni debbono avere è
che il destinatario deve essere in grado di decifrare il testo cifrato f
k
(m).
Ci deve essere un’applicazione f
k
-1
tale che f
k
-1
(f
k
(m))=m per ogni m.
In altri termini, ogni testo cifrato f
k
(m) deve poter essere decifrato
applicando f
k
-1
.
Una trasformazione con queste proprietà si dice invertibile. Il fatto che
una trasformazione sia invertibile significa che in nessun caso una stessa
trasformazione f
k
, applicata a due messaggi differenti, deve poter dare il
medesimo testo cifrato. Questo perché altrimenti il testo cifrato non
potrebbe essere decifrato univocamente. Resta invece possibile che due
differenti trasformazioni associno allo stesso testo in chiaro il medesimo
testo cifrato.
I crittosistemi a chiave simmetrica possono essere utilizzati per
implementare servizi di sicurezza quali:
• Riservatezza, cioè proteggere l'informazione da visioni non
autorizzate.
• Integrità, cioè garantire che l'informazione non venga alterata e che
il messaggio arrivi esattamente come è stato spedito.
Capitolo 1
10
• Autenticazione, che serve a prevenire la dissimulazione degli
utenti; consente al vero mittente di includere nel messaggio
informazioni che lo identifichino con certezza.
Tuttavia per sistemi di tal genere non mancano i punti deboli:
1. Due corrispondenti devono essere in possesso della stessa chiave
che deve essere consegnata ad entrambi prima che possa iniziare
una comunicazione tra i due. Inoltre al crescere degli utenti, il
numero di chiavi aumenta fortemente, rendendo problematica la
loro gestione e distribuzione;
2. Poiché gli utenti condividono chiavi segrete, non si può facilmente
implementare l'importante servizio di Non-Disconoscimento del
messaggio (cioè nessuno dei due è in grado di provare ad un terzo
che un certo messaggio è stato effettivamente generato dall'altro)
3
.
Qui di seguito citerò i principali algoritmi di crittografia simmetrica,
descrivendo nel dettaglio il più noto tra essi, il DES (Data Encrytion
Standar). Il DES è stato presentato dall’IBM nel 1974 ed è una modifica
di un precedente algoritmo sempre dell’IBM, il Lucifer.
Ha rappresentato la risposta alla sollecitazione fatta in quegli anni dal
National Boureau of Standard (NBS), divenuto poi NIST, affinché si
sviluppasse un nuovo standard crittografico per la protezione dei dati
riservati ma non classificati come “segreti militari” o di “stato”.
Il DES fa parte della categoria dei codici cifrati a blocchi
4
. La chiave
usata per crittografare è un blocco di 64 bit suddiviso in 8 sottoblocchi di
8 bit ciascuno; l'ultimo bit di ogni sottoblocco è di controllo, di
conseguenza i bit liberi sono 56. Il testo da cifrare viene suddiviso in
3
Per l’assenza della capacità di implementazione del servizio di non-disconoscimento i crittosistemi
simmetrici non sono adeguati ai processi di firma digitale.
4
I sistemi crittografici simmetrici possono essere suddivisi in due cetegorie: cifrari a flusso e cifrari a
blocco. I primi possono crittare un solo bit, byte o parola di testo in chiaro alla volta, mentre i secondi
prevedono la loro applicazione su gruppi dei precedenti, crittandoli come una singola unità.
Capitolo 1
11
blocchi di 64 bit. Nel caso in cui il messaggio da cifrare non sia un
multiplo di 64 bit esistono diversi sistemi utilizzati per completarlo
(procedimento detto "pad"). Un metodo aggiunge zeri fino alla lunghezza
stabilita mentre un altro, se i dati sono binari, integra il blocco con bit che
sono l'opposto degli ultimi bit del messaggio. Nel caso di dati ASCII si
usano invece byte random (casuali) specificando nell'ultimo byte il
carattere ASCII corrispondente al numero di byte aggiunti. Infine
un'ultima tecnica, in parte equivalente alla precedente, usa sempre bit
random ma fornisce, negli ultimi tre bit, il numero di byte non padding
cioè originali. In tal caso se il blocco è già di 64 bit si dovrà aggiungere
un'altra stringa di 64 bit con 61 bit random e gli ultimi 3 nulli dato che
indicano il numero di byte validi.
Durante la cifratura un blocco di testo normale viene per prima cosa
permutato, che significa che ogni bit cambia di posizione con un altro
5
.
Quindi il blocco di 64 bit viene diviso in una metà destra e una metà
sinistra di 32 bit. In seguito vengono applicate 16 passate (round) tramite
una funzione che opera sia trasposizioni che sostituzioni ad ogni metà
mediante sottochiavi. Durante ogni round l'output della metà sinistra
diventa l'input della destra e viceversa. Dopo il completamento di tutti i
passaggi i due sottoblocchi vengono riuniti ed il risultato permutato per
invertire la trasposizione iniziale
6
.
5
La permutazione iniziale viene effettuata in base alla seguente tabella:
58 50 42 34 26 18 10 2
60 52 44 36 28 20 12 4
62 54 46 38 30 22 14 6
64 56 48 40 32 24 16 8
57 49 41 33 25 17 9 1
59 51 43 35 27 19 11 3
61 53 45 37 29 21 13 5
63 55 47 39 31 23 15 7
La tabella va interpretata in questo modo: come primo bit si prende il 58-esimo, come secondo il 50-
esimo e così via fino all’ultimo che sarà il settimo.
6
Quest’ultima permutazione, come quella iniziale, è effettuata secondo la tabella seguente:
40 8 48 16 56 24 64 32
39 7 47 15 55 23 63 31
38 6 46 14 54 22 62 30
Capitolo 1
12
Precisamente: indicando con T(i) il risultato della i-esima iterazione, con
L
i
il semiblocco sinistro, con R
i
il semiblocco destro e con K
i
la
sottochiave. In base all'algoritmo si ha che:
T(i)= L
i
R
i
blocco di testo chiaro (plaintext)
L
i
=R
i-1
R
i
=L
i-1
XOR f[R
i-1
,K
i
]
Schematicamente l’algoritmo è descritto in figura 1.A, tratta dal
documento ufficiale di descrizione dell’algoritmo, FIPS 46-3.
Vediamo come opera la funzione "f":
1. il blocco R
i-1
viene espanso da 32 bit a 48 con un modulo di
espansione E.
Indichiamo il blocco espanso con E[R
i-1
];
7
2. si calcola E[R
i-1
] XOR K
i
;
3. il risultato precedente viene spezzato in 8 blocchi di 6 bit
ciascuno: B(1),B(2)...B(8) contenenti rispettivamente i bit da
1-6, da 7-12 etc...;
37 5 45 13 53 21 61 29
36 4 44 12 52 20 60 28
35 3 43 11 51 19 59 27
34 2 42 10 50 18 58 26
33 1 41 9 49 17 57 25.
7
La funzione E trasforma un blocco da 32 bit come input in uno da 48 bit secondo la seguente tabella:
32 1 2 3 4 5
4 5 6 7 8 9
8 9 10 11 12 13
12 13 14 15 16 17
16 17 18 19 20 21
20 21 22 23 24 25
24 25 26 27 28 29
28 29 30 31 32 1
Anche qui il processo prevede di mettere come primo bit il 32-esimo, come secondo il primo e così via
fino al 48-esimo che sarà il ancora il primo.
Capitolo 1
13
Figura 1.A
4. ciascun blocchetto B viene usato come ingresso ad una
funzione Z che restituisce stringhe di 4 bit indicate Z[B(i)].
La funzione Z opera in questo modo: preleva da ogni matrice
prefissata S-box(i) i 4 bit del nuovo blocchetto S(i)=Z[B(i)]
individuati in base alle righe e colonne specificate dai 6 bit
del corrispondente B(i);
8
8
Se S-Box(i) è ad esempio la seguente tabella:
Capitolo 1
14
5. una volta concatenati gli 8 blocchetti S(1), S(2)...S(8), essi
verranno permutati
9
ottenendo finalmente
P[S(1),..S(8)]=f[R
i-1
, K
i
].
Per quanto concerne la chiave, essa è una stringa di 64 bit con 8 bit di
controllo che vengono ignorati durante la cifratura/decifratura. Da essa
vengono scelti due blocchi di 28 bit
10
, supponiamo di chiamarli S
0
e D
0
,
dopodiché per 16 volte i semiblocchi, sequenzialmente, vengono traslati a
sinistra
11
ottenendo S
1
,D
1
, S
2
,D
2
... S
16
,D
16
.
Quindi al primo passaggio l'algoritmo utilizzerà la sottochiave
K
1
=C[S
1
D
1
] dove C indica una scelta con contemporanea permutazione
di 48 bit
12
; al secondo K
2
=C[S
2
D
2
] ed al 16° round K
16
=C[S
16
D
16
] (si noti
che tutte le operazioni effettuate producono sottochiavi K
i
di 48 bit).
N° colonna
N° riga 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7
1 0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8
2 4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0
3 15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13
allora, dato un certo blocco da 6 bit B(i), la trasformazione nel blocco da 4 bit Z[B(i)] è ottenuta
rappresentando in binario il numero ottenuto dalla tabella le cui coordinate sono individuate come
segue: la riga è ottenuta trasformando in decimale il numero binario ottenuto affiancando il primo e
l’ultimo bit di B(i); la colonna invece è ottenuta trasformando in decimale i 4 bit centrali rimanenti di
B(i). In effetti con soli 2 bit si possono al massimo rappresentare i numeri da 0 a 3, tante quante sono le
righe; mentre con i restanti 4 bit si possono rappresentare i valori da 0 a 15 tanti quanti sono i valori
che identificano le colonne.
9
La permutazione P permuta i 32 bit sulla base della seguente tabella:
16 7 20 21
29 12 28 17
1 15 23 26
5 18 31 10
2 8 24 14
32 27 3 9
19 13 30 6
22 11 4 25.
10
La scelta è effettuata prendendo i bit che occupano la posizione indicata dalle seguenti due tabelle:
57 49 41 33 25 17 9 63 55 47 39 31 23 15
1 58 50 42 34 26 18 7 62 54 46 38 30 22
10 2 59 51 43 35 27 14 6 61 53 45 37 29
19 11 3 60 52 44 36 21 13 5 28 20 12 4.
11
Il numero di posti di cui ciascun semiblocco è traslato ad ogni iterazione è individuato dalla tabella
seguente:
N° Iteratione 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
N° Posti traslaz. 1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1.
12
La scelta C è effettuata prendendo i bit che occupano le posizioni indicate dalla tabella che segue:
14 17 11 24 1 5
3 28 15 6 21 10
Capitolo 1
15
Per la decifratura il procedimento è lo stesso salvo che al 1° passo verrà
utilizzata K
16
=C[S
16
D
16
], al secondo K
15
=C[S
15
D
15
] etc.
In termini di equazione si avrà:
T(i)= L
i
R
i
blocco di testo cifrato (ciphertext)
R
i-1
= L
i
L
i-1
=R
i
XOR f[L
i
,K
16-i
].
Questo algoritmo che potrebbe sembrare molto cavilloso in realtà sfrutta
operazioni molto semplici come trasposizioni, sostituzioni e XOR.
Nonostante la sua semplicità il DES con i suoi 16 passaggi sopravvive da
due decenni alla crittoanalisi.
DES è un cifrario standard dove quello che varia è solo la chiave. Il
difetto più importante è la sua limitata Keyspace (spazio delle chiavi) pari
a 2
56
ormai non più sufficiente
13
. Per far fronte a questi problemi sono
nate proposte diverse, tra cui l'utilizzo di chiavi più lunghe o di cifratura
tripla (TDES)
14
.
Il DES, come del resto anche gli altri algoritmi di crittografia a chiave
segreta, non assicura una sicurezza assoluta. L’unico algoritmo che
l’assicura è il One-time pad.
23 19 12 4 26 8
16 7 27 20 13 2
41 52 31 37 47 55
30 40 51 45 33 48
44 49 39 56 34 53
46 42 50 36 29 32.
13
Nel 1977 al momento dell’annuncio del DES il documento ufficiale riportava: ”The cryptographic
algorithm in this standard trasforms a 64-bit binary value into a unique 64-bit binary value based on a
56-bit variable. If the complete 64-bit inputs is used and if the 56-bit variable is randomly chosen, no
technique other than trying all possible keys using known input and output for the DES will guarantee
finding the chosen key. As there are over 70,000,000,000,000,000 (seventy quadrillions) possible keys
of 56 bit, the feasibility of deriving a particular key in this way is extremely unlikely in typical threat
enviroments.
14
Il TDES o TripleDES prevede di effettuare una sequenza di crittazioni e decrittazioni del messaggio
con il DES. Esso infatti, dato un certo blocco in input da 64 bit “I”, posto E
K
il processo di crittazione
con DES e D
K
il processo di decrittazione sempre con DES, prevede che l’output O sia ottenuto nel
modo seguente: O=E
K3
(D
K2
(E
K1
(I))). Mentre per decrittare la sequenza sarà O=D
K1
(E
K2
(D
K3
(I))). Sono
previste tre varianti: la prima prevede che le tre chiavi siano tutte diverse, la seconda che K1 e K2 siano
Capitolo 1
16
Quest’ultimo algoritmo si è infatti dimostrato a sicurezza perfetta e non a
caso si dice che fu utilizzato durante la guerra fredda per proteggere i
messaggi inviati sulla cosiddetta “linea calda” tra la Casa Bianca ed il
Cremlino.
Esso fu proposto da Gilbert S. Vernam
15
nel 1917 e si basa sulla somma
bit a bit tra il testo in chiaro e la chiave.
In modo più formale, posto
i
a come un bit del testo in chiaro e
i
k come
un bit della chiave segreta si ha che un bit del testo cifrato si ottiene
ponendo
ii
ka ⊕ . Quindi il testo cifrato sarà dato dalla sequenza
nn
kakaka ⊕⊕⊕ ,,,
2211
L .
Schematicamente:
Testo in Chiaro
01100100011001… Testo cifrato
⊕
Chiave 11000010000011…
10100110011010…
Il processo di decifrazione coincide sostanzialmente con quello di cifrare,
sostituendo al posto del messaggio in chiaro il messaggio cifrato.
Affinché il sistema abbia effettivamente sicurezza perfetta, è
fondamentale che tutte le sequenze di lunghezza n si possano presentare
come chiave con la stessa probabilità od in altri termini che i bit che
formano la chiave devono essere scelti casualmente.
La ragione per la quale questo sistema pur essendo sicuro risulta usato
solo raramente sta nella lunghezza della chiave. La chiave infatti deve
avere una lunghezza pari al messaggio stesso; se si usano gli stessi canali
per inviare la chiave ed il messaggio allora il rischio che qualcuno
indipendenti mentre K3=K1, in fine la terza prevede che K1=K2=K3. Quest’ultima da risultati uguali
al DES semplice.
Capitolo 1
17
intercetti la chiave equivale a quello che qualcuno possa leggere il
messaggio; per cui potrebbe sembrare meno fastidioso e far risparmiare
tempo inviare direttamente il messaggio in chiaro al destinatario.
Comunque quest’ultima affermazione non è del tutto corretta dato che da
una parte il mittente potrebbe scegliere mezzi più convenienti per l’invio
della chiave e dall’altra si potrebbero anche scegliere i momenti più
opportuni per trasmetterla.
Altri algoritmi simmetrici possono essere ancora: l’IDEA, l’RC2, lo
Skipjack, il Blowfish, il Safer ecc. Ciascuno di essi presenta dei criteri
propri per crittare e decrittare ma sono tutti accomunati dal fatto di
basarsi sulla necessità di dover utilizzare un’unica chiave segreta sia per
crittare che per decrittare e dal fatto di operare a blocchi.
Sommariamente si può ricordare che l’IDEA (International Data
Encryption Algorithm) nasce nel 1991 da due crittologi Xuejja Lai e
James L. Massey.
Come il DES opera su blocchi di 64 bit, questa volta però la chiave è di
128 bit, che indubbiamente rende ben più gravoso se non impossibile
qualsiasi ricerca esaustiva nello spazio della chiave. A differenza del
DES, che era stato progettato per implementazioni hardware, IDEA è
stato creato per software. La cifratura con IDEA comporta una divisione
del blocco di 64 bit del testo normale in 4 sottoblocchi di 16 bit. Ogni
sottoblocco subisce 8 passate in cui sono coinvolte 52 sottochiavi diverse
a 16 bit ottenute dalla chiave a 128 bit.
16
Ogni passata comporta calcoli abbastanza semplici come XOR, addizione
modulare e moltiplicazioni modulari (addizione modulare significa che
15
Gilbert S. Vernam (1890 – 1960) ingegnere americano della compagnia AT&T.
16
Le sottochiavi sono generate nel modo seguente:
1. La chiave a 128 bit è divisa in 8 stringhe di 16 bit che sono le prime 8 sottochiavi;
2. Le cifre della chiave a 128 sono shiftate di 25 bit a sinistra in modo da generare una nuova
combinazione, la cui suddivisione in 8 stringhe fornisce le prossime 8 sottochiavi;
Il secondo passo è ripetuto finché le 52 sottochiavi sono generate.