Académique Documents
Professionnel Documents
Culture Documents
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