Gli algoritmi di cifratura a blocchi visti finora prendono in input blocchi di dimensione fissa, che in genere sono molto più piccoli dei tipici messaggi che si desidera cifrare. Allora, è necessario adottare degli approcci, chiamati modalità di funzionamento, che definiscano come utilizzare la cifratura a blocchi su messaggi di lunghezza arbitraria.
Siccome chi cifra e chi decifra un messaggio devono usare la stessa modalità di funzionamento, queste modalità sono standardizzate:
Tralasciando quella specifica per i dispositivi di memorizzazione, che non verrà presentata, le 5 principali modalità di funzionamento standard sono:
Di solito, per indicare le modalità di funzionamento usata si aggiunge la sigla di tale modalità al nome dell’algoritmo di cifratura: ad esempio, per indicare l’uso di AES con chiave a 128 bit (AES-128) in modalità Cipher Block Chaining si può scrivere AES-128-CBC.
La più semplice modalità di funzionamento è ECB, Electronic Codebook: il messaggio in input viene suddiviso in blocchi della dimensione richiesta dall’algoritmo di cifratura (64 bit per DES e 128 bit per AES), e ogni blocco viene cifrato indipendentemente con la stessa chiave (perchè mittente e destinatario condividono una sola chiave, altrimenti si avrebbe lo stesso problema dello one-time pad: la necessità di condividere una quantità di informazioni segrete proporzionale alla dimensione del messaggio). Il destinatario esegue la decifratura allo stesso modo, cioè indipendentemente per ciascun blocco del messaggio, e poi riassembla i blocchi decifrati per ottenere il messaggio completo.
Questa modalità ha un grosso svantaggio: una volta fissata la chiave, uno stesso blocco di testo in chiaro viene sempre trasformato nello stesso blocco di testo cifrato, quindi eventuali blocchi uguali nel plaintext saranno uguali anche nel ciphertext. Così, studiando i blocchi ripetuti, un attaccante otterrebbe informazioni sul messaggio in chiaro, che potrebbe sfruttare in vari modi. Per questo motivo, la modalità ECB risulta in pratica adeguata solo per la cifratura di messaggi che hanno dimensioni non superiori a pochi blocchi di input dell’algoritmo di cifratura e una probabilità sufficientemente bassa di contenere ripetizioni. Un esempio tipico di messaggio per cui ECB va bene sono le chiavi, che di solito sono piuttosto piccole e generate in modo sostanzialmente casuale, quindi è altamente improbabile che contengono blocchi ripetuti.
Il termine “codebook” che dà il nome a questa modalità si riferisce proprio al fatto che ogni blocco in chiaro è associato sempre allo stesso blocco cifrato, così come un tradizionale codebook associa a ogni parola che può comparire nel testo in chiaro una determinata parola in codice.
Un altro svantaggio di ECB è la necessità di inserire dei bit di padding (riempimento) alla fine del messaggio quando questo ha una lunghezza che non è un multiplo della dimensione del blocco, perchè la cifratura può essere effettuata solo su blocchi interi. Al fine di interpretare correttamente il messaggio decifrato, il destinatario deve sapere quale parte dell’ultimo blocco decifrato sia da considerare padding, in modo da poterla scartare: questa è un’informazione in più che le due entità comunicanti devono condividere ed è dunque un ulteriore aspetto che è stato necessario standardizzare.
Un vantaggio di ECB è invece la possibilità di eseguire in parallelo la cifratura o la decifratura di più blocchi, ma in pratica ciò non è utile per i messaggi picoli per cui ECB è adeguata.