Sei sulla pagina 1di 154

Crittografia a Chiave Segreta

(Secret Key Cryptography)


Luca Grilli
INTRODUZIONE
Crittografia a Chiave Segreta
Introduzione
Si descriver il funzionamento degli algoritmi di
crittografia a chiave segreta
si vedranno in dettaglio gli algoritmi DES e IDEA
tali algoritmi non si applicano direttamente ad un
messaggio di lunghezza qualsiasi, ma ricevono in input
un blocco del messaggio di lunghezza fissa (64 bit nel caso di
DES e IDEA)
una chiave di lunghezza fissa (56 bit per DES e 128 bit per
IDEA)
loutput un blocco cifrato (della stessa lunghezza del
blocco di input)
per tale ragione si parla di algoritmi di cifratura a blocchi

Introduzione
la cifratura di un messaggio di lunghezza qualsiasi
viene ricondotta alla cifratura dei singoli blocchi
il messaggio m viene scomposto in blocchi di lunghezza
fissa
la cifratura del messaggio m viene ottenuta
combinando opportunamente le cifrature dei suoi
blocchi
In altri termini, possibile ottenere un algoritmo
di cifratura simmetrica per messaggi di lunghezza
qualsiasi utilizzando come modulo base un
algoritmo di cifratura simmetrica a blocchi

CIFRATURA A BLOCCHI SCHEMA
GENERALE
Crittografia a Chiave Segreta
Cifratura a blocchi introduzione
Lalgoritmo di cifratura converte un blocco di
testo in chiaro in un blocco di testo cifrato
la chiave K non deve essere troppo corta
es. se K ha lunghezza 4 bit, sono sufficienti 2
4
= 64
tentativi per individuarla!
analogamente, la lunghezza (fissata) di un blocco
non deve essere troppo piccola
es. se un blocco ha lunghezza 8 bit, ottenendo delle
coppie (plaintext, ciphertext) si potrebbe costruire una
tabella di 2
8
= 256 coppie utilizzabile per la decifratura

Cifratura a blocchi introduzione
daltra parte, avere blocchi esageratamente lunghi
oltre a non essere necessario dal punto di vista della
sicurezza,
comporta una gestione pi complicata, e
pu degradare le prestazioni
64 bit una lunghezza ragionevole per un blocco
improbabile ottenere ordine di 2
64
coppie (plaintext,
ciphertext) per costruire una tabella di decifratura, e
anche se fosse possibile, la sua memorizzazione
richiederebbe una spazio enorme 2
64
record da 64 bit,
come pure lordinamento per consentire ricerche
efficienti
Cifratura a blocchi concetti generali
Il modo pi generale per cifrare un blocco da 64
bit definire una biiezione : {0, 1}
64
{0, 1}
64
memorizzare la definizione della biiezione in una
struttura dati impraticabile
sono richiesti 64 2
64
bit, cio 2
70
bit
ad essere precisi ce ne vogliono un po di meno, trattandosi
di un biiezione, comunque almeno 2
69
bit sono richiesti
inoltre, cos facendo la chiave incorporata nella
biiezione
per rendere parametrica la biiezione rispetto la chiave
necessario memorizzare una biiezione per ogni possibile
chiave!
Cifratura a blocchi concetti generali
I sistemi di crittografia a chiave segreta sono
concepiti per
usare una chiave ragionevolmente lunga
ad esempio 64 bit
generare una biiezione che appare, a chi non conosce
la chiave, completamente random
cio, la biiezione sembra essere definita utilizzando un
generatore di numeri casuali
loutput (i) di un input i si ottiene lanciando un dado a 64
facce o facendo 64 lanci di monete
avendo laccortezza di ripetere la procedura se il valore
ottenuto per loutput (i) coincide con qualche (j) con j < i
(cio se (i) era gi stato assegnato ad un precedente input)

Cifratura a blocchi concetti generali
Se la biiezione fosse realmente random
un input i ottenuto cambiando un qualunque bit di un
input i
sarebbe mappato in un output (i) tale che (i) e (i)
risultano statisticamente indipendenti
ad esempio, non pu succedere che il terzo bit delloutput
cambia sempre quando il dodicesimo bit dellinput cambia
Gli algoritmi crittografici sono pensati per
diffondere/spargere in tutti i bit delloutput il
valore di ogni bit dellinput
ogni bit delloutput deve dipendere da tutti i bit
dellinput e allo stesso modo
Sostituzione
Sostituzioni e permutazioni sono due
trasformazioni base applicabili ad un blocco di dati
Si assuma di dover cifrare un blocco di k bit
Una sostituzione specifica, per ciascuno dei 2
k

possibili valori dellinput, i k bit delloutput
per specificare una sostituzione completamente
random sono necessari circa k2
k
bit

impraticabile implementare una sostituzione per
blocchi di 64 bit,
ma fattibile per blocchi di lunghezza di 8 bit
Permutazione
Una permutazione specifica, per ciascuna
delle k posizioni dei bit in input, la posizione
del corrispondente bit nelloutput
ad esempio, il bit in posizione 1 diventa il bit in
posizione 13 nelloutput,
il bit in posizione 2 diventa il bit in posizione 61
nelloutput, e cos via
per specificare una permutazione
completamente random per un blocco di
lunghezza k bit sono necessari klog
2
k bit

Permutazione
per ciascuno dei k bit va specificata la sua
posizione nelloutput; ogni posizione richiede
log
2
k bit
ad esempio, essendo 2
6
= 64, sono necessari 6 = log
2
64
bit per specificare la nuova posizione che li-esimo bit in
input avr in output

Permutazione vs Sostituzione
Una permutazione un caso particolare di
sostituzione in cui ogni bit delloutput ottiene
il suo valore da esattamente un bit dellinput
per blocchi di 64 bit possibile specificare e
realizzare un permutatore
un modulo che riceve in input un blocco di 64 bit e
produce in output una data permutazione dei bit in
input
Cifrario a blocchi schema generale
Un algoritmo di cifratura a chiave segreta pu
funzionare come segue
scompone il blocco in input in pezzi pi piccoli (blocchi da
8 bit)
applica una sostituzione a ciascun pezzo da 8 bit
la sostituzione dipender dal valore della chiave
gli output delle sostituzioni vengono riuniti in un unico
blocco (64 bit),
tale blocco viene permutato in un permutatore a 64 bit
che ha il compito di diffondere le modifiche eseguite nelle
sostituzioni
il processo viene ripetuto un certo numero di volte
riportando loutput in ingresso

Esempio di cifrario a blocchi
Esempio di cifrario a blocchi
Ogni attraversamento del cifrario viene detto
round
con un solo round, un bit b
x
di input pu influenzare
soltanto 8 bit b
x1
, b
x2
, , b
x8
delloutput
poich b
x
ha attraversato soltanto un blocco di sostituzione
in generale i bit b
x1
, b
x2
, , b
x8
non sono consecutivi essendo
stati mescolati nel permutatore
alla fine del secondo round, assumendo che i bit b
x1
,
b
x2
, , b
x8
siano smistati in un diverso blocco di
sostituzione
il bit b
x
iniziale influenza tutti i bit in output
ALGORITMO DES
DATA ENCRYPTION STANDARD

Crittografia a Chiave Segreta
Data Encryption Standard (DES)
DES fu pubblicato nel 1977 dal National Bureau of
Standards
ora rinominato National Institute of Standards and
Technology (NIST)
per usi commerciali e altre applicazioni del governo
statunitense
progettato da IBM, si basa sul precedente cifrario
Lucifer ed frutto della collaborazione con consulenti
della NSA
DES usa una chiave di 56 bit, e mappa un blocco di
input da 64 bit in un blocco di output da 64 bit
Data Encryption Standard (DES)
la chiave in realt costituita da una sequenza di
64 bit, ma un bit in ogni ottetto (il blocco da 64 bit
formato da 8 sequenze di 8 bit dette ottetti)
usato come odd parity su ciascun ottetto
di fatto, soltanto 7 bit in ogni ottetto sono
veramente significativi come chiave
DES efficiente se realizzato in hardware, ma
relativamente lento se implementato in software
sebbene lessere difficilmente implementabile come
software non era un requisito specificato nel progetto,
molti sostengono che in realt era un fatto voluto,

