web-dev-qa-db-fra.com

Pourquoi IV n'a-t-il pas besoin d'être secret dans le cryptage AES CBC?

selon Wikipedia , le vecteur d'initialisation (IV) n'a pas à être secret lors de l'utilisation du mode de fonctionnement CBC. Voici le schéma du cryptage CBC (également à partir de Wikipedia):

Enter image description here

Que se passe-t-il si je crypte un fichier en clair, où le premier bloc a une structure connue et normalisée, comme un en-tête?

Imaginons le scénario suivant:

Je crypte file.pnm en utilisant AES-CBC. Le fichier pnm a une structure d'en-tête connue, telle que:

P6
1200 800
255

De plus, les dimensions (1200 x 800) et le mode couleur (P6) peuvent être devinés à partir de la taille du fichier crypté.

Si IV et le premier bloc de texte brut sont connus, cela ne compromet-il pas l'ensemble de la chaîne CBC?

22
Martin Vegter

Je pense qu'il est plus facile de diviser cela en ses composants et de les considérer comme des entités distinctes: AES et CBC.

AES lui-même ne consiste pas "essentiellement à assembler XOR ensemble des morceaux du bloc" - c'est une affaire beaucoup plus compliquée. Ignorant les éléments internes de celui-ci pendant un moment, AES est considéré comme sécurisé dans la mesure où sans connaître la clé, il est pratiquement impossible de récupérer le texte en clair ou toute information sur le texte en clair donné uniquement un bloc crypté, ou même dans des situations où vous recevez des parties de le texte en clair et vous devez trouver le reste. Sans la clé, AES pourrait tout aussi bien être une fonction à sens unique (et il existe des schémas MAC qui en dépendent!). Discuter des aspects techniques de la sécurité d'AES et des chiffrements de blocs similaires est extrêmement complexe et ce n'est pas quelque chose que je peux couvrir dans une réponse, mais il suffit de dire que des milliers de cryptographes le regardent depuis près de deux décennies et que personne n'a trouvé quoi que ce soit de pratique à distance dans termes d'une attaque.

Le diagramme que vous avez affiché ci-dessus décrit CBC. Les chiffrements de blocs, tels que AES, visent à être sécurisés pour le cryptage n bloc avec une clé secrète. Le problème est que nous voulons rarement chiffrer un seul bloc, mais plutôt un flux de données de longueur indéterminée. C'est là que les modes de blocs, comme CBC, entrent en jeu.

Les modes de bloc visent à sécuriser les chiffres pour crypter plusieurs blocs avec la même clé. Le mode de blocage le plus simple est la BCE, qui n'offre aucune sécurité à cet égard. La BCE consiste à chiffrer indépendamment chaque bloc avec la même clé, sans aucune donnée alimentée entre les blocs. Cela fuit des informations de deux manières: premièrement, si vous avez deux blocs de texte en clair identiques, vous obtiendrez deux blocs de texte chiffré identiques si vous utilisez la même clé; deuxièmement, vous obtiendrez deux flux de texte chiffré identiques pour deux cryptages du même message avec la même clé. Il s'agit d'un problème car il fuit des informations sur le texte en clair.

CBC résout ce problème en introduisant un effet "en cascade". Chaque bloc de texte en clair est xoré avec le bloc de texte chiffré précédent, ce qui fait que les blocs de texte brut initialement égaux ne sont plus égaux à l'étape de chiffrement, ne produisant ainsi plus de blocs de texte chiffré égaux. Pour le premier bloc de texte en clair, il n'y a pas de bloc de texte chiffré précédent (vous n'avez encore rien chiffré), et c'est là que le IV entre en jeu. Réfléchissez un instant à ce qui se passerait si au lieu d'un IV, nous utilisions simplement des zéros pour le -1e bloc (c'est-à-dire le bloc de texte chiffré imaginaire "avant" le premier bloc de texte en clair). Alors que l'effet en cascade ferait en sorte que des blocs de texte en clair égaux produisent des blocs de texte chiffré différents, le même message entier se mettrait en cascade de la même manière à chaque fois, résultant en un texte chiffré identique lorsque le même message complet est chiffré plusieurs fois avec la même clé. Le IV résout cela. En choisissant un IV unique, deux textes chiffrés ne sont jamais identiques, que le message en clair soit chiffré soit identique ou différent à chaque fois.

J'espère que cela devrait vous aider à comprendre pourquoi la perfusion intraveineuse n'a pas besoin d'être secrète. Connaître le IV n'obtient aucun attaquant nulle part, car le IV n'est là que pour assurer la non-égalité des textes chiffrés. La clé secrète est ce qui protège les données réelles.

