Vecteur d'initialisation
En cryptographie, un vecteur d'initialisation (en anglais initialization vector ou IV) est un bloc de bits combiné avec le premier bloc de données lors d'une opération de chiffrement. Il est utilisé dans le cadre des modes d'opération d'un algorithme de chiffrement symétrique par blocs ou pour un chiffrement par flux comme RC4. Dans certains cryptosystèmes, le vecteur est généré de manière aléatoire puis transmis en clair avec le reste du message. Dans d'autres systèmes, on peut utiliser une métadonnée comme le numéro de inode du fichier chiffré.
Vulnérabilités avec des chiffrements par flot
modifierLe chiffrement de plusieurs fichiers avec la même clé nécessite des précautions lors de la création des vecteurs d'initialisation. Il faut en particulier veiller à ne pas être vulnérable à une attaque basée sur une simple opération booléenne avec XOR. Soit C1 et C2, deux messages chiffrés grâce à un chiffrement par flot (XOR entre les données et une suite pseudo-aléatoire générée par l'algorithme). La même clé et le même vecteur d'initialisation sont utilisés pour chiffrer les deux messages originaux M1 et M2.
On peut alors établir la relation suivante qui permet de retrouver facilement les deux messages en clair :
C1 XOR C2 = M1 XOR M2
C'est pourquoi on utilise des vecteurs d'initialisation différents à chaque chiffrement. Si ce n'est pas la même clé qui est utilisée, la relation ci-dessus ne tient plus.
Vulnérabilités avec des chiffrements de blocs
modifierLes modes d'opération permettent de chaîner plusieurs blocs et traiter des données de longueur quelconque. Le mode le plus simple, ECB découpe les données en blocs et les traite indépendamment les uns des autres. ECB n'utilise pas de vecteur d'initialisation. Considérons les deux messages suivants : ATTENTION AUX ATTAQUES EN CRYPTO et ATTENDEZ ENCORE UN INSTANT SVP.. chiffrés avec un algorithme par blocs (avec des blocs de quatre caractères)
On découpe en blocs de quatre caractères et on chiffre chaque bloc sans se préoccuper des autres :
ATTE|NTIO|N AU|X AT|TAQU|ES E|N CR|YPTO
UAKQ|LYLS|QP9M|PO3F|AP0R|ITBV|D5TH|JJDC
On effectue la même opération avec la même clé sur l'autre texte :
ATTE|NDEZ| ENC|ORE |UN I|NSTA|NT S|VP..
UAKQ|IQKL|IQKA|NXYS|TICF|KY92|3MRT|GKYX
On voit aisément que le premier bloc "ATTE" se chiffre en "UAKQ". On le retrouve dans deux messages chiffrés et cela pourrait guider un cryptanalyste. En utilisant un autre mode d'opération qui utilise un vecteur d'initialisation, on peut éviter ce genre de problèmes mais il faut encore faire attention à certains détails. Dans le cas du CBC sans vecteur d'initialisation, chaque bloc subit un XOR avec le chiffrement du bloc précédent. Mais ici encore, on aura le même problème qu'avec ECB. En ajoutant un vecteur d'initialisation, on fait un XOR entre celui-ci et le premier bloc de données. Avec la même clé mais deux vecteurs différents, le même message ne sera pas chiffré de la même manière et on évite une attaque comme celle décrite ci-dessus.
En 2005, un chercheur chinois découvre une faille importante dans le chiffrement des documents Microsoft Word et Excel. Le vecteur d'initialisation demeure constant pour un même document malgré les modifications qui y seraient apportées. Si la clé reste identique, il est possible de retrouver une quantité très importante d'informations.
Mauvaise utilisation de RC4 dans le protocole WEP
modifierLe protocole WEP emploie le chiffrement par flot RC4 pour chiffrer les données dans un réseau sans fil de type Wi-Fi. Mais son implémentation est vulnérable et plusieurs attaques ont été développées. En 2001, Shamir, Fluhrer et Mantin découvrent un problème dans le key-schedule de RC4 au sein du WEP. En capturant suffisamment de paquets, on peut constituer une liste de vecteurs d'initialisation particuliers qui permettent de mener l'attaque. Celle-ci se concentre sur le premier octet chiffré dans chaque paquet. Avec un trafic important, on peut rapidement récupérer la clé (quelques minutes avec un PC sur un WEP de 64 bits).