Data Encryption Standard (DES)
forse per limitarne luso ad organizzazioni in grado di
realizzare sistemi hardware, o
forse perch rese pi facile controllare laccesso alla
tecnologia
ad ogni modo, laumento delle capacit di calcolo delle CPU
rese possibile realizzare una versione software di DES
una 500-MIPS (Million Instruction Per Second) CPU pu cifrare ad
un tasso di circa 30 KB/s,
e forse pi, dipende dai dettagli architetturali della CPU e dalla
intelligenza dellimplementazione
un processore Intel Core i7 Extreme Edition i980EE ha una
capacit di calcolo di circa 150 MIPS pu cifrare ad un tasso di
circa 9 KB/s per cifrare 1 MB impiega circa 110 secondi
limplementazione software pertanto adeguata a molte
applicazioni
Perch chiavi da 56 bit?
La scelta di una chiave da 56 bit caus molte
controversie
prima che DES fu adottato, le persone al di fuori
della intelligence community lamentavano che 56
bit non offrivano una sicurezza adeguata
perch solo 56 dei 64 bit di una chiave DES sono
effettivamente usati nellalgoritmo?
lo svantaggio di usare 8 bit della chiave per un controllo
di parit che ci rende DES molto meno sicuro (256
volte meno sicuro contro una ricerca esaustiva)

Perch chiavi da 56 bit?
Qual il vantaggio di usare 8 bit per un
controllo di parit?
una possibile risposta : per verificare che la
chiave non sia corrotta!
ma questa spiegazione non regge!
se si considerassero 64 bit a caso invece della chiave,
c una probabilit su 256 che il controllo di parit dia
esito positivo la probabilit che la chiave sia
comunque errata troppo alta!
inoltre avere una chiave corrotta non comporta un
problema di sicurezza, semplicemente la
cifratura/decifratura non viene eseguita correttamente


Perch chiavi da 56 bit?
chiaramente anche ridicolo sostenere che la
scelta di 56 bit stata fatta per risparmiare
memoria

La risposta ormai condivisa che il governo
statunitense abbia deliberatamente indebolito
la sicurezza di DES di una quantit appena
sufficiente da consentire alla NSA di violarlo


Sulla violabilit di DES
Gli avanzamenti tecnologici dellindustria dei
semiconduttori hanno reso ancora pi critico il
problema della lunghezza della chiave di DES
la velocit dei chip e un po di furbizia permettono di
violare (individuare) le chiavi DES con approcci a forza
bruta in tempi ragionevoli
forse una chiave a 64 bit sarebbe stata sicura per
pochi anni in pi rispetto ad una chiave a 56 bit
il rapporto prestazioni/prezzo dellhardware cresce del
40% per anno la lunghezza delle chiavi dovrebbe
aumentare di 1 bit ogni 2 anni

Sulla violabilit di DES
assumendo che 56 bit erano appena sufficienti nel
1979 (quando DES fu standardizzato)
64 bit erano adeguati nel 1995, e
128 bit dovrebbero essere sufficienti fino al 2123

Quanto sicuro DES?
Se si dispone di un singolo blocco (plaintext,
ciphertext) quanto difficile trovare la chiave?
un approccio a forza bruta dovrebbe provare ordine di
2
56
10
17
chiavi
se ogni tentativo richiede una singola istruzione sono
necessarie ordine di 1000 MIPS-year istruzioni
1 MIPS = 1 Milione di Istruzioni Per Secondo
1 MIPS-year = numero di istruzioni eseguite in un anno ad un
tasso pari a 1 MIPS
1 MIPS-year = 1 MIPS (365 86400) secondi in un anno =
3,1536 10
13
istruzioni
2
56
10
17
10
3
MIPS-year

Quanto sicuro DES?
Anche nellipotesi pi scomoda per lavversario di
disporre solo di testo cifrato
una ragionevole quantit di testo cifrato
un attacco a forza bruta pu essere ancora possibile
se ad esempio lavversario sa soltanto che il testo in chiaro
ASCII a 7 bit
ogni volta che prova una chiave deve verificare se sono
nulli tutti i bit nelle posizioni 8, 16, 24, , n8,
per ogni blocco di 64 bit, vanno esaminati solo 8 bit; i bit in
posizione 8, 16, 24, 32, 40, 48, 56, 64
se almeno uno di questi bit vale 1 la chiave sicuramente errata
in caso contrario nulla si pu dire; la probabilit di errore
pertanto 1 su 256 ossia la probabilit che tutti questi bit valgano 0
Quanto sicuro DES?
se lavversario esamina diversi blocchi, ad esempio 10,
e verifica che si tratta sempre di ASCII a 7 bit la
probabilit che la chiave scelta sia errata si riduce a 1
su 2560
si noti che gli attuali chip commerciali che
implementano DES non si prestano a ricerche
esaustive della chiave, sono pensati per cifrare molti
dati con una stessa chiave
il caricamento di una chiave unoperazione lenta se
confrontata con la velocit con la quale viene eseguita la
cifratura dei dati
tuttavia sempre possibile costruire un chip ottimizzato ad
eseguire ricerche esaustive della chiave

Quanto sicuro DES?
Ovviamente possibile cifrare pi volte e con
diverse chiavi lo stesso blocco di dati
si parla di cifratura multipla (multiple encryption)

Si ritiene che una cifratura con un triplo DES
2
56
volte pi difficile da violare
pu considerarsi sicura per il prossimo futuro
DES Struttura base
DES Struttura base
In estrema sintesi la cifratura di DES come segue
Linput di 64 bit sottoposto ad una permutazione
iniziale; un semplice mescolamento dei bit
La chiave da 56 bit viene usata per generare 16 per-
round chiavi da 48 bit; una chiave per ciascuno dei 16
round
prendendo 48 differenti sottoinsiemi dei 56 bit della chiave
Ogni round riceve in input
loutput di 64 bit del round precedente
la chiave da 48 bit di quel round
e produce un output di 64 bit
DES Struttura base
Dopo il 16-esimo round, le due met delloutput
di 64 bit vengono scambiate e il risultato viene
sottoposto ad unaltra permutazione
la permutazione finale, che linverso di quella iniziale
La decifratura consiste esattamente nelleseguire
la cifratura DES allindietro
Per decifrare un blocco necessario:
applicare la permutazione iniziale; ci annulla leffetto
della permutazione finale
generare le 16 chiavi di round, che andranno usate in
ordine inverso (prima K
16
lultima chiave generata)
DES Struttura base
eseguire 16 round esattamente come nella cifratura
il motivo per cui funziona sar illustrato quando si spiegher
cosa succede durante un round
dopo 16 round di decifratura, le due met delloutput
di 64 bit vengono scambiate e il risultato viene
sottoposto ad unaltra permutazione
che annulla la permutazione iniziale
Per descrivere in dettaglio DES necessario illustrare
le permutazioni iniziale e finale,
come le chiavi di round sono generate, e
cosa succede durante un round
Permutazioni dei dati
DES effettua una permutazione iniziale e una
permutazione finale dei dati che
NON migliorano la sua sicurezza!
forse sono state introdotte per rendere meno
efficienti le implementazioni software
Permutazioni dei dati
Le permutazioni specificate in DES sono
rappresentate nelle due tabelle
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
40 8 48 16 56 24 64 32
39 7 47 15 55 23 63 31
38 6 46 14 54 22 62 30
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
Initial Permutation (IP)
Final Permutation (IP
-1
)
Permutazioni dei dati
Le tabelle vanno interpretate nel seguente
modo
i numeri, da 1 a 64, riportati in tabella
rappresentano le posizioni dei bit in input alla
permutazione
lordine (per righe da sx verso dx) dei numeri nella
tabella rappresenta la corrispondente posizione
dei bit in output
ad esempio, la permutazione iniziale sposta il 58-esimo
bit in input nel primo bit in output, e
il 50-esimo bit in input nel secondo bit in output
Permutazione iniziale input e output
Non si tratta di una permutazione generata in modo
random
nel senso che presenta delle regolarit evidenti
b
1
b
2
b
3
b
4
b
5
b
6
b
7
b
8

b
9
b
10
b
11
b
12
b
13
b
14
b
15
b
16

b
17
b
18
b
19
b
20
b
21
b
22
b
23
b
24

b
25
b
26
b
27
b
28
b
29
b
30
b
31
b
32

b
33
b
34
b
35
b
36
b
37
b
38
b
39
b
40

b
41
b
42
b
43
b
44
b
45
b
46
b
47
b
48

b
49
b
50
b
51
b
52
b
53
b
54
b
55
b
56

b
57
b
58
b
59
b
60
b
61
b
62
b
63
b
64

b
58
b
50
b
42
b
34
b
26
b
18
b
10
b
2

b
60
b
52
b
44
b
36
b
28
b
20
b
12
b
4

b
62
b
54
b
46
b
38
b
30
b
22
b
14
b
6

b
64
b
56
b
48
b
40
b
32
b
24
b
16
b
8

b
57
b
49
b
41
b
33
b
25
b
17
b
9
b
1

