speakerNOVITÀ!iShredder™ Business per iOS e Android è ora disponibile per gli utenti Enterprise.Scopri di più
Extended AES

AES Esteso di Protectstar

Dimensione del blocco: 512-bit (64 byte)
Dimensioni delle chiavi: 128, 256 e 512-bit (16, 32 e 64 byte) (default 256-bit)
Modalità di Operazione: ECB, CBC, CFB, OFB e CTR (default CTR)
Numero totale di round: 24

Abstract

Questa documentazione spiega i dettagli della nostra versione estesa dell’algoritmo di cifratura AES, che utilizza una lunghezza del blocco fissa di 512 bit e tre possibili lunghezze di chiave: 128, 256 o 512 bit.

1. Motivazione
L’AES standard utilizza una lunghezza del blocco di 128 bit (cioè 16 byte) e una chiave di 128 bit. L’AES supporta anche chiavi da 192 e 256 bit. Per la combinazione 128/128 (Blocco/Chiave), il blocco messaggio e la chiave possono essere rappresentati come una matrice 4×4. Ogni cella della matrice rappresenta un byte e le 16 (4×4) celle costituiscono i 16 byte, equivalenti a 128 bit.

Allo stesso modo, per l’AES esteso si utilizza una matrice 4×16 (4 righe, 16 colonne) per rappresentare i blocchi messaggio e le chiavi di round. L’AES esteso utilizza alcune proprietà e funzioni dell’AES originale (ad es. aggiunta della chiave di round, mescolamento delle colonne, ecc.), mentre altre proprietà e funzioni sono specifiche dell’AES esteso (ad es. numero totale di round, spostamento delle righe, ecc.).

Nelle sezioni seguenti, vengono spiegate in dettaglio le proprietà e le funzioni pertinenti utilizzate nell’AES originale e in quello esteso.

2. Modalità di Operazione
Tutte le modalità di operazione supportate dall’AES originale (ovvero Electronic Code Book (ECB), Cipher Block Chaining (CBC), Cipher Feedback (CFB), Output Feedback (OFB) e Counter (CTR)) sono state implementate anche per l’AES esteso.

3. Numero Totale di Round
Per criptare e decriptare un singolo blocco, l’algoritmo AES originale applica le sue funzioni in un totale di 10 round. Questo numero è calcolato con la seguente formula:
Numero di round = (dimensione della chiave o del blocco in parole) + 6

Il numero costante 6 è specificato e fissato dai progettisti dell’AES in base agli attacchi crittografici noti. Se la dimensione della chiave è 256 bit, sono necessari 14 round (8+6).

Per l’AES esteso, la lunghezza del blocco è fissata a 512 bit, cioè 16 parole, poiché ogni parola è di 4 byte. Il numero totale di round è calcolato come 22 in base alla formula sopra. In realtà sono necessari 2 round aggiuntivi a causa dell’operazione ShiftRow, come spiegato nelle sezioni successive. In conclusione, l’AES esteso applica 24 round per criptare e decriptare un singolo blocco.

4. Padding
L’operazione di padding è molto comune per il riempimento di blocchi messaggio e chiave nei cifrari a blocchi. Per l’AES esteso, sono necessari sia il padding del messaggio sia della chiave.

4.1. Padding del Messaggio
La lunghezza dei messaggi in input deve essere un multiplo di 512 nell’AES esteso. Per il padding, seguiamo il meccanismo descritto nell’RFC 1321. In questo metodo, dopo l’ultimo bit del messaggio, viene inserito un bit “1” e poi vengono aggiunti bit “0” finché il blocco non raggiunge i 512 bit. Se non c’è spazio per bit “0” extra, viene aggiunto un nuovo blocco di 512 bit alla fine del messaggio.

4.2. Padding della Chiave
L’AES esteso supporta chiavi di 16, 32 e 64 byte. Per inizializzare il blocco chiave, viene usata una password fornita dall’utente. Se la password non ha abbastanza caratteri per riempire il blocco chiave, i byte rimanenti vengono riempiti con zeri. Questo semplice padding sarebbe sufficiente per l’AES originale, ma non per quello esteso. Considerando una chiave di 64 byte, si supponga che la password riempia solo i primi 10 byte, e i restanti 54 siano zeri. Questo blocco chiave iniziale viene usato per generare le chiavi di round. In tal caso, molte chiavi di round risulterebbero essere zeri. Per evitare ciò, applichiamo l’AES originale sul blocco chiave zero-padded con una chiave fissa in modalità CBC. Il risultato di questa cifratura diventa la chiave padded per generare le chiavi di round, evitando così il problema degli zeri multipli.

5. Generazione delle Chiavi di Round
Le chiavi di round vengono generate a partire dal blocco chiave padded, come spiegato nella sezione “Padding della Chiave”. Il processo di generazione delle chiavi di round dell’AES originale (vedi Rijndael Block Cipher Specification, pag. 15) è leggermente modificato per l’AES esteso e viene utilizzato il seguente algoritmo:

KeyExpansion(byte Key[4*Nk] word W[Nb*(Nr+1)])
{
  for(i = 0; i < Nk; i++)
    W[i] = (key[4*i],key[4*i+1],key[4*i+2],key[4*i+3]);

  for(i = Nk; i < Nb * (Nr + 1); i++)
  {
    temp = W[i - 1];
    if (i % Nk == 0 || (I % Nk==4 && Nk>6))
      temp = SubByte(RotByte(temp)) ^ Rcon[i / Nk];
    else if ((i % Nk == 8 || i % Nk == 12) && Nk>6)
      temp = SubByte(temp);
    W[i] = W[i - Nk] ^ temp;
  }
}

6. Funzioni
L’AES originale utilizza fondamentalmente 4 funzioni principali. Queste sono: operazione xor-add tra il blocco messaggio e la chiave di round (AddRoundKey), Sbox lookup (SboxSubstitution), spostamento delle righe (ShiftRow) e mescolamento delle colonne della matrice (MixColumn).

1.1.1. AddRoundKey
Per l’aggiunta della chiave di round, non vi è alcuna differenza tra l’AES originale e quello esteso.

1.1.2. SboxSubstitution
Il processo di lookup della Sbox è identico sia nell’AES originale che in quello esteso.

1.1.3. ShiftRow
Il processo di spostamento delle righe è diverso tra l’AES originale e quello esteso. L’AES originale applica gli offset {0,1,2,3}. Ciò significa che nella ShiftRow, i byte della prima riga non vengono spostati. I byte della seconda riga vengono spostati di 1 byte a sinistra (in cifratura), quelli della terza riga di 2 byte, e quelli dell’ultima riga di 3 byte a sinistra. Dopo due round, la combinazione di ShiftRow e MixColumn fornisce diffusione totale nella matrice, ovvero ogni cella influenza tutte le altre.

Ma se applichiamo gli stessi offset {0,1,2,3} nell’AES esteso, la diffusione totale si raggiunge dopo 5 round anziché 2. Abbiamo quindi scritto un programma (vedi com.crypt.test.OptimumShiftRow.java nel codice sorgente distribuito) che calcola gli offset ottimali. Il risultato è che la diffusione totale si ottiene dopo 4 round con gli offset {0,1,4,5} scelti per l’AES esteso.

1.1.4. MixColumn La stessa operazione MixColumn è applicata sia nell’AES originale che in quello esteso. L’AES originale ha solo 4 colonne, mentre l’AES esteso ne ha 16.

Riferimenti: