Présentation
SequenceHash et son pendant SequenceMAC sont des constructions publiées par Trail of Bits le 2 octobre 2026. Elles visent à fournir un multihashing fiable – c’est‑à‑dire le hachage simultané de plusieurs valeurs – sans être limitées à la fonction Keccak utilisée par le standard NIST TupleHash. Le projet est open source, intégré au Community Cryptography Specification Project (C2SP) et accompagné d’implémentations en Rust, Go et Python ainsi que d’un jeu complet de vecteurs de test.
Fonctionnement
La spécification repose sur trois principes : encodage non ambigu des entrées, prévention de l’extension de longueur et prise en charge de chaînes de personnalisation. Chaque élément à hacher est préfixé par sa longueur en octets, ce qui élimine les collisions dues à la simple concaténation. Le mécanisme de prévention d’extension de longueur utilise un domaine séparateur interne, garantissant que le résultat d’une instance de SequenceHash ne peut pas être prolongé comme le permet un hash naïf. En mode MAC, SequenceMAC accepte des clés d’au moins 32 octets, avec une taille maximale théorique de 2^128‑1 octets.
import hashlib
hasher = hashlib.new('sha256')
hasher.update(b'Test 0')
hasher.update(b'Test 1')
hasher.update(b'Test 2')
print(hasher.hexdigest())
Ce fragment montre le problème classique : trois appels séparés à update produisent le même digest que deux appels où les deux premiers messages sont concaténés, illustrant l’ambiguïté d’encodage qui conduit à des collisions.
Analyse de sécurité
SequenceHash hérite de la sécurité du hash sous‑jacent ; il ne rend pas MD4 ou SHA‑0 sûrs. En revanche, lorsqu’il est couplé à un hash moderne comme SHA‑256, SHA‑384, SHA‑512, BLAKE ou RIPEMD, il garantit l’absence d’ambiguïté d’entrée et empêche les attaques de type length‑extension. La dépendance à un séparateur de domaine interne élimine le vecteur d’attaque exploité par les constructions naïves. Cependant, la robustesse de SequenceMAC dépend également de la qualité de la clé : des clés trop courtes (<32 octets) ne sont pas supportées, et la taille maximale de 2^128‑1 octets, bien que théorique, impose une contrainte de gestion de mémoire dans les implémentations.
Implémentations et adoption
Les trois bibliothèques publiées offrent une API compatible avec les bibliothèques de hachage standards de chaque langage. Les vecteurs de test incluent des valeurs intermédiaires pour chaque fonction de hachage supportée, facilitant le débogage et la vérification de conformité. Comparé à TupleHash, qui ne fonctionne qu’avec Keccak, SequenceHash permet aux développeurs d’utiliser le hash déjà présent dans leurs piles, réduisant ainsi la surface d’intégration et les coûts de performance. Cette flexibilité le rend particulièrement adapté aux protocoles de preuve à divulgation nulle de connaissance (Fiat‑Shamir) et aux engagements cryptographiques où la mauvaise manipulation des séparateurs peut entraîner des pertes financières importantes.