b
59
b
51
b
43
b
35
b
27
b
19
b
11
b
3

b
61
b
53
b
45
b
37
b
29
b
21
b
13
b
5

b
63
b
55
b
47
b
39
b
31
b
23
b
15
b
7

input
output
Permutazione iniziale input e output
linput costituito da 8 ottetti
un ottetto un gruppo di 8 bit corrispondenti ad una
riga della tabella
loutput costituito da 8 ottetti
i bit nel primo ottetto (prima riga) in input vengono
diffusi nellottavo bit di ogni ottetto (di ogni riga)
i bit nel secondo ottetto (seconda riga) in input
vengono diffusi nel settimo bit di ogni ottetto (di ogni
riga)
i bit nelli-esimo ottetto vengono diffusi nel (9-i)-esimo
bit di ogni ottetto; i bit in posizione pari vanno nei primi
quattro ottetti delloutput, mentre quelli in posizioni
dispari negli ultimi quattro

Perch permutare?
Le permutazioni iniziale e finale di DES non
contribuiscono alla sicurezza
si supponga per assurdo che siano fondamentali
allora chiamando EDS lalgoritmo ottenuto da DES
togliendo tali permutazioni
EDS deve essere pi facile da violare di DES
supponiamo allora che nota una coppia (plaintext,
ciphertext) EDS sia pi facilmente violabile; cio sia pi
facile calcolare la chiave K
EDS
mostriamo allora che DES risulta violabile con la stessa
facilit

Perch permutare?
infatti, sia (m, c) una coppia (plaintext, ciphertext) di
DES
si consideri allora la coppia (m, c) ove m e c sono
ottenuti applicando la permutazione iniziale ad m e c
allora, la chiave K
EDS
che si ottiene violando EDS per la
coppia (m, c) coincide con la chiave K
DES
di DES per la
coppia (m, c)
EDS IP IP
-1
DES
m m c c
K
EDS
(= K
DES
)

Generazione delle chiavi di round
DES genera
sedici chiavi di round da 48 bit a partire dalla chiave
principale K di 64 bit nominali, di cui solo 56 effettivi
i bit di parit di K non vengono considerati
denoteremo con K
1
, K
2
, , K
16
le chiavi di round
il procedimento il seguente
viene prima effettuata una permutazione iniziale sui
56 bit effettivi di K
i 56 bit in output vengono divisi in due met C
0
e D
0
la permutazione illustrata nelle slide seguenti
Gen. chiavi Permutazione iniziale
il valore numerico di un elemento della tabella
rappresenta la posizione del bit in input,
mentre lordine nella tabella rappresenta la posizione
del bit in output
ad esempio, il bit pi a sx nelloutput ottenuto estraendo il
57-esimo bit della chiave K
i numeri 8, 16, 24, 32, 40, 48, 56, 64 non sono presenti
perch corrispondono ai bit di parit della chiave
57 49 41 33 25 17 9
1 58 50 42 34 26 18
10 2 59 51 43 35 27
19 11 3 60 52 44 36
63 55 47 39 31 23 15
7 62 54 46 38 30 22
14 6 61 53 45 37 29
21 13 5 28 20 12 4
C
0
D
0
Gen. chiavi Permutazione iniziale
b
1
b
2
b
3
b
4
b
5
b
6
b
7

b
9
b
10
b
11
b
12
b
13
b
14
b
15

b
17
b
18
b
19
b
20
b
21
b
22
b
23

b
25
b
26
b
27
b
28
b
29
b
30
b
31

b
33
b
34
b
35
b
36
b
37
b
38
b
39

b
41
b
42
b
43
b
44
b
45
b
46
b
47

b
49
b
50
b
51
b
52
b
53
b
54
b
55

b
57
b
58
b
59
b
60
b
61
b
62
b
63

b
57
b
49
b
41
b
33
b
25
b
17
b
9

b
1
b
58
b
50
b
42
b
34
b
26
b
18

b
10
b
2
b
59
b
51
b
43
b
35
b
27

b
19
b
11
b
3
b
60
b
52
b
44
b
36

b
63
b
55
b
47
b
39
b
31
b
23
b
15

b
7
b
62
b
54
b
46
b
38
b
30
b
22

b
14
b
6
b
61
b
53
b
45
b
37
b
29

b
21
b
13
b
5
b
28
b
20
b
12
b
4

input
output
Gen. chiavi Permutazione iniziale
La permutazione non random
nel senso che presenta delle regolarit evidenti
come nel caso delle permutazioni dei dati anche le
permutazioni iniziale e finale dei bit della chiave K
NON contribuiscono alla sicurezza!
Generazione chiavi: i-esimo round
Le sedici chiavi vengono generate in sedici round
nelli-esimo round viene generata la chiave di round K
i

generazione di K
i
: round i

Generazione chiavi: i-esimo round
i bit delle due met C
i-1
D
i-1
della (i-1)-esima chiave K
i-1

vengono ruotati (traslazione ciclica) a sx
lentit della traslazione a sx dipende dal round
nei round 1, 2, 9 e 16 si ha una rotazione a sx di un solo bit; il
primo bit diventa lultimo bit a dx
negli altri round si ha una rotazione a sx di due bit
la permutazione di C
i
che produce la met sx di K
i

illustrata sotto
si noti che i bit in posizione 9, 18, 22, e 25 sono scartati
14 17 11 24 1 5
3 28 15 6 21 10
23 19 12 4 26 8
16 7 27 20 13 2
permutazione per ottenere
la met sx di K
i
Generazione chiavi: i-esimo round
la permutazione di D
i-1
ruotato, cio di D
i
, che
produce la met dx di K
i
illustrata sotto
si noti che i bit in posizione 35, 38, 43, e 54 sono
scartati; rimangono cos 24 bit anzich 28
ciascuna delle met di K
i
di 24 bit
complessivamente K
i
ha una lunghezza di 48 bit
14 17 11 24 1 5
3 28 15 6 21 10
23 19 12 4 26 8
16 7 27 20 13 2
permutazione per ottenere
la met dx di K
i
Un round di DES
ENCRYPTION DECRYPTION
n-esimo round di DES
CIFRATURA (ENCRYPTION)
i 64 bit in input sono divisi in due met da 32 bit
L
n
: met sx dopo l(n-1)-esimo round
R
n
: met dx dopo l(n-1)-esimo round
loutput di 64 bit del round si ottiene
concatenando le due met
L
n+1
: met sx dopo ln-esimo round
R
n+1
: met dx dopo ln-esimo round
L
n+1
semplicemente R
n


n-esimo round di DES
R
n+1
ottenuto come segue
R
n
e K
n
sono posti in input alla mangler function; la
mangler function viene anche detta funzione di Feistel
loutput della mangler function, mangler(R
n
, K
n
), una
quantit di 32 bit; si noti che R
n
e K
n
sono composti da
32 e 48 bit rispettivamente
loutput mangler(R
n
, K
n
) viene poi sommato (XOR )
con L
n
il risultato ottenuto R
n+1
= mangler(R
n
, K
n
) L
n


n-esimo round di DES
si noti che ogni round di DES facilmente
invertibile
noti L
n+1
, R
n+1
e K
n
facile ottenere L
n
e R
n

infatti, R
n
= L
n+1
, ed essendo
R
n+1
= mangler(R
n
, K
n
) L
n
risulta che
R
n+1
mangler(R
n
, K
n
) = L
n
(si noti che x y y = x)
cio L
n
= R
n+1
mangler(L
n+1
, K
n
)
la mangler function non mai usata in senso
inverso
DES elegantemente progettato da essere invertibile
senza richiedere linvertibilit della mangler function
n-esimo round di DES
DECIFRATURA (DECRYPTION)
esaminando attentamente la figura,
si evince che la decifratura di fatto identica alla
cifratura,
tranne il fatto che le due met da 32 bit sono
invertite
in altre parole, fornendo R
n+1
|L
n+1
in input al round n si
ottiene R
n
|L
n
in uscita
Mangler Function o funzione di Feistel
R
n

n,7

n,8
K
n
K
n,1
K
n,2
K
n,7
K
n,8
+
SB
2
SB
1
SB
7
SB
8
+
+
+

n+1
R
n+1

n,1

n,2

n+1,1

n+1,2

n+1,7

n+1,8
Mangler Function o funzione di Feistel
La mangler function prende in input
i 32 bit di R
n
, o R per semplificare
i 48 bit della chiave K
n
, o K per semplificare
e produce un output da 32 bit
che sommato ( XOR) con L
n
permette di ottenere R
n+1
(il
prossimo R)

