# Modalità di funzionamento dei cifrari a blocchi

In crittografia la modalità di funzionamento dei cifrari a blocchi è una serie di procedimenti standard di un algoritmo che operi tramite cifratura a blocchi per garantire la sicurezza di testi o messaggi di lunghezza a piacere.
Le modalità furono definite inizialmente dal National Institute of Standards and Technology (NIST) nel 1980 con lo standard FIPS 81 intitolato Data Encryption Standard modes of operation affinché l'algoritmo di cifratura DES potesse essere applicato a una varietà di situazioni differenti.
Lo standard ebbe successivamente delle estensioni, codificate nella 800-38A.
Tali modalità possono essere utilizzate con qualsiasi algoritmo di cifratura simmetrica a blocchi, tra cui Triple DES e AES.

## Electronic CodeBook (ECB)

La modalità ECB è la più semplice. Il testo in chiaro viene gestito 64 bit per volta; ognuno dei blocchi di 64 bit viene cifrato con la stessa chiave. Per messaggi più lunghi di 64 bit, si procede suddividendo il messaggio in blocchi di 64 bit, utilizzando, se necessario, bit di riempimento nell'ultimo blocco.
Per una data chiave, esiste un unico testo cifrato per ogni blocco di testo in chiaro di 64 bit; in altre parole, se nel messaggio compare più volte lo stesso blocco di 64 bit di testo in chiaro, verrà prodotto sempre lo stesso testo cifrato. Per questo motivo, il metodo ECB è ideale per limitati volumi di dati (ad esempio, la trasmissione di una chiave di cifratura), poiché per messaggi più lunghi potrebbe essere insicuro: se si trattasse di dover cifrare un messaggio molto strutturato, l'analisi crittografica potrebbe sfruttarne le regolarità.

### Vantaggi

* La cifratura in modalità ECB è parallelizzabile
* Gli errori rimangono localizzati, quindi non si ha propagazione di errore su diversi blocchi

### Svantaggi

* Non è garantita l'integrità del messaggio, poiché un attaccante potrebbe invertire dei blocchi e la vittima non se ne accorgerebbe
* Usa una chiave fissa che quindi può essere predisposta ad attacchi di analisi crittografica
* Non è sicuro contro attacchi di forza bruta

## Cipher Block Chaining (CBC)

