Un cifrario a blocchi ideale applica una sostituzione totale su ogni blocco di n-bit, mappando ogni possibile input a un output unico.
Per farlo, sarebbe necessario una tavola di sostituzione con $2^n$ voci per ogni possibile combinazione di n-bit, richiedendo una "chiave" di dimensioni pari a $n × 2^n$.
Questo approccio consentirebbe $2^n!$ trasformazioni possibili, ma è impraticabile nella realtà a causa della complessità computazionale e delle enormi risorse di memoria richieste.
Con n = 2, ogni blocco ha 2 bit, quindi, ci sono $2^2$ = 4 possibili input/blocchi: 00, 01, 10, 11
Il cifrario a blocchi ideale deve mappare ogni input in un output unico a 2 bit, quindi, bisogna costruire una tabella di sostituzione, che è semplicemente una permutazione dei 4 possibili valori.
Un esempio di mappatura potrebbe essere:
| Input | Output |
|---|---|
| 00 | 10 |
| 01 | 00 |
| 10 | 11 |
| 11 | 01 |
Questa tabella rappresenta una possibile chiave del cifrario. Un’altra tabella possibile sarebbe:
| Input | Output |
|---|---|
| 00 | 11 |
| 01 | 01 |
| 10 | 00 |
| 11 | 10 |
e così via.
Ogni riga della tabella memorizza un output di 2 bit, quindi la tabella ha:
$n \times 2^n = 2 \times 4 = 8 \text{ bit}$
Questo è fattibile, ma cresce esponenzialmente con $n$.
Il numero di possibili cifrari diversi è dato dal numero di permutazioni dei 4 output distinti: