# Vettore di inizializzazione

In crittografia un vettore di inizializzazione (VI), dall'inglese initialization vector (IV), è un blocco di bit di lunghezza predefinita che viene utilizzato per inizializzare lo stato di un cifrario a flusso, oppure di un cifrario a blocchi quando questi opera in una modalità tale da trasformarsi in un cifrario a flusso, in modo che a chiavi identiche il keystream risultante sia differente.

## Il vettore di inizializzazione

La dimensione del VI dipende dall'algoritmo di cifratura e dal protocollo crittografico in uso, anche se in genere è grande quanto il blocco di dati che è trattato dall'algoritmo stesso (nel caso di cifrari a blocchi) o quanto la chiave stessa (nel caso di cifrari a flusso).
Il VI deve essere noto dal destinatario altrimenti questi non potrà decifrare il messaggio ricevuto. Questo può essere assicurato in differenti modi:
* trasmettendo il VI insieme al pacchetto dei dati;
* accordandosi su di esso durante lo scambio della chiave;
* calcolandolo (generalmente in maniera incrementale);
* misurandolo da determinati parametri quali ad esempio l'ora corrente (modalità utilizzata nei token hardware);
* prelevandolo da identità digitali come l'indirizzo del mittente o del destinatario;
* il numero del file, del settore o di altri dati, ecc.
A seconda del protocollo utilizzato, possono anche essere selezionate più variabili ed unite insieme utilizzando un algoritmo di hash per generare un digest univoco.
Se il VI è scelto in maniera casuale allora il crittografo deve tenere in considerazione l'ipotesi di avere delle collisioni, mentre se il VI è utilizzato in maniera incrementale, come un nonce, deve essere considerata la resistenza dell'algoritmo agli attacchi connessi ai VI.

## Il VI nei cifrari a blocchi

I VI sono implementati nei cifrari a blocchi in maniera differente rispetto ai cifrari a flusso. I primi, utilizzati nella loro classica modalità, definita Electronic Code Book (ECB), producono lo stesso testo cifrato dallo stesso testo in chiaro se viene utilizzata la stessa chiave di cifratura, il che rappresenta una seria minaccia alla sicurezza dei dati cifrati. Per ovviare a questo problema si usa utilizzare un vettore di inizializzazione che viene combinato mediante un'operazione di OR esclusivo (XOR) con il primo blocco del testo in chiaro: questo è quanto avviene, ad esempio, nei cifrari a blocchi utilizzati in modalità Cipher Block Chaining (CBC).

## Il VI nei cifrari a flusso

Nei cifrari a flusso i VI sono in genere caricati nello stato segreto dell'algoritmo, dopodiché vengono solitamente eseguiti dei passaggi del cifrario per inizializzare il keystream prima di iniziare ad utilizzarne l'output. Per motivi legati alle prestazioni del cifrario, i disegnatori dei cifrari a flusso tendono in genere a mantenere tale numero di passaggi il più basso possibile. Siccome la determinazione del minimo numero di passaggi tali che l'algoritmo presenti un sufficiente grado di sicurezza non è così semplice e considerando anche altre problematiche legate alla perdita di entropia, unica per ogni cifrario, gli attacchi legati ai VI sono una nota debolezza dei cifrari a flusso: per tali motivi lo studio del caricamento del VI nello stato del cifrario è argomento di forte ricerca.

## Il VI nel WEP

Il WEP, utilizzato nel IEEE 802.11 (abbreviativo per Wired Equivalent Privacy) utilizza come cifrario l'algoritmo RC4 con una chiave ottenuta combinando la chiave dell'utente con un VI debole, di soli 24 bit di lunghezza. A causa di queste scelte strutturali effettuate dai suoi progettisti, il protocollo dimostrò subito di non essere sicuro e dalla pubblicazione delle prime analisi del WEP alla forzatura del protocollo passò poco tempo. Oggi è possibile recuperare la chiave di una connessione WEP in pochi minuti.