Seed serveur, seed client et nonce expliqués
Les données en un coup d'œil
| Donnée | Forme habituelle | Contrôlée par | Secrète? |
|---|---|---|---|
| Seed serveur | Chaîne aléatoire, souvent 64 caractères hexadécimaux | Casino | Oui, jusqu'à la rotation |
| Seed serveur hachée | 64 caractères hexadécimaux (SHA-256) | Casino | Non, engagement public |
| Seed client | N'importe quel texte | Joueur | Non |
| Nonce | Entier commençant à 0 ou à 1 | Augmente à chaque mise | Non |
| Ronde ou curseur | Entier commençant à 0 | Augmente au cours d'une mise quand il faut plus d'octets | Non |
Dans le système courant, elles se combinent ainsi :
HMAC-SHA256(serverSeed, clientSeed:nonce:round)
La seed serveur
La seed serveur est la source de hasard du casino. Elle devrait être générée avec un générateur de nombres aléatoires cryptographiquement sûr et être assez longue pour ne pas pouvoir être devinée. Une chaîne hexadécimale de 64 caractères représente 256 bits.
Pourquoi elle doit rester secrète
Quiconque connaît la seed serveur active, la seed client et le nonce peut calculer le prochain résultat. Si vous la connaissiez, vous pourriez miser seulement quand vous êtes certain de gagner. Le casino la garde donc cachée tant qu'elle est en usage.
Pourquoi elle doit faire l'objet d'un engagement
Le secret à lui seul permettrait au casino de changer la seed quand bon lui semble. Pour l'en empêcher, le casino publie le hachage SHA-256 de la seed avant que vous jouiez.
La seed serveur hachée
SHA-256 a deux propriétés qui font fonctionner l'engagement :
- Résistance à la préimage. À partir du hachage, il est impossible en pratique de retrouver la seed. Vos résultats futurs restent imprévisibles.
- Résistance aux collisions. Il est impossible en pratique de trouver deux seeds différentes ayant le même hachage. Le casino ne peut pas dévoiler plus tard une autre seed et prétendre qu'elle correspond.
L'engagement n'est utile que si vous en gardez une trace. Si vous comptez sur l'interface du casino pour vous montrer le hachage plus tard, un casino malhonnête pourrait en afficher un autre. Notez le hachage avant de jouer.
Texte ou octets?
La plupart des casinos hachent la seed exactement telle qu'elle est affichée, comme une chaîne de texte. Certains hachent les octets sous-jacents. Les deux méthodes donnent des hachages différents. Consultez la documentation si votre vérification du hachage échoue.
La seed client
La seed client est votre contribution. Par défaut, c'est habituellement une chaîne aléatoire, mais vous pouvez la remplacer par n'importe quel texte.
Pourquoi elle doit pouvoir être changée
Pensez à ce que le casino pourrait faire sans elle. Avant de s'engager, il pourrait générer un très grand nombre de seeds serveur candidates, simuler les résultats que chacune produirait pour des mises typiques, et en choisir une mauvaise. L'engagement resterait valide, parce que le casino utiliserait vraiment cette seed.
La seed client bloque cette manœuvre, parce qu'elle entre dans le calcul après l'engagement. Tant que le casino ne peut pas prévoir votre seed client, il ne peut pas savoir quels résultats une seed serveur donnée produira pour vous.
Pour que ça tienne :
- Vous devez pouvoir changer la seed client.
- Le casino doit réellement utiliser la valeur que vous fixez.
- Vous devriez la changer après l'affichage du hachage de la nouvelle seed serveur, pas avant.
Une seed client par défaut générée par le casino offre une protection plus faible, parce que le casino pourrait en principe l'influencer. Fixer la vôtre est le choix le plus sûr.
Le nonce
Le nonce est un compteur. Avec la même seed serveur et la même seed client, la première mise utilise le nonce 0 (ou 1), la deuxième utilise 1, et ainsi de suite. Il rend chaque mise unique tout en gardant toute la séquence reproductible.
Ce qu'il faut vérifier :
- Il augmente d'exactement un à chaque mise.
- Il n'y a pas de trous. Un trou pourrait signifier qu'une mise a été calculée sans être affichée.
- Il n'y a pas de répétitions. Une répétition voudrait dire que deux mises ont utilisé des données identiques.
- Il se réinitialise quand vous faites la rotation des seeds.
Les nonces sont habituellement partagés entre les jeux pour une même paire de seeds. Une mise au dice au nonce 41 et une mise au limbo au nonce 42 proviennent de la même séquence de seeds.
La ronde et le curseur
Une sortie HMAC-SHA256 contient 32 octets. À 4 octets par nombre à virgule, ça fait 8 nombres. Le dice et le limbo en ont besoin d'un. Le plinko à 16 rangées en a besoin de 16. Le mines a besoin d'un nombre par étape de mélange. Les jeux de cartes peuvent en demander beaucoup.
Quand un jeu a besoin de plus de 8 nombres, le générateur calcule un autre HMAC avec le numéro de ronde augmenté de un, et continue de lire des octets. La position dans ce flux est souvent appelée le curseur. Dans le code, un générateur typique calcule round = floor(cursor / 32), utilise l'octet à la position cursor - round x 32 dans ce HMAC, puis passe au suivant.
Le nonce reste le même pour toute la mise; seule la ronde change.
La rotation des seeds
La rotation met fin à la paire de seeds en cours. Le casino :
- Dévoile l'ancienne seed serveur.
- Génère une nouvelle seed serveur et affiche son hachage.
- Réinitialise le nonce.
Vous pouvez alors vérifier toutes les mises de l'ancienne paire. Beaucoup de casinos font la rotation automatiquement quand vous changez votre seed client. Certains vous permettent aussi de voir le hachage de la prochaine seed serveur avant de changer, ce qui vous permet de noter l'engagement d'avance.
Pourquoi la dévoiler seulement après la rotation
Dévoiler une seed qui sera encore utilisée rendrait les résultats futurs prévisibles. Les seeds sont donc toujours dévoilées après leur dernière utilisation. C'est pourquoi vous ne pouvez pas vérifier une mise que vous venez de placer avant d'avoir fait la rotation.
Tout mettre ensemble
Une bonne session provably fair ressemble à ceci :
- Notez la seed serveur hachée.
- Fixez votre propre seed client.
- Jouez.
- Faites la rotation.
- Comparez le SHA-256 de la seed dévoilée avec votre note.
- Recalculez un échantillon de résultats à partir des seeds, des nonces et des rondes, par exemple avec notre vérificateur.
Les mises en œuvre diffèrent
Les casinos diffèrent quant au format du message, à la valeur utilisée comme clé HMAC, à la valeur de départ du nonce, à la conversion des octets en nombres et aux formules des jeux. Certains jeux multijoueurs utilisent une chaîne de hachages publique et une valeur externe, comme le hachage d'un futur bloc de la chaîne de blocs, plutôt que des seeds par joueur. Les principes restent les mêmes; les détails doivent provenir de la documentation du casino.
Questions courantes sur les seeds
Le casino connaît-il ma seed client?
Oui, une fois que vous l'avez fixée, parce que le casino en a besoin pour calculer les résultats. Ce n'est pas un problème. Ce qui compte, c'est que le casino se soit déjà engagé envers la seed serveur avant de connaître votre seed client.
Devrais-je changer ma seed client souvent?
La changer n'améliore pas vos chances; chaque paire de seeds produit des résultats ayant la même distribution. La changer renouvelle par contre l'engagement et vous permet de vérifier la série précédente. Une routine raisonnable consiste à fixer votre propre seed client au début de chaque session.
Puis-je voir d'avance le hachage de la prochaine seed serveur?
Beaucoup de casinos affichent le hachage de la prochaine seed serveur à côté de celui de la seed actuelle. Le noter d'avance vous donne un engagement consigné avant que la seed entre en usage.
Une seed client plus longue est-elle plus sûre?
La seed client n'a pas besoin d'être secrète ni longue; elle doit être quelque chose que le casino ne pouvait pas prévoir au moment de son engagement. N'importe quelle valeur que vous choisissez vous-même après avoir vu le hachage de la seed serveur fait l'affaire.
Et si le casino réutilise une seed serveur?
Une seed serveur ne devrait jamais être réutilisée après avoir été dévoilée. Si vous voyez la même seed ou le même hachage réapparaître, notez-le et signalez-le.