Remplissage (cryptographie)

Un article de Wikipédia, l'encyclopédie libre.

En cryptographie, le remplissage (padding) consiste à faire en sorte que la taille des données soit compatible avec les algorithmes utilisés. Un grand nombre d'algorithmes utilisent un partitionnement en blocs de taille fixe. Si la taille des données n'est pas un multiple de la taille d'un bloc alors un schéma de remplissage doit être envisagé.

Historiquement, le remplissage était utile pour contrer la cryptanalyse. Plusieurs algorithmes classiques placent le texte en clair dans des grilles rectangulaires ou carrées. Il faut dès lors remplir les cases manquantes et on utilise pour cela du texte aléatoire destiné à rendre l'analyse plus pénible.

En cryptographie moderne, le remplissage apparaît dans plusieurs primitives et concepts :

  • chiffrement par bloc : le remplissage permet d'avoir un bloc de la taille adéquate si celui-ci est trop court (par exemple en ajoutant des 0)
  • chiffrement par flot : le remplissage peut éviter d'avoir une longueur par flot susceptible d'être attaquée, cela évite aussi que l'attaquant ne connaisse la taille du flux
  • cryptographie asymétrique : les cryptosystèmes considèrent souvent le message en clair comme un très grand nombre qui est injecté dans une formule. Ces nombres ont souvent des propriétés qui doivent être respectées et le remplissage permet de garantir ces caractéristiques.
  • fonction de hachage : la plupart des fonctions découpent les données en blocs de taille fixe et le dernier bloc doit être rempli de manière adéquate

Le remplissage doit suivre certaines contraintes pour éviter des attaques. Dans le cadre des fonctions de hachage, on peut appliquer un renforcement de Merkle-Damgård qui consiste à ajouter un 1, une suite de 0 et finalement la taille du message à hacher. Si l'on se contentait d'ajouter uniquement des 0, les messages "000" et "0000" produiraient le même condensé ce qui est totalement incompatible avec la notion de hachage cryptographique.

Le standard PKCS définit des remplissages qui évitent des attaques potentielles dans le cadre de la cryptographie asymétrique.

Autres langues