Intégrité

Pour vérifier que c'est bien le message envoyé qui est reçu, il est nécessaire d'ajouter des données au message envoyé. Ces données ajoutées peuvent avoir deux fonctions :

  1. soit détecter les erreur de transmissions et tenter de les corriger si elles sont peu nombreuses. Ces ajoute permettent de corriger des erreurs aléatoires dues aux erreurs de transmissions (canal bruité) ou à l'usure (sur un dvd par exemple)
  2. soit uniquement vérifier de l'intégrité du message. Ceci permet de détecter a priori toute modification.

La première approche est associée à la discipline du traitement du signal et à donné des algorithmes élégants comme les codes de hamming ou encore les code de Reed Solomon. Ces structures sont cependant prédictibles et ne permettent donc pas de protéger de modifications volontaires.

La seconde approche, utilisée en sécurité, consiste à résumer le message envoyé par un hash bien plus petit mais non prédictible.

Pourquoi c'est important

Si un message chiffré $c$ peut être modifié en un message chiffré $f(c)$ tout en étant encore déchiffrable, on dit que le code est malléable. Les chiffrement par flux utilisant le XOR sont par essence malléable comme on l'a déjà vu, il est donc important de pouvoir se prémunir de ce genre d'attaque.

Enfin, il faut que cette protection soit elle même chiffrée, sans quoi si Mallory peut modifier le message chiffrée $c$ en $f(c)$, il peut très bien également modifier le la protection pour qu'elle corresponde à $f(c)$

Hash et sécurité

Pour être utilisable en cryptographie, les fonctions de hash doivent posséder des propriétés spécifiques.

SHA

Hash chiffré

AEAD

L'intégrité est actuellement intégré au process de transmission des données :