la prima operazione lespansione di R, da 32 bit a 48
bit
R scomposto in otto pezzi da 4 bit R = {r
1
, r
2
, , r
8
}
li-esimo pezzo r
i
viene espanso a 6 bit aggiungendo in
testa e in coda rispettivamente lultimo bit di r
i-1
e il primo
bit di r
i+1

r
1
e r
8
sono considerati adiacenti, cio r
0
= r
8
e r
9
= r
1
Espansione di R (R
n
) a 48 bit
R a 32 bit
a 48 bit
chunk 1
di R
espanso
chunk 2
di R
espanso
chunk 3
di R
espanso
chunk 4
di R
espanso
chunk 5
di R
espanso
chunk 6
di R
espanso
chunk 7
di R
espanso
chunk 8
di R
espanso
Mangler Function S-box
la chiave K (K
n
) viene scomposta in otto chunk (pezzi)
da 6 bit
li-esimo chunk di R (R
n
) espanso viene sommato (
XOR) alli-esimo chunk di K
loutput a 6 bit ottenuto viene sottoposto ad una
sostituzione S-box che produce un output di 4 bit
ci sono in tutto otto S-box distinte; li-esima S-box elabora la
somma delli-esimo chunk di K e di R
ogni S-box ha 64 possibili input e 16 possibili output
input diversi possono essere mappati nello stesso output
le S-box sono definite in modo tale che esattamente quattro
input distinti sono mappati in ciascun output possibile
Mangler Function S-box
ogni S-box pu riguardarsi come quattro S-box separate
aventi 4 bit sia in input che in output
i quattro bit in input corrispondono ai bit interni (dal
secondo al quinto) dellinput globale, e
i due bit esterni (primo e sesto) dellinput globale
servono a selezionare quale dei quattro output ottenuti
rappresenta loutput globale

Nelle slide seguenti sono illustrate la tabelle che
definiscono le otto S-box
Mangler function Funzione di Fiestel
Tabella di output di S-box 1
Loutput (a 4 bit) di S-box 1, specifica i primi
quattro bit delloutput della mangler function
loutpout y
1
y
2
y
3
y
4
espresso dai quattro bit riportati
nelle varie celle della tabella

linput x
1
x
2
x
3
x
4
x
5
x
6
espresso
dai quattro bit interni x
2
x
3
x
4
x
5
riportati nelle intestazioni
delle colonne, e
dai due bit esterni x
1
x
6
riportati nelle intestazioni di righe

Tabelle di S-box 2, S-box 3 e S-box 4
Tabelle di S-box 5, S-box 6 e S-box 7
Tabella di S-box 8
Permutazione delloutput dellS-box
Gli otto output, da 4 bit, delle otto S-box sono
riuniti in un unico output a 32 bit che viene
sottoposto ad una permutazione
tale permutazione aumenta il livello di sicurezza
perch le sostituzioni fatte in ciascuna S-box in un
round di DES vengono diffuse negli input di pi S-box
nel round seguente
senza tale permutazione, un bit nella parte sx dellinput
influenzerebbe principalmente alcuni bit della parte sx
delloutput
la permutazione illustrata sotto; il primo bit in output si
ottiene da 16-esimo bit in input, e cos via
Chiavi deboli e semi-deboli
Ci sono sedici chiavi DES il cui utilizzo
sconsigliato
hanno delle propriet strane
tuttavia la probabilit di generarne una
randomicamente 16/2
56

anche sconsigliato usare chiavi DES aventi un
valore (interpretate come intero) pari a qualche
migliaia
un avversario potrebbe tentare una ricerca esaustiva a
partire da 0 incrementando ogni volta di 1

Chiavi deboli e semi-deboli
Le sedici chiavi sospette si ottengono combinando le
quattro configurazioni base di C
0
e D
0
a) tutti 1 b) tutti 0 c) 1 e 0 alternati d) 0 e 1 alternati
quattro di queste corrispondono alle chiavi deboli
quelle che combinano le configurazioni a) e b)
le rimanenti dodici corrispondono alle chiavi semi-deboli

1111 1111 1111 1111
0000 0000 0000 0000
1010 1010 1010 1010
0101 0101 0101 0101
C
0
D
0
4 combinazioni

4 chiavi deboli
16 combinazioni

16 chiavi sospette

Chiavi deboli e semi-deboli
Due chiave sono inverse se cifrare con una
equivale a decifrare con laltra
E(K
1
, m) = D(K
1
-1
, m)
E(K
1
-1
, m) = D(K
1
, m)

Ogni chiave debole coincide con la propria
inversa

Linversa di una chiave semi-debole unaltra
chiave semi-debole
Cosa c di speciale in DES?
DES un algoritmo semplice
ci induce a pensare che ognuno pu sviluppare
un algoritmo di cifratura a chiave segreta!
basta prendere i bit, fare qualche sostituzione, qualche
mescolamento, ripetere pi volte ed ecco lalgoritmo!
in realt ci sono molti misteri da comprendere
come si giunti alle definizioni delle S-box?
stato provato che invertendo la S-box 3 con la S-box 7
DES un ordine di grandezza pi insicuro per alcuni
attacchi specifici
Segretezza del processo di progettazione
Il processo di progettazione di DES non fu reso pubblico
non si sa se alcuni dettagli
progettuali/implementativi
sono stati voluti per aumentare la sicurezza, o
sono puramente casuali, o
sono stati apportati per renderlo vulnerabile a particolari
attacchi noti solo ai progettisti
Si dice che il processo di progettazione di DES fu
mantenuto segreto perch si basava su una attenta
analisi di molti tipi di attacchi crittografici
DES fu progettato per resistere a molti tipi di attacchi
crittografici
rendere pubblico il processo di progettazione implicava
divulgare anche le varie tipologie di attacchi
ALGORITMO IDEA
INTERNATIONAL DATA ENCRYPTION
ALGORITHM
Crittografia a Chiave Segreta
International Data Encryption Algorithm (IDEA)
IDEA, originariamente chiamato IPES (Improved
Proposed Encryption Standard), fu pubblicato nel 1991
Fu progettato per consentire una implementazione
software computazionalmente efficiente
IDEA prende in input blocchi di testo in chiaro da 64 bit
e produce in output blocchi di testo cifrato da 64 bit
La chiave ha una lunghezza di 128 bit
IDEA per molti aspetti somiglia a DES
opera in pi round
entrambi hanno una complicata mangler function che non
sottoposta al vincolo di invertibilit generalmente
richiesto per permettere la decifratura
International Data Encryption Algorithm (IDEA)
la mangler function viene sempre eseguita nella
stessa direzione sia in cifratura che in decifratura
DES e IDEA hanno entrambi la propriet che la cifratura
e la decifratura sono identiche tranne che per
lespansione della chiave
in DES, le stesse chiavi sono usate in ordine inverso
in IDEA, il legame tra le chiavi di cifratura e di
decifratura pi complesso
Struttura base di IDEA
Operazioni primitive
Ogni operazione primitiva in IDEA mappa
due quantit di 16 bit in input
in una quantit di 16 bit in output
mentre ogni S-box di DES mappa una quantit di 6 bit in
input in una di 4 bit in output
IDEA usa tre operazioni, tutte facilmente
calcolabili in software, per creare la biiezione che
specifica la cifratura
tutte e tre le operazioni sono invertibili, cosa
importante per eseguire IDEA allindietro (decifratura)
Operazioni primitive
Le tre operazioni primitive sono
or-esclusivo (XOR ) bit a bit
unaddizione (+) leggermente modificata (mod 2
16
)
una moltiplicazione () leggermente modificata
(mod (2
16
+ 1))
X = x
1
x
2
x
16
Y = y
1
y
2
y
16
Z = z
1
z
2
z
16
X = x
1
x
2
x
16
Y = y
1
y
2
y
16
Z = z
1
z
2
z
16
X = x
1
x
2
x
16
Y = y
1
y
2
y
16
Z = z
1
z
2
z
16
Operazioni primitive
la ragione che non consente di utilizzare laddizione e la
moltiplicazione tradizionale che il risultato a 16 bit e
possono esserci situazioni di overflow dato che anche
gli input sono a 16 bit
laddizione in IDEA consista semplicemente in una
somma binaria in cui si trascura il riporto finale; ci
equivale a dire che si tratta di unaddizione mod 2
16
la moltiplicazione in IDEA si ottiene calcolando prima il
risultato a 32 bit, e prendendo poi il resto della
divisione per 2
16
+ 1; con un po di furbizia ci
fattibile in modo efficiente