Pour le souligner encore plus, vous n'avez même pas besoin l'IV pour tout décrypter sauf le tout premier bloc. Le processus de décryptage pour CBC fonctionne en sens inverse: décrypter un bloc à l'aide de la clé secrète, puis xor le résultat avec le bloc de texte chiffré précédent. Pour tout sauf le tout premier bloc, vous connaissez le bloc de texte chiffré précédent (vous avez le texte chiffré), donc le déchiffrement n'est qu'un cas de connaissance de la clé. Le seul cas où vous avez besoin de l'IV pour le décryptage est le tout premier bloc crypté, où le bloc de texte chiffré précédent est imaginaire et remplacé par l'IV.

32
Polynomial

Non, car la clé est secrète.

Le bloc "chiffrement par bloc" du diagramme brouille les données en fonction de la clé. Le XOR dans le diagramme ne fournit pas la sécurité, le cryptage le fait. Le XOR et l'IV sont juste pour s'assurer que le même texte en clair crypte en tant que texte chiffré différent pour chaque bloc.

9
Sjoerd

Toutes les méthodes de cryptage modernes (AES, blowfish, etc.) sont conçues pour être beaucoup plus sécurisées que vous ne le pensez. Voyons rapidement quelques attaques contre lesquelles ces chiffres sont conçus pour résister.

Attaque connue en texte brut - Dans ce cas, nous supposons que l'attaquant a accès à de nombreux blocs de texte brut ainsi qu'aux blocs de texte chiffré correspondants chiffrés sous une clé K. Son objectif est de trouver K.

Attaque choisie en texte brut - Dans ce cas, nous supposons que l'attaquant doit choisir de nombreux blocs de texte en clair et obtient les blocs de texte chiffré correspondants chiffrés sous une clé donnée K. Son objectif est de trouver K.

Attaque de texte chiffré choisie - Dans ce cas, nous supposons que l'attaquant doit choisir de nombreux blocs de texte chiffré pour lesquels il obtient les blocs de texte brut correspondants déchiffrés sous une clé donnée K. Son objectif est de trouver K.

Attaque adaptative de texte chiffré choisie - Dans ce cas, nous supposons que l'attaquant doit choisir de nombreux blocs de texte chiffré pour lesquels il obtient les blocs de texte brut correspondants déchiffrés sous une clé K donnée, puis il peut répéter ce processus avec ses nouvelles connaissances. Son objectif est de retrouver K.

Si une attaque est trouvée dans l'un de ces scénarios qui parvient à obtenir K pour un chiffrement moderne, un tel chiffrement est déclaré rompu et ne sera plus utilisé. En fait, les exigences sont beaucoup plus strictes. Si une attaque est trouvée qui peut montrer que vous pouvez obtenir des informations même partielles sur K, dites que c'est la parité qui est déjà un énorme problème. Ou si vous pouvez montrer que vous ne pouvez pas vraiment trouver la clé K mais que vous pouvez faire beaucoup mieux que la force brute (même 2 ^ 110 vs 2 ^ 126 seraient généralement considérés comme méritant d'être publiés) pour la rechercher, le chiffre serait généralement déclaré cassé .

Donc en conclusion non, vous ne pouvez pas obtenir la clé d'un chiffre simplement parce que vous connaissez un bloc de texte en clair et son texte de chiffrement correspondant.

5
DRF

L'IV a les mêmes exigences de sécurité que les blocs cryptés.

Pour que CBC fonctionne, vous devez XOR les données non chiffrées du bloc actuel avec les données chiffrées du bloc précédent. Parce qu'il n'y a pas de bloc avant le premier bloc (donc aucun bloc chiffré ne peut être obtenu) un IV est utilisé à la place.

3
Trisped

Disons une parabole! Voici les participants:

  1. Alice, l'expéditeur
  2. Bob, le récipiendaire
  3. Eve, l'écouteur
  4. Jake, l'assistant désespérément inutile d'Eve

Alice envoie un message crypté à Bob. Eve intercepte le texte chiffré et essaie de le décoder. Afin de "l'aider", Jake lance 128 fois une pièce de monnaie équitable, note ses résultats, les code sous forme de nombre hexadécimal et les donne à Eve: 1eff4bb16388e2ee263eb5a8a2bf56b1. Eve est perplexe à ce sujet, mais Jake insiste sur le fait que les résultats de ces lancers de pièces de monnaie aléatoires l'aideront à déchiffrer le message d'Alice.

Ne pensez-vous pas que Jake est complètement fou? Les résultats des 128 tours de pièces de Jake n'ont rien à voir avec le texte en clair du message qu'Alice a envoyé à Bob, ou la clé qu'elle a utilisée pour le crypter. Donc, Eve ne peut rien apprendre du texte en clair du message grâce aux pièces de monnaie de Jake!


Et c'est pourquoi l'IV pour le mode CBC n'a pas besoin d'être secret. CBC nécessite un aléatoire IV pour chaque cryptage. Les IV ne sont donc absolument pas corrélés aux textes en clair ou aux clés; donc la connaissance de l'IV ne révèle aucune information sur le texte en clair.

0
Luis Casillas