Définition
Commit-reveal : définition
Le commit-reveal est une procédure en deux étapes où un participant publie d'abord une empreinte cryptographique d'une valeur (commit), puis la valeur elle-même plus tard (reveal), ce qui empêche les autres de copier ou d'exploiter son choix.
Thème : Sécurité et arnaques
Sur une blockchain publique, toute transaction en attente est visible dans la mempool avant d'être incluse dans un bloc. Si un utilisateur soumet directement une enchère, un vote ou un nombre aléatoire, d'autres peuvent le voir et réagir. Le commit-reveal contourne ce problème. Lors de la première phase, l'utilisateur envoie le hachage de sa valeur combinée à un nombre secret appelé sel. Ce hachage ne révèle rien, mais il engage l'utilisateur, qui ne peut plus changer d'avis. Lors de la seconde phase, il publie la valeur et le sel, et le contrat vérifie qu'ils correspondent à l'engagement initial.
Ce schéma sert dans de nombreux cas : enchères sous pli scellé, votes secrets jusqu'à la clôture, jeux où les joueurs choisissent simultanément, ou génération d'aléa à plusieurs participants. Le service de noms ENS l'utilise pour l'enregistrement des noms, afin d'éviter qu'un observateur ne réserve avant vous le nom que vous venez de demander. Le sel est indispensable : sans lui, un attaquant pourrait tester toutes les valeurs possibles, par exemple « oui » et « non » dans un vote, et retrouver le choix à partir du hachage.
Un exemple concret
Imaginons une enchère on-chain sur un objet numérique. Pendant la phase de commit, Alice envoie le hachage de son offre de 5 ETH accompagnée d'un sel secret, et Bob fait de même avec la sienne. Personne ne peut connaître les montants. Une fois la phase close, chacun révèle son offre et son sel. Le contrat vérifie les hachages et attribue l'objet à la meilleure offre valide.
Les risques à connaître
Le dernier participant à révéler peut décider de ne pas le faire si le résultat lui est défavorable, ce qui fausse notamment les tirages au sort : il faut donc prévoir des pénalités, comme la perte d'un dépôt. Les deux phases ajoutent du délai et des frais. Un sel trop court ou réutilisé rend l'engagement devinable.
Questions fréquentes sur Commit-reveal
Pourquoi ne pas envoyer directement sa valeur à un smart contract ?
Parce que les transactions sont visibles avant leur confirmation. D'autres participants pourraient copier ou contrer votre choix. Le commit masque la valeur jusqu'à ce qu'il soit trop tard pour l'exploiter.
Un commit-reveal garantit-il un hasard équitable ?
Pas à lui seul. Le dernier à révéler peut refuser de le faire s'il n'aime pas le résultat. Des dépôts de garantie ou des sources d'aléa vérifiables comme les VRF sont souvent utilisés en complément.