web-dev-qa-db-fra.com

Lors de l'utilisation d'AES et de CBC, est-il nécessaire de garder le secret IV?

Si je crypte certaines données avec une clé et un vecteur d'initialisation générés aléatoirement, je stocke les trois informations dans la même ligne de tableau; est-il nécessaire de crypter l'IV ainsi que la clé?

Structure de table simplifiée:

  • Données cryptées
  • Clé (chiffrée à l'aide d'une deuxième méthode)
  • IV (crypté?)

Veuillez supposer que l'architecture et la méthode sont nécessaires: l'explication derrière elle est longue et terne.

44
Stu Pegg

De Wikipedia :

Un vecteur d'initialisation a des exigences de sécurité différentes d'une clé, donc le IV n'a généralement pas besoin d'être secret . Cependant, dans la plupart des cas, , il est important qu'un vecteur d'initialisation ne soit jamais réutilisé sous la même clé . Pour CBC et CFB, la réutilisation d'un IV laisse échapper des informations sur le premier bloc de texte en clair et sur tout préfixe commun partagé par les deux messages.

Vous n'avez pas besoin de garder le IV secret, mais il doit être aléatoire et unique.

51
Polynomial

Bien que dans votre cas, l'IV devrait être correct en texte brut dans la base de données, il existe une vulnérabilité grave si vous autorisez l'utilisateur à contrôler le IV.

L'IV dans le décryptage est utilisé (et uniquement utilisé) pour XOR le premier bloc dans le texte en clair final - donc si un attaquant peut contrôler le IV, ils peuvent contrôler arbitrairement le premier bloc de données, et le reste du texte en clair survivra sans modification.

enter image description here

Si l'attaquant connaît le texte en clair d'origine du premier bloc, le problème est à nouveau amplifié car l'attaquant peut choisir des données arbitraires pour le premier bloc sans essai et Erreur.

Ceci est particulièrement important dans le cas où des données chiffrées sont transmises via des canaux non fiables avec le IV, peut-être dans un navigateur ou une application, etc.

8
George Powell