AES, 3DES, Blowfish ... sono codici a blocchi . Un codice a blocchi è una funzione che prende come input un blocco di dati di una determinata dimensione (un numero fisso di bit) e un tasto (che è anche una sequenza di bit, non necessariamente della stessa dimensione del blocco); e l'uscita è un altro blocco della stessa dimensione del blocco di input. Inoltre, per una chiave fissa , la funzione deve essere una permutazione: due blocchi di input distinti producono due blocchi di output distinti.
es. Triple-DES (chiamato anche 3DES) utilizza blocchi a 64 bit e chiavi a 192 bit (così accade che la Triple L'algoritmo -DES ignora totalmente 24 dei 192 bit chiave, quindi spesso diciamo che Triple-DES utilizza una chiave a 168 bit, tuttavia, l'implementazione conforme allo standard prevede una chiave a 192 bit, ovvero 24 byte).
Crittografare e decifrare i blocchi va bene, ma di solito vogliamo crittografare "messaggi", cioè lunghi flussi di byte di dati, con una lunghezza che non è necessariamente un multiplo della dimensione del blocco e che può essere piuttosto alta (ad es. può crittografare molti gigabytes di dati). Per trasformare un cifrario a blocchi in un motore in grado di crittografare e decodificare i messaggi, devi utilizzare una modalità di funzionamento . Fare buone modalità è un'arte; ci sono molti difetti sottili che possono compromettere la sicurezza se la modalità non è stata ben progettata. La dimensione del blocco sembra essere un fattore importante: nella maggior parte delle modalità, la sicurezza diminuisce, a volte in modo piuttosto brusco, quando la lunghezza del messaggio di input supera una soglia che dipende dalla dimensione del blocco; vale a dire, se il codice a blocchi utilizza n -bit blocchi e crittografa più di 2 n / 2 blocchi di dati, allora sei nei guai . Per un codice a blocchi che utilizza blocchi a 64 bit, la soglia è di circa 32 gigabyte (blocchi 2 32 di 8 byte). Quando DES è stato progettato, 32 gigabyte erano fantascienza; al giorno d'oggi, 32 gigabyte sono una chiavetta USB da 20 $.
Quindi ora preferiamo i codici a blocchi con blocchi a 128 bit. Era un criterio di progettazione per AES .
La dimensione della chiave è un problema ortogonale. I tasti per i codici a blocchi sono sequenze di bit di una determinata lunghezza, che dipende dalla struttura interna per il codice a blocchi. Non è necessario che la lunghezza della chiave corrisponda in alcun modo alla dimensione del blocco; tuttavia, i crittografi sono innamorati del binario, quindi la lunghezza della chiave di solito sarà una potenza di 2 come 128 o 256, e così sarà la dimensione del blocco. AES è stato definito per utilizzare chiavi di 128, 192 o 256 bit.
Ciò che è necessario per la sicurezza è che ci sono due possibili chiavi per un utente malintenzionato per provarle tutte (provando tutte le chiavi possibili finché non viene trovata una corrispondenza si chiama search esauriente ). Ogni bit chiave aggiuntivo raddoppia il numero di possibili dimensioni della chiave. Le chiavi a 128 bit sono abbastanza grande con un margine constrongvole; dimensioni chiave più grandi sono lì per la conformità burocratica, i manager paranoici e gli sviluppatori che si sentono minacciati nella loro virilità.