Operazioni primitive
la moltiplicazione mod (2
16
+ 1) invertibile, nel senso
che ogni numero x tra 1 e 2
16
ha un inverso y (cio un
numero tra 1 e 2
16
tale che la moltiplicazione per y
annulla leffetto della moltiplicazione per x: a
risulta a x y = a), poich 2
16
+ 1 un numero primo
tuttavia c una piccola furbata, il numero 0, che pu
essere espresso con 16 bit, non avrebbe un inverso,
mentre il numero 2
16
, presente nellinsieme delle classi
di resto modulo 2
16
+ 1, non esprimibile con 16 bit,
entrambi i problemi sono risolti considerando 0
come la codifica di 2
16


Invertibilit delle operazioni primitive
Come possibile invertire le tre operazioni
primitive?
chiaramente non si tratta di uninversione che
permette di risalire ai due operandi a partire dal
solo risultato finale!
se X Y = Z, non possibile risalire ad X e ad Y a partire
dal solo Z,
tuttavia, nellesecuzione allindietro di IDEA saranno
noti un operando e il risultato, diciamo Y e Z, e da
questi sar possibile ottenere X
Invertibilit delle operazioni primitive
Si consideri loperazione generica X op Y = Z e si
supponga di conoscere Y e Z,
allora per ciascuna delle tre operazioni primitive,
X ottenibile come segue

Inversione or-esclusivo (XOR ) bit a bit
se X Y = Z X Y Y = Z Y X = Z Y
rispetto alloperazione ogni numero linverso di se
stesso; Y Y = 0
Invertibilit delle operazioni primitive
Inversione addizione (mod 2
16
)

(+)
se X + Y (mod 2
16
) = Z
X + Y + (-Y)(mod 2
16
) = Z + (-Y) (mod 2
16
)
X = Z + (-Y) (mod 2
16
)
rispetto alloperazione + linverso di un numero Y il numero
-Y (mod 2
16
)
Inversione moltiplicazione (mod 2
16
+ 1)

()
se X Y (mod (2
16
+ 1)) = Z
X Y Y
-1
(mod (2
16
+ 1)) = Z Y
-1
(mod (2
16
+ 1))
X = Z Y
-1
(mod (2
16
+ 1))
Y
-1
(mod (2
16
+ 1)) ottenibile con il lalgoritmo di Euclide

Invertibilit delle operazioni primitive
Lunica parte di IDEA che non
necessariamente invertibile la mangler
function

La gestione del progetto di IDEA stata molto
ingegnosa per evitare la necessit di invertire
la mangler function
Espansione delle chiavi
La chiave di 128 bit espansa in 52 chiavi da
16 bit, K
1
, K
2
, , K
52

lespansione per la cifratura diversa da quella
per la decifratura
cifratura e decifratura coinciderebbero se non
fosse per le chiavi che differiscono
sia per lordine,
sia per il valore delle chiavi usate nei round dispari
Espansione della chiave (cifratura)
La chiave di 128 bit espansa in 52 chiavi da
16 bit, K
1
, K
2
, , K
52

la procedura come segue
le prime otto chiavi K
1
, K
2
, , K
8
sono ottenute
spezzando la chiave da 128 bit in corrispondenza dei bit
in posizione 161, 162, , 167
le successive otto chiavi K
9
, K
10
, , K
16
sono generate
allo stesso modo, ma partendo dal bit in posizione 25 e
tornando allinizio quando si arriva alla fine (scansione
ciclica)
le successive otto chiavi sono generate considerando 25
bit di offset in pi e cos via finch non si ottengono 52
chiavi

Espansione della chiave (cifratura)
si noti che in 6 fasi vengono generate 48 chiavi e in 7
fasi 52 nellultima fase, la settima, sono generate
solo 4 chiavi
lultima fase inizia dal bit in posizione 23 e si estende
fino al bit in posizione 86 i bit in posizione da 1 a 22
e da 87 a 128 sono usati una volta in meno rispetto
quelli in posizione da 83 a 128
Espansione della chiave (cifratura)
generazione delle chiavi K
1
, K
2
, , K
8

generazione delle chiavi K
9
, K
10
, , K
16

Espansione della chiave (cifratura)
la generazione delle 52 chiavi di decifratura sar
illustrata nel seguito

WARNING!
nello standard IDEA c una piccola stranezza: le chiavi
K
50
e K
51
sono invertite!
probabilmente c stata una svista nella definizione
dello standard!
se si desidera implementare IDEA necessario, dopo
aver generato le 52 chiavi di cifratura, provvedere ad
invertire K
50
e K
51

IDEA un round
IDEA esegue 17 round
i round dispari sono diversi da quelli pari
in alcuni casi si parla di 8 round; due round vengono
considerati come un singolo round
linput di ogni round una quantit X a 64 bit separata
in quattro quantit X
a
, X
b
, X
c
, X
d
da 16 bit
cio X = X
a
| X
b
| X
c
| X
d
ad ogni round linput X
a
| X
b
| X
c
| X
d
viene combinato
con alcune delle 52 chiavi per ottenere in output una
versione aggiornata di X
a
| X
b
| X
c
| X
d
i round dispari usano quattro delle 52 chiavi K
i
: K
a
, K
b
, K
c
, K
d
i round pari usano due delle 52 chiavi K
i
: K
e
, K
f

IDEA un round
Ad esempio
nel round 1, K
a
, K
b
, K
c
, K
d
= K
1
, K
2
, K
3
, K
4
nel round 2, K
e
, K
f
= K
5
, K
6
nel round 3, K
a
, K
b
, K
c
, K
d
= K
7
, K
8
, K
9
, K
10
nel round 4, K
e
, K
f
= K
11
, K
12

in un round dispari gli input sono
X
a
, X
b
, X
c
, X
d
K
a
, K
b
, K
c
, K
d

in un round pari gli input sono
X
a
, X
b
, X
c
, X
d
K
e
, K
f

Round dispari
Il round dispari semplice
X
a
X
a
K
a
X
d
X
d
K
d
X
c
X
b
+ K
b
X
b
X
c
+ K
c
Round dispari
Si osservi che un round dispari facilmente invertibile
il vecchio X
a
si ottiene moltiplicando () il nuovo X
a
per
linverso moltiplicativo mod (2
16
+ 1) di K
a
analogamente si procede con X
d
il vecchio X
b
si ottiene sommando al nuovo X
c
linverso
additivo di K
b
, cio sottraendo K
b
analogamente si procede con X
c

in fase di decifratura
il round dispari analogo alla cifratura, tranne il fatto di
dover considerare per ogni chiave il suo inverso
matematico (rispetto le relative operazioni)
ci annulla le operazioni fatte nella fase di cifratura

Round pari
Il round pari pi complicato
gli input sono X
a
, X
b
, X
c
, X
d
e K
e
, K
f


prima vengono calcolate due quantit (a 16 bit)
Y
in
e Z
in
poi viene applicata una funzione, la mangler
function, che
prende in input Y
in
, Z
in
, K
e
e K
f
, e
produce in output due quantit (a 16 bit) Y
out
e Z
out
in fine, vengono calcolati
i nuovi valori di X
a
, X
b
, X
c
, X
d
combinando
i loro vecchi valori con Y
out
e Z
out

Round pari
In particolare, si hanno le seguenti relazioni
Y
in
= X
a
X
b

Z
in
= X
c
X
d
Y
out
= ((K
e
Y
in
) + Z
in
) K
f

Z
out
= (K
e
Y
in
) + Y
out

i nuovi valori di X
a
, X
b
, X
c
, X
d
sono
X
a
X
a
Y
out
X
b
X
b
Y
out
X
c
X
c
Z
out
X
d
X
d
Z
out

Round pari
Inversione del round pari
linversione del round pari veramente ingegnosa
il round pari coincide con il suo inverso
la decifratura di un round pari usa le stesse chiavi
e non il loro inverso matematico
nella decifratura dei round dispari si considerava un set
di chiavi ottenuto facendo linverso matematico delle
chiavi di cifratura
il round pari prende in input
X
a
, X
b
, X
c
, X
d
e
K
e
, K
f

e produce in output
X
a
, X
b
, X
c
, X
d
cio i nuovi valori di X
a
, X
b
, X
c
, X
d
Inversione del round pari
risulta che (sar mostrato dopo)
se gli input del round pari sono X
a
, X
b
, X
c
, X
d
, e
le chiavi rimangono le stesse,
loutput X
a
, X
b
, X
c
, X
d

X
a
X
b
X
c
X
d
X
a
X
b
X
c
X
d
K
e
K
f
round 2n
ENCRYPTION
X
a
X
b
X
c
X
d
X
a
X
b
X
c
X
d
round 2n
DECRYPTION
Inversione del round pari prova
Mostreremo che
inserendo in input al round pari X
a
, X
b
, X
c
, X
d
, e
considerando le stesse chiavi K
e
, K
f

si ottengono in output X
a
, X
b
, X
c
, X
d
tali che
X
a
= X
a
X
b
= X
b
X
c
= X
c
X
d
= X
d

Prova

da X
a
= X
a
Y
out
e da X
b
= X
b
Y
out

Y
in
= X
a
X
b
= (X
a
Y
out
) (X
b
Y
out
) = X
a
X
b
= Y
in
da X
c
= X
c
Z
out
e da X
d
= X
d
Z
out


Z
in
= X
c
X
d
= (X
c
Z
out
) (X
d
Z
out
) = X
c
X
d
= Z
in

Inversione del round pari prova
gli input della mangler function sono gli stessi
Y
out
= Y
out
e Z
out
= Z
out
X
a
= X
a
Y
out
= (X
a
Y
out
) Y
out
=
= X
a
Y
out
Y
out
= X
a
X
b
= X
b
Y
out
= (X
b
Y
out
) Y
out
=
= X
b
Y
out
Y
out
= X
b
X
c
= X
c
Z
out
= (X
c
Z
out
) Z
out
=
= X
c
Z
out
Z
out
= X
c
X
d
= X
d
Z
out
= (X
d
Z
out
) Z
out
=
= X
d
Z
out
Z
out
= X
d

Calcolo chiavi di decifratura
IDEA stato progettato in modo tale che lo stesso
codice (o hardware) pu effettuare sia la cifratura
che la decifratura
scegliendo in modo opportuno (diversamente) le 52
chiavi espanse per la cifratura e per la decifratura
si possono scegliere la chiavi inverse (di decifratura) in
modo tale che la procedura di cifratura, cos come ,
esegue anche la decifratura
lidea base di prendere le inverse (dal punto di vista
matematico) delle chiavi di cifratura e usarle in ordine
opposto
Calcolo chiavi di decifratura
Si considerino le 52 chiavi usate in cifratura K
1
, K
2
, ,
K
52
nei round dispari sono state usate quattro chiavi mentre
nei round pari solo due
round 1 K
1
, K
2
, K
3
, K
4
round 3 K
7
, K
8
, K
9
, K
10


round 17 K
49
, K
50
, K
51
, K
52
quindi le prime quattro chiavi da usare nel primo round di
decifratura devono essere
K
1
: inverso matematico di K
49
; trattandosi di una moltiplicazione
() K
1
deve essere linverso moltiplicativo di K
49
mod (2
16
+ 1)
K
2
: inverso additivo di K
50
; cio -K
50
K
3
: inverso additivo di K
51
; cio -K
51
K
4
: inverso moltiplicativo di K
52

Calcolo chiavi di decifratura
considerando la seguente notazione
im(K
i
): inverso moltiplicativo di K
i
mod (2
16
+ 1)
ia(K
i
): inverso additivo di K
i
mod 2
16

le 52 chiavi di decifratura K
i
sono
round 1: K
1
, K
2
, K
3
, K
4
= im(K
49
), ia(K
50
), ia(K
51
), im(K
52
)
round 2: K
5
, K
6
= K
47
, K
48
round 3: K
7
, K
8
, K
9
, K
10
= im(K
43
), ia(K
44
), ia(K
45
), im(K
46
)
round 4: K
11
, K
12
= K
41
, K
42

round 17: K
49
, K
50
, K
51
, K
52
= im(K
1
), ia(K
2
), ia(K
3
), im(K
4
)


Architettura hardware/software
Da quanto detto, una possibile architettura di
un sistema hardware/software per IDEA la
seguente
52 16 bit

input
plaintext or ciphertext
output
ciphertext or plaintext
ENCRYPTION
KEY EXP
K

E/D

K*

128 bit

64 bit

64 bit

E/D true K* = K
1
, K
2
, , K
52
E/D false K* = K
1
, K
2
, , K
52
Funziona IDEA?
Si mostrato che nota la chiave di cifratura la
decifratura consente di risalire al testo in chiaro

Riguardo il livello di sicurezza offerto da IDEA
non esistono prove formali che stabiliscono in modo
chiaro quanto IDEA sia sicuro
si assume che sia sicuro semplicemente perch ancora
nessuno ha reso pubblico un modo per violarlo
chiaramente, tentare di violare IDEA con un approccio
esaustivo richiede attualmente una quantit smisurata
di risorse di calcolo/tempo
ALGORITMO AES
ADVANCED ENCRYPTION STANDARD
Crittografia a Chiave Segreta
Advanced Encryption Standard (AES)
AES fu introdotto perch
DES aveva una chiave troppo corta
3DES (triplo DES) era troppo lento
IDEA era protetto da un brevetto, era in parte
sospetto e lento
Il NIST si impegn a sviluppare un nuovo standard
non si trattava di un problema solo tecnico, ma
anche di un problema politico
alcuni rami del governo avevano ostacolato il pi possibile la
diffusione e lesportazione della crittografia sicura
il fatto che il governo appoggiasse NIST era visto con
scetticismo; molti non si fidavano
Un po di storia
Il NIST voleva realmente creare un nuovo
standard di sicurezza eccellente
cio efficiente, flessibile, sicuro e free (non protetto),
ma quale poteva essere il modo migliore per farlo?
da un lato NIST doveva essere parte integrante del processo
di progettazione
poich si trattava di uno sforzo ingente e sembrava che
nessun altro avesse le competenze tecniche e lenergia per
compierlo
dallaltro proporre un cifrario sviluppato, segretamente, dalla
NSA non avrebbe funzionato; nessuno si sarebbe fidato, ci
potevano essere delle trapdoor
Un po di storia
Nel 1997 il NIST annunci una gara per la
selezione di un nuovo standard di cifratura
destinato a proteggere informazioni governative
sensibili
la gara era aperta ad ogni persona/gruppo in qualsiasi
parte del mondo
furono specificati i requisiti del cifrario incluso una
documentazione che spiegasse le ragioni delle scelte
progettuali
per molti anni si tennero delle conferenze per la
presentazione di proposte,
che venivano sottoposte a cicli di revisione eseguiti da
crittografi esperti e motivati
Un po di storia
Dopo molti anni di studio e discussioni, il NIST
scelse lalgoritmo Rijndael
proposto da due crittografi belgi Joan Daemen e
Vincet Rijmen
Rijndael prevede diverse lunghezze per i blocchi e
per la chiave
128, 160, 192, 224, e 256 bit
la lunghezza di un blocco e quella della chiave possono
differire
Il 26 Novembre 2001, viene emanato AES
una standardizzazione di Rijndael
Un po di storia
Lo standard AES
fissa la lunghezza dei blocchi a 128 bit
la chiave pu essere di 128, di 192 o di 256 bit
si parla di AES-128, AES-192 e AES-256
Nel seguito si descriver Rijndael
specificando di volta in volta i parametri di AES
Rijndael somiglia a DES e a IDEA
ci sono pi round che strapazzano un blocco di testo
in chiaro per ottenere il corrispondente cifrato, e
c un algoritmo per lespansione della chiave; a partire
dalla chiave segreta genera le chiavi da usare nei vari
round
Rijndael/AES parametri
Rijndael ha una struttura flessibile grazie alluso
di due parametri indipendenti, e di un terzo
parametro derivato dai primi due
N
b
dimensione di un blocco: numero di parole (word)
da 32 bit (colonne da 4 ottetti) in un blocco da cifrare
in AES N
b
= 4, un blocco ha lunghezza 128 bit 4 parole da
32 bit; 4 colonne da 4 ottetti
ottetto
N
b
Rijndael/AES parametri
N
k
dimensione della chiave: numero di parole
(word) da 32 bit (colonne da 4 ottetti) in una
chiave di cifratura
in AES-128 N
k
= 4
in AES-192 N
k
= 6
in AES-256 N
k
= 8
in Rijndael N
k
pu essere un qualsiasi intero tra 4 e 8

