Le dice provably fair expliqué étape par étape
Ce que vous pourrez faire
À la fin de ce guide, vous pourrez prendre les seeds et le nonce d'une mise au dice et calculer le résultat à la main, sans rien de caché. Nous avons calculé chaque chiffre ci-dessous en Python avec les modules standards hmac et hashlib, et vous pouvez les reproduire dans notre vérificateur.
Le système est le système courant utilisé par de nombreux casinos crypto pour le dice :
- Octets aléatoires :
HMAC-SHA256(serverSeed, clientSeed:nonce:round) - Nombre à virgule : quatre octets par nombre,
b1/256 + b2/256^2 + b3/256^3 + b4/256^4 - Résultat :
floor(float x 10001) / 100
Les casinos peuvent différer; consultez donc la page d'équité du casino avant de vous fier à cette formule.
Où trouver les valeurs
Dans la plupart des casinos, les valeurs dont vous avez besoin se trouvent dans un panneau appelé « Fairness », « Provably fair » ou « Seeds », accessible depuis l'écran du jeu ou les paramètres de votre compte. Cliquer sur une mise dans votre historique affiche habituellement sa seed client, son nonce et la seed serveur hachée utilisée. La seed serveur elle-même n'apparaît qu'après la rotation de la paire de seeds, souvent dans une liste de seeds précédentes ou dévoilées. Copiez chaque valeur exactement. Avant de jouer, enregistrez la seed serveur hachée quelque part à l'extérieur du casino, parce que c'est avec cette copie que vous comparerez la seed dévoilée. Notre page sur l'utilisation du vérificateur indique où se trouve habituellement chaque valeur et comment lire le résultat.
Les données d'entrée
| Donnée | Valeur |
|---|---|
| Seed serveur (dévoilée après la rotation) | a7c41e09d5b3f28e6c1d4a90b7e35f12c8d06e4b9a2f71c35e8d0b6a4f19c27e |
| Seed serveur hachée (présentée avant de jouer) | 3e29712c704eeff2d868f958cf08e44a1a16ecba4c974af0496e13bccdefaff2 |
| Seed client | maple-leaf-2026 |
| Nonce | 0 |
| Ronde | 0 |
Ce sont des seeds d'exemple inventées pour ce guide.
Étape 1 : vérifier l'engagement
Hachez la seed serveur en tant que texte avec SHA-256 :
SHA-256("a7c41e09...4f19c27e") = 3e29712c704eeff2d868f958cf08e44a1a16ecba4c974af0496e13bccdefaff2
Il correspond à la seed serveur hachée présentée avant de jouer; le casino a donc utilisé la seed envers laquelle il s'était engagé. S'il ne correspondait pas, rien de ce qui suit ne vaudrait la peine d'être vérifié. Notre guide sur le hachage de la seed serveur explique les causes courantes d'une fausse non-correspondance.
Étape 2 : construire le message
Joignez la seed client, le nonce et la ronde avec des deux-points :
maple-leaf-2026:0:0
Le dice n'a besoin que d'un nombre, et un HMAC en donne huit; la ronde reste donc à 0. Le nonce est le numéro de la mise dans cette paire de seeds. Certains casinos le font commencer à 1 plutôt qu'à 0.
Étape 3 : calculer le HMAC
Calculez HMAC-SHA256 avec la seed serveur comme clé et le message comme donnée. Le HMAC est défini dans la RFC 2104 et la norme NIST FIPS 198-1. La sortie fait 32 octets, affichés ici sous forme de 64 caractères hexadécimaux :
bea6dafadb325af8baff8145e3bb9406f7734638ecde39e473200c87fabb0ce0
Étape 4 : prendre les quatre premiers octets
Chaque paire de caractères hexadécimaux correspond à un octet :
| Hex | be | a6 | da | fa |
|---|---|---|---|---|
| Décimal | 190 | 166 | 218 | 250 |
Étape 5 : convertir les octets en nombre à virgule
Divisez chaque octet par une puissance croissante de 256 et additionnez les résultats :
| Terme | Calcul | Valeur |
|---|---|---|
| b1 / 256 | 190 / 256 | 0,7421875 |
| b2 / 256^2 | 166 / 65 536 | 0,002532958984375 |
| b3 / 256^3 | 218 / 16 777 216 | 0,0000129938... |
| b4 / 256^4 | 250 / 4 294 967 296 | 0,0000000582... |
| Nombre | somme | 0,744733511004597 |
Autre façon de voir les choses : les quatre octets forment le nombre de 32 bits 3 198 606 074, et le nombre à virgule est ce nombre divisé par 2^32 (4 294 967 296). Le résultat est toujours d'au moins 0 et inférieur à 1.
Étape 6 : convertir le nombre en résultat
Multipliez par 10 001 :
0.744733511004597 x 10001 = 7448.0798...
Arrondissez à l'entier inférieur : 7448.
Divisez par 100 : 74,48.
C'est le résultat de cette mise.
Pourquoi 10 001?
Le résultat peut prendre n'importe quelle valeur de 0,00 à 100,00 par pas de 0,01. Ça fait 10 001 valeurs possibles, et non 10 000, parce que les deux extrémités sont incluses. Multiplier par 10 001 et arrondir à l'entier inférieur donne un nombre entier de 0 à 10 000, et diviser par 100 donne le résultat à deux décimales.
Étape 7 : déterminer le gain ou la perte
Le résultat n'est que la moitié de la mise. Vos paramètres de mise déterminent l'issue. Supposons que vous misiez sur « résultat sous 50,00 » :
- 74,48 n'est pas sous 50,00, donc cette mise est perdante.
Si vous aviez misé sur « résultat au-dessus de 50,00 », elle serait gagnante. Les casinos affichent habituellement une probabilité de gain et un multiplicateur de paiement pour votre cible. L'écart entre la vraie probabilité et le multiplicateur constitue l'avantage de la maison. Le provably fair prouve que le résultat n'a pas été trafiqué; il ne change pas cet avantage.
Les mises suivantes de la même session
Gardez les mêmes seeds et augmentez le nonce de un à chaque mise :
| Nonce | Message | 4 premiers octets | Nombre x 10001 | Résultat |
|---|---|---|---|---|
| 0 | maple-leaf-2026:0:0 | 190, 166, 218, 250 | 7448,08 | 74,48 |
| 1 | maple-leaf-2026:1:0 | 84, 225, 67, 46 | 3315,95 | 33,15 |
| 2 | maple-leaf-2026:2:0 | 96, 184, 213, 115 | 3778,58 | 37,78 |
| 3 | maple-leaf-2026:3:0 | 146, 176, 213, 148 | 5730,68 | 57,30 |
Avec « résultat sous 50,00 », les nonces 1 et 2 gagnent et les nonces 0 et 3 perdent. Chaque résultat est fixé par les seeds et le nonce, et vous pouvez reproduire chacun d'eux.
Le code que nous avons utilisé
Voici le code Python que nous avons exécuté pour produire les chiffres ci-dessus. Il n'utilise que la bibliothèque standard.
import hashlib, hmac, math
server_seed = "a7c41e09d5b3f28e6c1d4a90b7e35f12c8d06e4b9a2f71c35e8d0b6a4f19c27e"
client_seed = "maple-leaf-2026"
print(hashlib.sha256(server_seed.encode()).hexdigest())
for nonce in range(4):
msg = f"{client_seed}:{nonce}:0".encode()
digest = hmac.new(server_seed.encode(), msg, hashlib.sha256).digest()
b = digest[:4]
f = b[0]/256 + b[1]/256**2 + b[2]/256**3 + b[3]/256**4
roll = math.floor(f * 10001) / 100
print(nonce, digest.hex(), list(b), f, roll)
Remplacez par votre propre seed serveur dévoilée, votre seed client et votre nonce pour vérifier vos mises. Si votre casino fait commencer les nonces à 1, commencez la plage à 1.
La conversion est-elle biaisée?
Un nombre à virgule construit à partir de quatre octets a 2^32, soit 4 294 967 296, valeurs possibles. Les répartir sur 10 001 résultats ne tombe pas juste : 4 294 967 296 = 10 001 x 429 453 + 7 843. Ainsi, 7 843 valeurs de résultat proviennent de 429 454 combinaisons d'octets possibles et les 2 158 autres de 429 453. La différence est d'environ 1 sur 429 000 par valeur de résultat, beaucoup trop petite pour avoir de l'importance pour un joueur et bien inférieure à n'importe quel avantage de la maison.
Raisons courantes pour lesquelles votre résultat ne correspond pas
- Nonce décalé de un. Essayez le nonce juste au-dessus ou juste en dessous.
- Mauvaise seed client. Si vous l'avez changée pendant la session, les mises précédentes utilisaient l'ancienne. Consultez les détails de la mise. Notre guide sur le changement de votre seed client traite de cette question.
- Mauvaise paire de seeds. Assurez-vous que la seed serveur dévoilée correspond à la période de la mise.
- Système différent. Certains casinos utilisent un autre format de message, placent la seed client dans la clé ou utilisent une autre formule pour le dice.
- Erreurs de copie. Une espace à la fin de la seed client change complètement le HMAC.
Si toutes les données sont correctes, que le casino documente ce système et que le résultat diffère quand même, enregistrez des captures d'écran de la mise, des seeds et de la documentation, et communiquez avec le casino. Notre guide pour vérifier une mise explique quoi faire ensuite.
Jouez dans vos limites
Le dice est rapide. À plusieurs mises par seconde, l'avantage de la maison s'applique très vite à un gros total misé. Fixez-vous une limite avant de commencer et consultez notre page sur le jeu responsable si ça cesse d'être amusant.
Sources
- RFC 2104, HMAC: Keyed-Hashing for Message Authentication: https://datatracker.ietf.org/doc/html/rfc2104
- NIST FIPS 198-1, The Keyed-Hash Message Authentication Code (HMAC): https://csrc.nist.gov/pubs/fips/198-1/final
- NIST FIPS 180-4, Secure Hash Standard: https://csrc.nist.gov/pubs/fips/180-4/upd1/final
- Documentation Python, module hmac : https://docs.python.org/3/library/hmac.html
- Documentation Python, module hashlib : https://docs.python.org/3/library/hashlib.html
Conditions clés
- Dice
- Jeu vérifiable par seeds où vous fixez un nombre cible et prédisez si le tirage aléatoire tombera au-dessus ou en dessous.
- HMAC
- Une fonction de hachage qui utilise une clé secrète; les jeux provably fair appliquent HMAC-SHA256 à la seed serveur, à la seed client et au nonce.
- SHA-256
- Un hash cryptographique qui transforme n'importe quelle entrée en un condensé fixe de 256 bits; les casinos l'utilisent pour s'engager sur les seeds serveur.
- Seed serveur
- La valeur aléatoire secrète du casino qui, avec votre seed client et le nonce, détermine le résultat de chaque pari.
- Seed serveur hachée
- Le condensé SHA-256 de la seed serveur secrète du casino, publié avant tout pari comme preuve que la seed est figée.
- Seed client
- La contribution du joueur à chaque résultat provably fair, définie ou modifiée par vous pour que le casino ne puisse pas calculer les résultats à l'avance.
- Nonce
- Un compteur de paris qui augmente d'une unité à chaque mise sur la même paire de seeds, pour que deux paris ne partagent jamais le même résultat.
- Avantage de la maison
- Le pourcentage moyen de chaque mise qu'un jeu est conçu pour conserver au profit du casino.