Possiamo decifrare un file crittografato con passphrase corretto. Ma come può conoscere il corretto vettore di inizializzazione durante la decrittazione? Non è generato casualmente durante la crittografia?
OpenPGP in realtà non usa un vettore di inizializzazione (è definito come tutto-zero). Al contrario, utilizza in seguito un blocco di dati casuali, che assume il ruolo del vettore di inizializzazione nella modalità CFB OpenPGP specifica per OpenPGP.
Da RFC 4880, OpenPGP, 13.9. Modalità CFB di OpenPGP :
OpenPGP CFB mode uses an initialization vector (IV) of all zeros, and prefixes the plaintext with BS+2 octets of random data, such that octets BS+1 and BS+2 match octets BS-1 and BS. It does a CFB resynchronization after encrypting those BS+2 octets.
Con altre parole: un costrutto simile al vettore di inizializzazione è incluso in ogni messaggio cifrato, mentre il vettore di inizializzazione è definito come costante. Quindi sì, qualcosa come il vettore di inizializzazione viene generato durante la crittografia, ma viene archiviato nelle intestazioni di crittografia e utilizzato per la decrittografia.
Fattore collaterale: la ripetizione di alcuni ottetti consente il rilevamento precoce di chiavi di sessione errate, poiché viene utilizzato quando si tenta di decodificare un messaggio senza destinatario denotato (utilizzando questa tecnica, le implementazioni di OpenPGP possono ignorare le chiavi non corrispondenti prima della decodifica del intero messaggio). D'altra parte, si apre per un attacco di testo cifrato scelto piuttosto esoterico come descritto da Mister an Zuccherato ( Un attacco sulla crittografia in modalità CFB utilizzata da OpenPGP ). Uno dei principi di crittografia di base è rotto qui: non ripeterti, potrebbe aprire dei vettori di attacco inaspettati.
Al momento della crittografia, l'IV viene memorizzato accanto al testo cifrato.
Leggi altre domande sui tag encryption pgp gnupg openpgp