Cryptographie
XOF : Extendable-Output Function. « Fonction à sortie extensible », par analogie avec un robinet de hachage qu'on laisse couler aussi longtemps qu'on veut, là où une fonction classique livre une bouteille de contenance fixe.
Principe : Une fonction de hachage classique produit une empreinte de taille fixe. Une XOF produit un flux d'octets de la longueur demandée, déterministe et imprévisible sans connaître l'entrée. SHAKE, décliné en deux niveaux de sécurité et issu de SHA-3, en est le représentant normalisé ; BLAKE3 offre aussi ce mode.
Sécurité bornée : Allonger la sortie n'augmente pas la sécurité : elle reste plafonnée par le paramètre de la construction. Demander un kilo-octet à la variante la plus légère de SHAKE ne donne pas mille octets de robustesse, pas plus qu'une longue lettre ne rend son auteur plus sincère.
Préfixes : La sortie courte est le début exact de la sortie longue, pour la même entrée. Deux usages qui ne diffèrent que par la longueur demandée obtiennent donc des valeurs liées : une séparation de domaine dans l'entrée s'impose.
Usages : On s'en sert pour dériver des clés, générer de longues séquences pseudo-aléatoires ou échantillonner des valeurs dans les schémas post-quantiques comme ML-DSA, qui s'appuie sur SHAKE en interne.
Ce qui arrive si on s'en passe
Employer une XOF sans séparation de domaine dans l'entrée expose deux usages qui ne diffèrent que par la longueur demandée à des valeurs liées : la sortie courte de l'un est exactement le début de la sortie longue de l'autre, et une clé dérivée pour un usage révèle une partie de celle dérivée pour l'autre. Croire qu'une sortie plus longue apporte davantage de sécurité conduit à surestimer une construction plafonnée par son paramètre, et à choisir la variante la plus légère de SHAKE là où il fallait l'autre. Laisser couler le robinet plus longtemps n'a jamais rendu l'eau plus potable, seulement la facture plus lourde.
Explication de la marmotte
Une empreinte numérique, c'est une courte suite de caractères calculée à partir d'un fichier ou d'un message, comme une signature unique. D'habitude, sa longueur est fixée à l'avance. Avec ce type de fonction, on peut demander une empreinte aussi longue qu'on le souhaite : dix caractères, mille, un million. Le résultat semble tiré au hasard, mais il est toujours le même pour la même entrée. C'est pratique quand un programme a besoin de beaucoup de valeurs imprévisibles fabriquées à partir d'une seule graine.
