AES - ultragogeta.com

Download Report

Transcript AES - ultragogeta.com

Lo Standard AES
(cenni preliminari)
Nel 1997 il NIST emise una richiesta di proposte per un nuovo
algoritmo detto AES, Advanced Encryption Standard,
caratterizzato da una sicurezza almeno uguale a quella offerta da
3DES ma più efficiente rispetto ad esso. Il NIST impose che i vari
candidati che intendevano partecipare alla selezione per diventare il
nuovo algoritmo AES, realizzassero una cifratura simmetrica con
blocchi di lunghezza pari a 128 bit e chiavi lunghe 128, 192 o 256
bit. I criteri su cui NIST basò la selezione tra i potenziali candidati
appartenevano alle seguenti categorie:
•
•
•
Sicurezza
Costo
Caratteristiche dell’algoritmo e dell’implementazione
0
Advanced Encryption Standard
(cenni preliminari)
5 finalisti su 16 candidati:
MARS, RC6, Rijndael, Serpent, Twofish, il vincitore della gara
internazionale è Rijndael (si pronuncia come “rain doll”)
•Il NIST ha completato il processo di valutazione e pubblicato lo
standard finale nel 2001. E’ stato selezionato l’algoritmo Rijndael
proposto da due crittografi belga, Dr. Joan Daemen e Dr. Vincent
Rijmen . AES è divenuto uno standard pubblico
Nel 2003 la NSA ha approvato AES a 128 bit per i documenti
classificati dalle amministrazioni USA come SECRET, e AES a 192
o 256 bit per i documenti classificati TOP-SECRET
1
Advanced Encryption Standard
Valutazione di Rijndael
• eccellenti prestazioni su tutte le piattaforme
(dai main frame alle smart card),
• buon margine di sicurezza a fronte di ogni attacco conosciuto,
• bassa richiesta di memoria, sia ROM che RAM,
• veloce procedura di key setup,
• buone caratteristiche per l'esecuzione parallela delle istruzioni,
• chiavi e blocchi di lunghezza variabile per multipli di 32 bit.
2
Rijndael
• Progettato in Belgio da V. Rijmen e J. Daemen
• Blocchi di dati da 128 bit e chiavi da 128/192/256 bit
• Cifrario non Feistel ma iterativo
• Elabora i dati come blocchi (State) di 4 words da 4 byte
• In ogni stadio opera sull’intero blocco di dati
• Obiettivi del progetto
• Resistenza a tutti gli attacchi conosciuti
• Velocità e compattezza di codice sulle CPU più diffuse
• Semplicità concettuale
3
Rijndael (chiave 128 bit)
4
Parametri di AES
5
State array
L’unità di elaborazione dell’algoritmo non è il bit ma il
byte.
Per un blocco di 128 bit la matrice in input è costituita
da 16 byte, ovvero da una matrice quadrata 44 .
La chiave sarà rappresentata da matrici 44 ,
46 o 48 (vengono mantenute 4 righe per consentire
operazioni con il blocco in input) corrispondenti a
lunghezze della chiave di 128, 192 e 256 bit
rispettivamente
6
State array
Le operazioni non vengono effettuate sull’input, ma su una matrice
di appoggio detta State (o matrice di Stato), su cui l’input viene
“copiato” e da cui verrà estratto l’output.
La copiatura viene realizzata per colonne, ovvero i primi 4 byte
dell’input formano la prima word di State, i secondi 4 byte la
seconda e così via.
Al termine, dopo l’ultima fase il risultato viene copiato nell’array di
Output.
Input bytes
State array
Output bytes
7
Advanced Encryption Standard
Rijndal è definito nel campo di Galois GF(28), rispetto al polinomio
irriducibile
P=x8+x4+x3+x+1
I n questo sistema matematico, un numero è rappresentato da una
serie di coefficienti a questo polinomio di grado 8. Per esempio, il
numero 23 in binario 10111, corrisponde al polinomio
1x4+0x3+1x2+1x+1= x4+x2+1x+1
L’aggiunta dei coefficienti viene eseguita (mod 2), in modo che
l’addizione corrisponda alla sottrazione, che equivale all’OR
esclusivo:
0+0=0, 1+0=0, 1+1=0
La moltiplicazione è quella standard tra polinomi:
8
(x3+1)*(x4+x)=(x7+x4+x4+x)
Advanced Encryption Standard
Notazione
word
Nb
Nk
Nr
indica una singola colonna di un blocco (sia di quello
in input che di quello della chiave);
indica il numero di word di un blocco in input;
indica il numero di word della chiave;
indica il numero di round in cui avverrà la codifica.
9
Advanced Encryption Standard
Versione ufficiale dell’AES
Nb
Nk
Nr
Nr
Nr
4
4,6,8 a seconda del tipo di chiave usata.
10 round per una chiave a 128 bit
12 round per una chiave a 192 bit
14 round per una chiave a 256 bit
10
Caratteristiche generali dell’AES
Funzioni principali: KeyExpansion e Chiper
•KeyExpansion è un generatore di chiavi. La chiave fornita come
input viene espansa in un array di 44 words a 32 bit. Per ciscuna fase
vengono utilizzate come chiavi quattro word distinte.
•Chiper è la funzione che codifica il messaggio, implementa gli Nr
round, di cui Nr- 1 sono identici, mentre uno è diverso dagli altri; gli
Nr-1 round identici codificano il messaggio attraverso l’applicazione
di quattro funzioni in cascata
•il round rimanente è diverso dagli altri poiché sostituisce a
MixColumns un’altra occorrenza di AddRoundKey, e necessita quindi
di due chiavi; inoltre, le funzioni vengono applicate in ordine diverso
11
Caratteristiche generali dell’AES
12
Funzioni implementate in ogni ciclo (round)
•Sostituzione dei Byte
Computa una sostituzione di byte utilizzando una tavola di sostituzione
nota come S-Box
•Scorrimento delle righe
Realizza uno spostamento ciclico delle righe dello State che contengono
i byte dei dati di input
•Mescolamento delle colonne
mescolanza dei byte che utilizza l’aritmetica su GF(28)
•Aggiunta della sottochiave
Operazione di XOR bit-a-bit del blocco corrente con la Chiave di
13
Round.
Un round di Rijndael
INPUT: 128 bit in 4 blocchi da 32
KEY:
128 bit
Substitute bytes (sostituzione)
Shift rows (permutazione)
Mix columns (sostituzione)
Ki
da ripetere r volte
(da 10 a 14)
Add Round Key (sostituzione)
OUTPUT: 128 bit in 4 blocchi da 32
14
•Advanced Encryption Standard
15
•Advanced Encryption Standard
•Sostituzione dei Byte (substitute bytes transformation)
•Scorrimento delle righe
•Mescolamento delle colonne
•Aggiunta della sottochiave
Utilizza una struttura di sostituzione simile a quella di
DES, sostituendo ogni byte di un blocco di 128 bit
secondo una tabella di sostituzione.
E’ invertibile e non lineare, caratteristica che costituisce
un punto di forza dell’AES.
Si tratta di un’operazione di confusione diretta
16
•Advanced Encryption Standard
17
Costruzione S-box
1) Inizializzazione dell’S-box con valori di byte ascendenti
00 01 02 03 04 . . . . 0F
10 11 12 13 14 . . . . 1F
. . . . . . . . . . . . ………….
F0 F1 F2 F3 F4 . . . . FF
2) Processo di mappatura di ciascun byte dell’S-box nel suo inverso
moltiplicativo nel campo GF (28)
3) Si applica a ciascun bit di ogni byte la trasformazione affine su
GF (2)
bi '  bi  b( i  4 ) mod 8  b( i  5 ) mod 8  b( i  6 ) mod 8  b( i  7 ) mod 8  c i
ove ci è il bit i-esimo di un byte c = {63} in esadecimale oppure{ 0
18
1 1 0 0 0 0 1 1 } in binario
Costruzione S-box
L' elemento della S-Box prodotto dalla trasformazione
affine può essere espresso in forma matriciale come:
19
Costruzione S-box
La figura seguente illustra l' effetto della trasformazione
SubBytes () sull'array State
20
Costruzione S-box
La S-Box usata nella trasformazione SubBytes () viene ora
presentata in forma esadecimale:
Ad esempio, se s1,1 = { 5 3 }, allora il valore della sostituzione
dovrebbe essere determinato dall'intersezione della riga di indice ' 5 '
con la colonna di indice ' 3 '. Il risultato di tale sostituzione sarebbe
21
dunque il valore s'1,1 = { e d }.
Costruzione S-box
Esempio:
supponiamo di avere il
numero (53)16 che in binario è rappresentato dal byte
01010011:
16 10 (53) 516 3 (83) e, poiché
rappresentato come elemento del campo diventa:
x6 + x4 + x +1.
L’inverso moltiplicativo (nel campo GF(28 ) ) è:
x7 + x6 + x3 + x .
Quindi in notazione binaria abbiamo:
(a7a6a5a4a3a2a1a0)=(11001010).
22
Costruzione S-box
Calcoliamo allora
b0  a 0  a 4  a 5  a 5  a 7  c 0 m od 2  0  0  0  1  1  1 m od 2  1
b1  a1  a 5  a 6  a 7  a 0  c1 m od 2  1  0  1  1  0  1 m od 2  0
…………………
e così via
Il risultato è quindi:
(b7b6 b5b4b3b2b1b0 ) = (11101101)2
In notazione esadecimale 01010011 è ED
23
Advanced Encryption Standard
•Sostituzione dei Byte
•Scorrimento delle righe ( Shift Rows transformation)
•Mescolamento delle colonne
•Aggiunta della sottochiave
E’ un passaggio di trasposizione.
Per le dimensioni del blocco pari a 128 o 192 bit, la riga
n viene fatta scorrere in modo circolare di n-1 byte; per i
blocchi di 256 bit, la riga 2 viene fatta scorrere di 1 byte
mentre le righe 3 e 4 sono scostate rispettivamente di 3
e 4 byte.
24
Si tratta di un’operazione di confusione diretta.
Scorrimento delle righe
Blocco di 128 bit
L’operazione è modulo 4, quindi i byte che muovendosi a
sinistra “escono” dalla matrice, rientrano da destra.
25
Advanced Encryption Standard
•Sostituzione dei Byte
•Scorrimento delle righe
•Mescolamento delle colonne (mix columns transformation)
•Aggiunta della sottochiave
Questo passaggio implica lo scorrimento verso sinistra e
l’esecuzione di un OR esclusivo dei bit con se stessi.
Queste operazioni consentono sia la confusione sia la
diffusione.
26
Mescolamento delle colonne
•La trasformazione MixColumns () opera sulle colonne dell'array
State. Le colonne sono trattate come polinomi di 4 termini con
coefficienti nel campo finito GF(28) e sono moltiplicate modulo
x4+1 con un fissato polinomio.
•Ciò può essere scritto come una moltiplicazione matriciale.
27
Mescolamento delle colonne
Come risultato di questa moltiplicazione, i 4 byte in una
colonna sono sostituiti dai byte seguenti:
s'0,c = ({02} · s0,c)  ({03} · s1,c)  s2,c  s3,c
s'1,c = s0,c  ({02} · s1,c)  ({03} · s2,c)  s3,c
s'2,c = s0,c  s1,c  ({02} · s2,c)  ({03} · s3,c )
s'3,c = ({0b} · s0,c )  s1,c  s2,c  ({0e} · s3,c )
28
Mescolamento delle colonne
La trasformazione MixColumns () è stata scelta secondo
i seguenti criteri:
•1. Invertibilità;
•2. linearità in GF(28);
•3. la velocità su microprocessori a 8-bit;
•4. la simmetria;
•5. la semplicità di descrizione.
I criteri 2, 4 e 5 hanno condotto alla scelta del modulo della
moltiplicazione polinomiale x4+1, i criteri 1, 3 impongono le
condizioni sui coefficienti. Il criterio 3 impone che i coefficienti
abbiano valori piccoli, in ordine di preferenza {00}, {01}, {02}, {03}.
29
Advanced Encryption Standard
•Sostituzione dei Byte
•Scorrimento delle righe
•Mescolamento delle colonne (mix columns transformation)
•Aggiunta della sottochiave (AddRoundKey Transformation)
Una porzione della chiave per questo ciclo viene
sottoposta a OR esclusivo con il risultato del ciclo.
Questa operazione fornisce la confusione e incorpora la
chiave
30
Aggiunta della sottochiave
• L’operazione AddRoundKey consiste in un bitwise
XOR tra i 128 bits dello State e i 128 bits della
round key
• AES usa una chiave di 128 bit (4 words da 4 bytes)
• Nel processo di encryption si usano 11 round key di 4
words
• In totale si usano 44 words da 4 bytes = 176 bytes =
1408 bits
• 1408 bits ottenuti tramite il processo di key expansion
31
Aggiunta della sottochiave
Nota
•Si ha sia confusione che diffusione. I bit della chiave si
combinano spesso con i bit del risultato intermedio
determinando la diffusione dei bit della chiave nel
risultato finale.
•I 4 passaggi sono rapidi
32
Aggiunta della sottochiave
33
AES Key expansion
Consideriamo la versione di AES a 10 round, ossia la versione che
usa una chiave a 128 bit.
Ci servono un numero di chiavi adatto a 11 round, ognuna delle quali
è costituita da 16 byte. L’algoritmo che genera le chiavi è word–
oriented, dove una parola (word appunto) è formata da 4 byte o,
equivalentemente, da 32 bit; quindi, ogni chiave di un round è
costituita da 4 parole.
L’insieme delle chiavi di tutti i round è detto chiave espansa
(expanden key), è formato da 44 parole ed è denotato con
w[0],...,w[43], dove ogni w[i] è una parola.
La chiave espansa è costruita usando la funzione KeyExpansion
34
AES Key expansion
35
AES Key expansion
•L’input di questo algoritmo è la chiave di 128 bit, key, che è
utilizzata come un vettore di byte, key[0],...key[15] ; l’output è il
vettore delle parole w.
La funzione KeyExpansion incorpora altre due funzioni, che sono
chiamate RotWord e SubWord; la funzione RotWord esegue uno
spostamento (shift) ciclico a sinistra dei quattro byte B0 , B1 , B2 ,
B3 , cioè:
mentre la funzione SubWord (B0 , B1, B2, B3) applica la S-Box ad
ognuno dei quattro byte B0 , B1, B2, B3 , cioè:
Il risultato dei passi 1 e 2 è sottoposto a uno xor con una costante
di fase
36
AES Key expansion
37
AES Key expansion
Nota
Le prime Nk word della chiave espansa sono ottenute direttamente
dalla chiave di cifratura, mentre ogni word successiva, w[ i ],
è uguale allo XOR della word precedente, w[ i-1 ], con la word
di Nk posizioni più indietro.
38
AES in dettaglio
•http://www.dia.unisa.it/~ads/corso-security/www/CORSO-9900/aes/index.htm
39