Le problème du RNG classique
Dans une machine à sous en ligne typique, le générateur de nombres aléatoires (RNG) réside sur le serveur de l'opérateur. Le joueur ne voit que le résultat. Même un opérateur honnête ne peut prouver à un joueur donné que ce tour précis n'a pas été truqué — il faut se fier aux certificats et à la réputation.
Le provably-fair comble cette lacune : l'opérateur « verrouille » son secret à l'avance, et après la partie le révèle, afin que chacun puisse recalculer le résultat indépendamment.
schéma commit-reveal
Avant une série de tours, le serveur génère un serverSeed et ne publie que son hash — SHA-256(serverSeed). C'est un « commit » : le serveur s'est engagé, mais la graine elle-même n'est pas encore révélée, elle ne peut donc pas être modifiée rétroactivement.
Le joueur ajoute son propre clientSeed — il peut être modifié à tout moment. Chaque tour est numéroté avec un compteur nonce. Le résultat est calculé de manière déterministe à partir de trois valeurs : serverSeed + clientSeed + nonce.
Lorsque le serverSeed change (rotation), l'ancien serverSeed est révélé — « reveal ». Le joueur vérifie que SHA-256(seed révélé) correspond au hash publié précédemment et recalcule tous ses tours passés.
Pourquoi exactement HMAC-SHA256
À partir de trois graines, un flux d'octets aléatoires est généré via HMAC-SHA256 — une fonction cryptographiquement sûre : connaissant le résultat, il est impossible de recalculer le serverSeed à l'envers, et changer un seul bit de la graine modifie complètement le résultat.
Un détail important est l'absence de "biais de modulo". Si vous prenez simplement le reste de la division d'un nombre aléatoire par la taille du rouleau, les symboles fréquents obtiennent légèrement plus de poids. Une implémentation correcte utilise l'échantillonnage par rejet : les valeurs de la "queue irrégulière" de la plage sont écartées, et la distribution reste strictement uniforme.
Comment vérifier votre tour
Dans notre moteur, chaque tour dispose d'un panneau d'équité : nonce, clientSeed, hash(serverSeed) avant la partie et le serverSeed révélé après la manche. Le point de terminaison /api/fair/verify recalcule indépendamment le résultat à partir de ces valeurs — vous obtenez le même résultat que celui vu dans le jeu.
Voilà ce que signifie « provably-fair » : vous ne le prenez pas pour argent comptant — vous le vérifiez. Le même mécanisme fonctionne en mode Megaways et dans les thèmes à cascades.