Cos'è Vettore di inizializzazione?
Un vettore di inizializzazione (IV) è un valore casuale o pseudocasuale usato come input aggiuntivo a un algoritmo di cifratura insieme alla chiave, garantendo che plaintext identico cifrato con la stessa chiave produca ciphertext diversi tra le operazioni.
Noto anche come: IV, initialisation vector
Un vettore di inizializzazione svolge lo stesso scopo fondamentale di un nonce — introduce unicità in ogni operazione di cifratura. I termini vengono spesso usati in modo intercambiabile, anche se "IV" è più comune nel contesto delle modalità di cifratura a blocchi (CBC, GCM, CTR) mentre "nonce" viene usato in modo più generale. In AES-GCM specificamente, l'IV è un valore da 12 byte che inizializza il contatore usato nella modalità Galois/Counter.
L'IV non deve essere segreto — viene tipicamente archiviato o trasmesso in plaintext insieme al ciphertext. Il suo contributo alla sicurezza deriva dall'unicità, non dalla segretezza. Tuttavia, a seconda della modalità di cifratura, l'IV potrebbe dover essere imprevedibile (come nella modalità CBC) o semplicemente univoco (come nella modalità GCM). Usare un IV prevedibile con la modalità CBC consente attacchi specifici, mentre GCM richiede solo che l'IV non venga mai riutilizzato con la stessa chiave.
Il riutilizzo dell'IV con AES-GCM è catastrofico: consente a un attaccante di recuperare la chiave di autenticazione e falsificare ciphertext validi, e fa trapelare informazioni sul plaintext attraverso l'XOR dei due flussi di ciphertext. Per questo motivo, le implementazioni devono usare un generatore di numeri casuali crittograficamente sicuro per la generazione dell'IV e non devono mai costruire o riutilizzare IV manualmente.
Come Vaulted usa Vettore di inizializzazione
Vaulted genera un IV fresco da 12 byte usando crypto.getRandomValues() della Web Crypto API per ogni segreto. L'IV viene inviato al server insieme al ciphertext e archiviato in Redis come parte del record cifrato. Quando il destinatario recupera il segreto, l'IV viene restituito insieme al ciphertext in modo che il browser possa ricostruire i parametri di decifratura AES-256-GCM. Poiché Vaulted genera anche una chiave univoca per ogni segreto, la coppia chiave-IV è sempre unica.