Crittografia/AES: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m →‎Descrizione dell'algoritmo: correggo mio errore...
Riga 28:
# <tt>AddRoundKey</tt> &mdash; Ogni byte della tabella viene combinato con la chiave di sessione, la chiave di sessione viene calcolata dal gestore delle chiavi.
L'ultimo round salta il <tt>MixColumns<tt>.
 
=== <tt>SubBytes</tt> ===
 
Nel passaggio <tt>SubBytes<tt> ogni byte della matrice viene modificato tramite la S-box a 8 bit. Questa operazione provvede a fornire la non linearità all'algoritmo. La S-box utilizzata è derivata da una funzione inversa nei '''Campo finito|campi finiti''' (''2<sup>8</sup>''), conosciuta per avere delle ottime proprietà di non linearità. Per evitare un potenziale attacco basato sulle proprietà algebriche la S-box è costruita combinando la funzione inversa con una trasformazione affine invertibile. La S-box è stata scelta con cura per non possedere punti fissi e nemmeno l'inversa possiede punti .
 
=== <tt>ShiftRows</tt> ===
Il passaggio <tt>ShiftRows</tt> provvede a scostare le righe della matrice di un parametro dipendente dal numero di riga. Nell'AES la prima riga è invariata, la seconda viene spostata di un passo verso sinistra, la terza di due posto e la quarta di tre posti. In questo modo l'ultima colonna dei dati in ingresso formano la diagonale della colonna in uscita. (Rijndael utilizza un disegno leggermente diverso per via delle matrici di lunghezza non fissa.)
 
=== <tt>MixColumns</tt> ===
Il passaggio <tt>MixColumns</tt> prende quattro byte si ogni colonna e li combina utilizzando una trasformazione lineare invertibile. Utilizzati in congiunzione, <tt>ShiftRows</tt> e <tt>MixColumns</tt> provvedono all'operazione di diffusione nell'algoritmo. Ogni colonna è gestita da un polinomio definito sui '''campi finiti''' (''2<sup>8</sup>'') e questa <math>x^4+1</math> viene moltiplicata con un polinomio fisso <math>c(x)</math>.
 
=== <tt>AddRoundKey</tt>===