ottetto
N
K
Rijndael/AES parametri
N
r
numero di round: questo parametro dipende
da N
b
e da N
k
pi lunga la chiave pi round sono necessari per
rendere la violazione della cifratura difficile quanto un
attacco a forza bruta sulla chiave
il numero di round deve aumentare allaumentare della
lunghezza di un blocco (e della chiave); ogni bit del
testo in chiaro (e della chiave) deve influenzare (in
modo complesso) ciascun bit del testo cifrato
Rijndael specifica che N
r
= 6 + max(N
b
, N
k
)
in AES-128 N
r
= 10
in AES-192 N
r
= 12
in AES-256 N
r
= 14
Array di stato
Rijndael mantiene un array di stato
rettangolare
ogni elemento dellarray un ottetto
complessivamente ci sono N
b
colonne da 4 ottetti
lo stato iniziale ottenuto popolando larray, colonna
per colonna, mediante le N
b
colonne da 4 ottetti che
costituiscono il blocco di input
durante gli N
r
round lo stato viene modificato
il blocco di output dellalgoritmo si ottiene leggendo
colonna per colonna lo stato finale
Array di stato
Prima del round 1, tra i vari round, e dopo il
round N
r
viene eseguito
lor-esclusivo ( XOR) del contenuto dellarray di
stato, con
i prossimi 4N
b
ottetti della chiave espansa
gli ottetti della chiave espansa vengono letti per
colonna in modo da formare un matrice di N
b
colonne
da 4 ottetti ciascuna
i primi N
r
1 round comprendono una sequenza di
operazioni identiche, mentre il round N
r
ne
omette una
Struttura base di Rijndael
Espansione della chiave
La chiave segreta di Rijndael un blocco
formato da 4N
k
ottetti
Lalgoritmo di espansione della chiave
scandisce la chiave in modo da ottenere N
k

colonne da 4 ottetti,
poi espande la matrice ottenuta introducendo
delle colonne (da 4 ottetti) aggiuntive,
lespansione si arresta quando si hanno
complessivamente (N
r
+ 1)N
b
colonne
lesatta quantit di chiavi espanse
Espansione della chiave
la procedura di espansione usa lo stesso tipo di
operazioni primitive usate durante i round
Numerazioni
righe, colonne, e chiavi di round sono numerate a
partire 0
i round sono invece numerati a partire da 1

Operazioni primitive
Rijndael utilizza quattro operazioni primitive
1. or-esclusivo (XOR )
in cui sono coinvolte le chiavi espanse
2. sostituzione di byte, chiamata S-box
si tratta di una sostituzione ottetto-per-ottetto (byte-per-
byte) definita da una specifica tabella
per ciascuno dei possibili 256 byte in input viene specificato
il corrispondente byte in output tra i 256 possibili
per la rappresentazione della tabella fa comodo usare la
notazione esadecimale; ad esempio FC rappresenta il 252-
esimo byte
la tabella pu essere visualizzata come una matrice 1616

Rijndael Sbox
Esempio
il 97-esimo byte il numero
61
HEX
in esadecimale,

quindi mappato nel byte
nella riga 6 e colonna 1
che EF
HEX
che corrisponde
al 239-esimo byte

in binario si ha che
(1100001)
2
= (97)
10
mappato in
(11101111)
2
= (239)
10
Operazioni primitive
3. scorrimento circolare di ottetti (byte) di una riga o di
una colonna pari a un qualche numero di celle
4. mescolamento colonne, MixColumn: sostituzione di
una colonna di 4 ottetti con unaltra colonna di 4
ottetti
MixColumn pu essere implementata con una singola tabella
contenente 256 colonne di 4 ottetti
ciascuno dei 4 ottetti in una colonna di input usato come
un indice per recuperare una colonna dalla tabella
ogni colonna recuperata dalla tabella ruotata (scorrimento
verticale circolare dallalto in basso) verticalmente in modo
tale che il suo ottetto in cima sia posto nella stessa riga
dellottetto di input;
e le quattro colonne ruotate sono sommate XOR () per
produrre la colonna di output

MixColumn mediante tabella di lookup
4 ottetti di una
colonna di input
scorrimento della colonna per
allinearla allottetto di input ad
da cui stata derivata
4 ottetti di una
colonna di output
MixColumn tabella di lookup
Esempio
Allottetto 2b corrisponde la colonna
di 4 ottetti che si trova allincrocio della
riga 2 e della colonna b, cio la
colonna
56
2b
28
7d


Invertibilit delle operazioni primitive
Lor-esclusivo (XOR ) chiaramente invertibile
coincide con il suo inverso: X Y Y = X
Linversa della S-box si ottiene considerando
semplicemente una tabella diversa
cio la tabella inversa
Linversa dello scorrimento circolare di una riga o
colonna si ottiene semplicemente eseguendo lo
stesso scorrimento, ma in direzione opposta
Linversa di MixColumn, detta InvMixColumn,
esattamente come MixColumn, ma con una
tabella di lookup diversa
Rijndael S-box inversa
InvMixColumn tabella di lookup
Decifratura di Rijndael
Il cifrario inverso di Rijndael pu pertanto
implementarsi applicando
le inverse delle operazioni primitive,
eseguite in sequenza opposta rispetto quella di cifratura
Tuttavia, si pu mostrare che,
grazie alle propriet matematiche di cui gode Rijndael,
il cifrario inverso ha una struttura molto simile al cifrario
diretto, ma con operazioni invertite, e con le chiavi di
round non soltanto in ordine inverso, ma
con InvMixColumn applicato a tutte tranne la prima e
lultima colonna
Espansione della chiave
Lespansione delle chiavi
inizia con la chiave segreta organizzata come N
k

colonne di 4 ottetti, e
iterativamente genera le prossime N
k
colonne della
chiave espansa
Espansione della chiave
Per generare li-esimo insieme di N
k
colonne
i inizia da 1; lo 0-esimo insieme la chiave segreta
serve soltanto l(i-1)-esimo insieme di colonne
la prima colonna (colonna 0) del nuovo insieme si
ottiene mediante
uno scorrimento circolare verticale di una cella
dellultima colonna dell(i-1)-esimo insieme, e
applicando la S-box ad ogni ottetto, e
sommando in XOR () una costante C
i
con lottetto 0
(che sta in cima)

Espansione della chiave (N
k
6)
le rimanenti colonne sono generate a turno
sommando in XOR la precedente colonna con,
la corrispondente colonna del precedente (i-1)-esimo
insieme
Valori delle costanti C
i
1 2 4 8 10 20 40 80 1b 36
6c d8 ab 4d 9a 2f 5e bc 63 c6
97 35 6a d4 B3 7d fa ef c5 (91)
i = 1 to 10
i = 11 to 20
i = 21 to 30
Espansione della chiave (N
k
> 6)
c uneccezione nel procedimento di espansione
della chiave,
se N
k
> 6, allora necessario uno step aggiuntivo
per generare la colonna 4
necessario applicare la S-box ad ogni ottetto

lespansione della chiave termina non appena (N
r

+ 1)N
b
colonne di chiavi espanse sono generate
Espansione della chiave N
k
> 6
Rijndael round
Ogni round di Rijndael una sequenza identica di tre
operazioni:
1. Ogni ottetto della matrice di stato viene sottoposto
alla S-box
2. Scorrimenti circolari
La riga 1 dello stato viene fatta scorrere a sx di una colonna
La riga 2 dello stato viene fatta scorrere a sx di 2 + N
b
/8
colonne (2 se N
b
< 8, 3 altrimenti)
La riga 3 dello stato viene fatta scorrere a sx di 3 + N
b
/7
colonne (3 se N
b
< 7, 4 altrimenti)
(in AES si semplifica in scorrimento a sx di i colonne della riga i)
3. Ogni colonna dello stato viene sottoposta alla
MixColumn; il round N
r
omette questa operazione
Rijndael round invertito
Essendo ogni operazione invertibile
la decifratura pu effettuarsi applicando in ordine
inverso linversa (in senso matematico) di ogni
operazione, e
usando le chiavi di round in ordine inverso
Tuttavia la decifratura pu avere la stessa
struttura della cifratura
necessario usare le chiavi di round in ordine
opposto, e
applicare InvMixColumn ad ogni colonna delle chiavi
espanse tranne quelle del round iniziale e finale

Rijndael round invertito
Ogni round invertito di Rijndael una sequenza
identica di tre operazioni:
1. Ogni ottetto della matrice di stato viene sottoposto
alla S-box
2. Scorrimenti circolari
La riga 1 dello stato viene fatta scorrere a dx di una
colonna
La riga 2 dello stato viene fatta scorrere a dx di 2 + N
b
/8
colonne (2 se N
b
< 8, 3 altrimenti)
La riga 3 dello stato viene fatta scorrere a dx di 3 + N
b
/7
colonne (3 se N
b
< 7, 4 altrimenti)
(in AES si semplifica in scorrimento a dx di i colonne della riga i)
3. Ogni colonna dello stato viene sottoposta alla
InvMixColumn; il round N
r
omette questa operazione

