Qu'est-ce que Vecteur d’initialisation ?
Un vecteur d’initialisation (IV) est une valeur aléatoire ou pseudo-aléatoire fournie en entrée d’un algorithme de chiffrement en plus de la clé. Il garantit qu’un texte en clair identique chiffré avec la même clé produit un texte chiffré différent d’une opération à l’autre.
Aussi connu sous le nom de : IV, initialisation vector
Un vecteur d’initialisation remplit le même objectif fondamental qu’un nonce : il introduit de l’unicité dans chaque opération de chiffrement. Les termes sont souvent utilisés de manière interchangeable, bien que « IV » soit plus courant dans le contexte des modes de chiffrement par blocs (CBC, GCM, CTR), tandis que « nonce » est employé plus généralement. Dans AES-GCM, l’IV est une valeur de 12 octets qui initialise le compteur du mode Galois/Counter.
L’IV n’a pas besoin d’être secret : il est généralement stocké ou transmis en clair avec le texte chiffré. Sa contribution à la sécurité vient de l’unicité, et non du secret. Selon le mode de chiffrement, l’IV doit toutefois être imprévisible (comme pour CBC) ou simplement unique (comme pour GCM). Un IV prévisible avec le mode CBC rend possibles des attaques spécifiques, tandis que GCM exige seulement que l’IV ne soit jamais réutilisé avec la même clé.
La réutilisation d’un IV avec AES-GCM est catastrophique : elle permet à un attaquant de récupérer la clé d’authentification et de forger des textes chiffrés valides, et elle fait fuiter des informations sur le texte en clair par le XOR des deux flux de texte chiffré. C’est pourquoi les implémentations doivent utiliser un générateur de nombres aléatoires cryptographiquement sûr pour générer l’IV, et ne jamais construire ni réutiliser un IV manuellement.
Comment Vaulted utilise Vecteur d’initialisation
Vaulted génère pour chaque secret un IV frais de 12 octets au moyen de crypto.getRandomValues() de la Web Crypto API. L’IV est envoyé au serveur avec le texte chiffré et stocké dans Redis comme partie de l’enregistrement chiffré. Quand le destinataire récupère le secret, l’IV est renvoyé avec le texte chiffré, afin que le navigateur puisse reconstituer les paramètres de déchiffrement AES-256-GCM. Comme Vaulted génère aussi une clé unique par secret, la paire clé-IV est toujours unique.