Per superare i limiti di sicurezza di ECB, è necessario l'utilizzo di una tecnica in cui lo stesso blocco di testo in chiaro, se ripetuto, produce blocchi di testo cifrato differenti. Questo è ciò che accade con la modalità CBC, in cui l'input dell'algoritmo di crittografia è il risultato dello XOR tra il blocco di testo in chiaro corrente e il blocco di testo cifrato precedente; per ciascun blocco viene utilizzata la stessa chiave. In fase di decifratura, ciascun blocco di testo cifrato passa attraverso l'algoritmo di decrittografia; il risultato subisce uno XOR con il blocco di testo cifrato precedente, per produrre il blocco di testo in chiaro.
Per dimostrare la correttezza del meccanismo, si può scrivere:
$C_{j}=E_{k}[C_{j-1}\oplus P_{j}]$
Quindi:
$D_{k}[C_{j}]=D_{k}[E_{k}(C_{j-1}\oplus P_{j})]$
$D_{k}[C_{j}]=(C_{j-1}\oplus P_{j})$
$C_{j-1}\oplus D_{k}[C_{j}]=C_{j-1}\oplus C_{j-1}\oplus P_{j}=P_{j}$
Per produrre il primo blocco di testo cifrato, lo XOR viene effettuato tra un vettore di inizializzazione IV (dall'inglese initialization vector) e il primo blocco di testo in chiaro. In decifratura, l'IV subisce uno XOR con l'output dell'algoritmo di decrittografia in modo da ottenere nuovamente il primo blocco di testo in chiaro. Il vettore di inizializzazione IV deve essere dunque noto non solo al mittente ma anche al destinatario, che tipicamente lo riceve assieme alla chiave; entrambi i valori vengono cifrati in modalità ECB. Per aumentare il livello di sicurezza ed evitare replay attack, si utilizza un IV casuale per ogni processo di cifratura. Questo permette di produrre un testo cifrato differente anche a parità di testo in chiaro e chiave di crittografia. In questi casi è desiderabile poter evitare di condividere con il destinatario ogni IV generato; questo è possibile, semplicemente premettendo al testo in chiaro un blocco di testo casuale: in questo modo verrà generato un primo blocco cifrato comunque utilizzabile nel processo di cifratura. Implementando questa modalità, in fase di decifratura sarà necessario generare un nuovo IV casuale, quindi scartare il primo blocco di testo in chiaro che verrà prodotto. È possibile utilizzare un IV casuale e senza la necessità di condividerne ogni valore con il destinatario, anche nei cifrari a blocco in modalità CFB e OFB In conclusione, questa modalità è la più appropriata per cifrare messaggi più lunghi di 64 bit. Inoltre, la modalità CBC può essere utilizzata anche per l'autenticazione.

## Cipher Feedback (CFB)

La modalità CFB è stata ideata per convertire idealmente una cifratura a blocchi in una cifratura a flusso. La cifratura a flussi non necessita di eseguire riempimenti e può inoltre operare in tempo reale. Nell'operazione di cifratura, l'input della funzione di crittografia è un registro a scorrimento a 64 bit che inizialmente viene impostato con un vettore di inizializzazione IV (Initialization Vector). Gli s bit più significativi (ovvero quelli più a sinistra) dell'output subiscono uno XOR con il primo segmento di testo in chiaro P$_1$ per produrre la prima unità di testo cifrato C$_1$. Il contenuto del registro di scorrimento viene fatto scorrere a sinistra di s bit, e negli s bit meno significativi (quelli più a destra) del registro viene inserito C$_1$. Il processo viene reiterato fino all'esaurimento di tutte le unità di testo in chiaro. All'atto della decifratura, si utilizza il medesimo schema, tranne per il fatto che le unità di testo cifrato ricevute sono sottoposte ad uno XOR con l'output della funzione di crittografia. Non si utilizza dunque la funzione di decrittografia, perché, se S$_S$(X) sono gli s bit più significativi di X, allora:
$C_{1}=P_{1}\oplus S_{S}(E_{k}(IV))$
Pertanto
$P_{1}=C_{1}\oplus S_{S}(E_{k}(IV))$
e lo stesso ragionamento vale per i passi successivi.

## Output Feedback (OFB)

La modalità OFB è molto simile alla CFB. Il vantaggio della OFB è che non propaga gli errori di trasmissione dei bit. Il suo svantaggio è che è più vulnerabile a un attacco a modifica del flusso dei messaggi.

## Counter (CTR)

Questa quinta modalità è stata introdotta successivamente alle altre quattro, per poter essere applicata a ATM (Asynchronous Transfer Mode) e a IPsec (IP security). In questa modalità viene utilizzato un contatore corrispondente alle dimensioni del blocco di testo in chiaro. Il requisito essenziale è che il suo valore sia differente per ciascun blocco da cifrare; in genere viene inizializzato con un determinato valore e poi incrementato di un'unità per ogni blocco successivo (modulo 2$^b$ dove b corrisponde alle dimensioni del blocco). Per la cifratura, il contatore viene crittografato e poi si applica uno XOR col blocco di testo in chiaro per produrre il blocco di testo cifrato. Per la decifratura si utilizza la stessa sequenza di valori del contatore ai quali si applica lo XOR con i blocchi di testo cifrato.
I vantaggi della modalità CTR sono:
* efficienza dell'hardware;
* efficienza del software;
* pre-elaborazioni;
* accesso diretto;
* sicurezza dimostrabile;
* semplicità.

## Tabella riassuntiva

| Modalità | Applicazioni tipiche |
| ECB | Trasmissione sicura di singoli valori |
| CBC | Trasmissione di carattere generale orientata ai blocchi Autenticazione |
| CFB | Trasmissione di carattere generale orientata al flusso di dati Autenticazione |
| OFB | Trasmissione orientata al flusso di dati su canali rumorosi |
| CTR | Trasmissione di carattere generale orientata ai blocchi Utile per requisiti di alta velocità |