CIFRARI A FLUSSO E RC4
Crittografia a Chiave Segreta
Cifrari a blocchi vs cifrari a flusso
Un cifrario a blocchi elabora un blocco di
elementi in ingresso per volta
produce un blocco di uscita per ciascun blocco di
ingresso
il testo in chiaro deve essere preliminarmente suddiviso
in blocchi
il testo cifrato si ottiene combinando i vari blocchi cifrati
DES, IDEA e AES sono esempi di cifrari a blocchi simmetrici
Un cifrario a flusso elabora continuamente gli
elementi in ingresso
produce in uscita un flusso di elementi cifrati
gli elementi cifrati vengono prodotti singolarmente, uno alla
volta, man mano che la cifratura procede
Cifrari a blocchi vs cifrari a flusso
Sebbene i cifrari a blocchi siano molto pi
comuni, in alcune applicazioni i cifrari a flusso
sono pi adatti
applicazioni che richiedono la cifratura/decifratura di
un flusso di dati
ad esempio le trasmissioni di stream audio/video
di seguito sar esaminato il cifrario a flusso pi
popolare: RC4
preliminarmente sar discussa la struttura generale di
un cifrario a flusso
Struttura di un cifrario a flusso
Un tipico cifrario a flusso cifra il testo in chiaro un
byte per volta
sebbene possa essere progettato per agire su unit
pi grandi di un byte
pseudo-random
stream gener.
pseudo-random
stream gener.
K
K
plaintext
stream
plaintext
stream
ciphertext
stream
ENCRYPTION DECRYPTION
keystream keystream
Struttura di un cifrario a flusso
La chiave segreta K (di lunghezza finita)
lingresso di un generatore pseudo-casuale di
bit
che produce un flusso (di lunghezza arbitraria) di
byte apparentemente casuale, chiamato chiave di
flusso (keystream)
la chiave di flusso un flusso
impredicibile se non si conosce la chiave, ma
viene generato in modo deterministico a partire
dalla chiave
non presenta regolarit statistiche

Cifratura
Il keystream combinato un byte alla volta
con il flusso del testo in chiaro mediante un
or-esclusivo (XOR ) bit a bit
il risultato di questo processo il flusso cifrato
ad esempio, se
p
i
= 11001100 li-esimo byte del flusso del testo in
chiaro, e
k
i
= 01101100 li-esimo byte del keystream, allora
c
i
= p
i
k
i
= 10100000 li-esimo byte del flusso del
testo cifrato
Decifratura
La decifratura richiede luso della stessa
sequenza pseudo-casuale (keystream)
combinata un byte alla volta con il testo cifrato
mediante or-esclusivo (EX-OR ) bit a bit
ad esempio, se
c
i
= p
i
k
i
= 10100000 li-esimo byte del flusso del
testo cifrato, e
k
i
= 01101100 li-esimo byte del keystream, allora
p
i
= c
i
k
i
= (p
i
k
i
) k
i
= p
i
(k
i
k
i
) = p
i
= 11001100
li-esimo byte del flusso del testo in chiaro
Osservazioni
Pi casuale laspetto del keystream, pi
randomizzato il testo cifrato
rendendo la crittoanalisi pi difficile
Pertanto il keystream
dovrebbe avere un periodo grande
la funzione deterministica che genera il keystream, a partire
dalla chiave segreta, per forza di cose periodica
dovrebbe approssimare il pi possibile un flusso
casuale
ad esempio, 0 e 1 dovrebbero essere equamente presenti
riguardando il keystream come una sequenza di byte, tutti i
256 possibili byte dovrebbero apparire disordinatamente e
con una frequenza uniforme
Osservazioni
Come nei cifrari a blocchi, necessario che la
chiave sia sufficientemente lunga per
proteggersi dagli attacchi a forza bruta
preferibile una lunghezza della chiave di almeno
128 bit
Cifrari a flusso vs cifrari a blocchi
Se un cifrario a flusso correttamente progettato
pu essere sicuro tanto quanto un cifrario a blocchi
a parit di lunghezza della chiave segreta

Il vantaggio principale di un cifrario a flusso che
quasi sempre pi veloce, vedi tabella, ed
facilmente implementabile
spesso bastano poche linee di codice, vedi descrizione RC4
Cifrari a flusso vs cifrari a blocchi
Confronto delle velocit di cifrari simmetrici su
un Pentium II
Cifrario Lunghezza della chiave Velocit variabile (Mbps)
DES 56 9
3DES 168 3
RC2 variabile 0,9
RC4 variabile 45
Cifrari a flusso vs cifrari a blocchi
Il vantaggio di un cifrario a blocchi che la chiave
segreta riutilizzabile per pi comunicazioni
se due testi in chiaro sono cifrati con la stessa chiave
segreta, usando un cifrario a flusso, la crittoanalisi
spesso molto semplice
se i due flussi di testo cifrato sono sommati in XOR ()
il flusso risultante lo XOR dei flussi di testo in
chiaro
se i testi in chiaro sono stringhe testuali, numeri di carta di
credito o altri flussi di byte con propriet note la
crittoanalisi pu aver successo
Algoritmo RC4
RC4 un cifrario a flusso
con dimensione della chiave variabile,
con funzionamento orientato al byte
fu progettato nel 1987 da Ron Rivest RSA Security
Si basa sulluso di una permutazione casuale
dagli studi sembra che il periodo del cifrario sia
superire a 10
100

viene usato
negli standard SSL/TLS (Secure Socket Layer/Transport Layer
Security)
nel protocollo WEP (Wired Equivalent Privacy)
nel protocollo WPA (WiFi Protected Access)
Algoritmo RC4
Lalgoritmo RC4 molto semplice da spiegare;
basta spiegare come viene generato il
keystream
lalgoritmo mantiene un array di stato
monodimensionale S contenente 256 byte
S[0], S[1], , S[255] sono i 256 byte
ogni elemento/byte S[i] rappresenta un numero da 1
a 255
una chiave di lunghezza variabile da 1 a 256 byte
(da 8 a 2048 bit) viene usata per inizializzare il
contenuto dellarray di stato
Algoritmo RC4
S contiene in ogni momento una delle 256!
permutazioni dei numeri da 0 a 255
per la cifratura/decifratura viene generato un byte
k selezionando da S uno dei 255 elementi in
maniera sistematica
subito dopo la generazione del byte k, gli elementi
di S vengono permutati
lalgoritmo prosegue alternando le ultime due fasi
(generazione di k e permutazione) finch il flusso
in input non termina

RC4 inizializzazione
gli elementi di S vengono impostati uguali ai valori da
0 a 255 in ordine crescente
S[0] = 0, S[1] = 1, , S[255] = 255
un vettore temporaneo T, della stessa lunghezza di S,
viene usato per memorizzare temporaneamente la
chiave K
se la lunghezza di K 256 byte K viene trasferita in T
altrimenti, K viene copiata pi volte in T fino a riempirlo
/* Inizializzazione */
for i = 0 to 255 do {
S[i] = i;
T[i] = K[i mod keylen]; // keylen: lunghezza di S
}
RC4 permutazione iniziale
successivamente si user T per produrre la
permutazione iniziale
si scandisce S e per ciascun S[i], si scambia S[i] con un
altro elemento di S scelto in modo sistematico in base,
tra laltro, al contenuto di T[i]
poich la sola operazione su S lo scambio, il solo
effetto una permutazione
S contiene ancora tutti i numeri da 0 a 255
/* Permutazione iniziale di S */
j = 0;
for i = 0 to 255 do {
j = (j + S[i] + T[i]) mod 256;
scambia(S[i], S[j]);
}
RC4 generazione del flusso
Una volta che S inizializzato, la chiave
segreta K (quindi anche larray T) non viene
pi utilizzata
il keystream viene generato facendo una
scansione ciclica di S
ciascun elemento S[i] viene scambiato con un altro byte
di S a secondo di uno schema che dipende dalla
configurazione corrente di S
dopodich, viene generato un singolo byte k del
keystream sempre in base alla configurazione corrente
di S
RC4 generazione del flusso
/* Generazione del flusso */
i, j = 0;
while (true) {
i = (i + 1) mod 256;
j = (j + S[i]) mod 256;
scambia(S[i], S[j]);
t = (S[i] + S[j]) mod 256;
k = S[t];
}
Bibliografia
[KPS02] C. Kaufman, R. Perlman, M. Speciner. Network
Security Private Communication in a Public World.
Prentice Hall.
[PFL08] C. P. Pfleeger, S. L. Pfleeger. Sicurezza in
Informatica. Pearson, Prentice Hall.
[STA07] W. Stallings. Sicurezza delle reti. Pearson,
Prentice Hall.
[Wiki-it] http://it.wikipedia.org/wiki/
[Wiki-en] http://en.wikipedia.org/wiki/
[ISECOM] Institute for Security and Open
Methodologies