Drawchain™ par Pickaw

La Drawchain™ régit l'intégralité des tirages effectués sur Pickaw et vous permet de vérifier que tout se déroule normalement. C'est le socle commun où repose toute la structure et la technique des tirages effectués sur Pickaw.

Vue d'ensemble de la Drawchain™

Drawchain™
Seed Pool
Seed45cdz4W0Cc28sZaQ
SeedyVQ42tfQ8McEjIIA
SeedRWwjzQw4ShULofUd
Seed Pool
SeednnWqTElLhG6OvPPF
Seed06nrizrLXKHhbEAg
SeedFLvwQhNjahe6WGrO

Pour commencer, voici un schéma représentatif de la Drawchain™ pour vous faire une image mentale et mieux comprendre la suite qui sera un peu plus technique.

Drawchain™

— Ensemble de Seed Pool.

La Drawchain™ régit l'ensemble des tirages effectués sur Pickaw grâce aux liens entre les seed pools.

Seed Pool

— Ensemble de Seed.

À chaque jour correspond une Seed Pool étant à l'origine des seeds générées et utilisées par les tirages faits le jour-même.

Seed

— Chaîne de caractères.

Chaque seed est unique et peut être associée à un tirage pour en produire et reproduire le déroulement et l'issue.

Définitions techniques

Avant de rentrer dans le vif du sujet, voici une liste de définitions techniques pour vous familiariser avec les termes que vous rencontrerez à plusieurs reprises sur cette page :

  • master_seed : chaîne unique et aléatoire de 32 caractères en base62.
  • seed_pool : liste finie de hash générés de manière consécutive.
  • hash, global_hash, ending_hash : chaîne unique et aléatoire de 64 caractères hexadécimaux.
  • seed : chaîne unique et aléatoire de 16 caractères en base62.
  • sha256 : fonction de hashage standardisée et très sécurisée.
  • base62 : codage de l'information sous 62 caractères.

Entrons dans les détails...

Il est temps de s'y mettre ! Comme décrit un peu plus haut, la Drawchain™ est un nom donné à la liste regroupant les Seed Pool. Nous allons donc voir maintenant ce qu'elle contient et comment les Seed Pool l'alimentent !

Création d'une Seed Pool

L'origine d'une seed_pool provient de la master_seed générée par Random.org à notre demande chaque soir peu de temps avant minuit UTC pour la journée suivante.

Une seedPool contient donc la liste de toutes les seeds des tirages définitifs d'une période de 24 heures.

Cette master_seed est alors utilisée afin de générer une liste de hash suffisamment grande pour pouvoir servir tous les tirages au sort de la durée de vie de la seed_pool.

Voici les étapes de la génération de la liste de hash :

  • 1. Hashage de la master_seed avec sha256 pour créer le hash #1
  • 2. Hashage du hash #1 (sous forme hexadécimale textuelle) avec sha256 pour créer le hash #2
  • 3. Réitère l'étape (2.) jusqu'à avoir une liste de hash suffisamment grande

Tous les hash sont donc générés consécutivement et dépendent de la master_seed.

Le ending_hash est le dernier hash généré, il n'est pas utilisé et permet uniquement de s'assurer que la seed_pool ait un début (master_seed) et une fin (ending_hash) dans le but de prouver qu'elle n'a pas été altérée durant sa mise en service.

Seed Pool
199bd291b6a487bdcc2c2ee694fe33795ce68a7f98980f5b122850311c8b0c58
dff3c4d48755ba4b5d502abeeaf634f641d648912ea0f2112a19994446ed2234
054ef27ac47492d889f3ee68bbe31c5a748b1445d0c8d0c39f3434c9ab1563e9
3172b0dbd9355666b0dd60ca841066adde4d8bdae0123998ea0f936d2ae1ea2a
0bebacec2587be7b59279dd0785ddf7d503879e84dc52129d08e73c3d78f2803
...
f866064fc6962b11c85221f3be57bc68d1d017151dc4a9d1b3aee5e06f83660b
970ee7b2a0c4697c2344b8217c0f63c310ac52d6b9bea9b265b5c2d27d007635
TSSJNvGrhPgWYx833cU8DRYCr6Ge6Q8s
master_seedending_hashhash
La master_seed et les hash qui n'ont pas encore été utilisés sont volontairement non divulgués jusqu'à la mise hors-service de la seed_pool afin d'éviter toute prédiction de hash ou de seed et donc une possible altération de tirage.

Une fois que les hash ont tous été générés, la seed_pool est enfin prête à être utilisée. La précédente est mise hors-service et la nouvelle prend le relai ; la master_seed précédente est désormais publique et peut être vérifiée (voir ci-dessous).

Génération et utilisation d'une Seed

Lorsqu'un tirage au sort est demandé sur Pickaw, un hash est dépilé de la seed_pool en service et permet de générer une seed unique qui sera attribuée et utilisée pour le tirage.

Les hash sont consommés en partant de la fin de la seed_pool afin de s'assurer que les suivants ne puissent pas être prédits pour altérer les tirages (pour rappel les hash n'ayant pas encore été utilisés ne sont pas visibles publiquement).

Voici les étapes de génération d'une seed :

  • 1. Le hash est converti en base 10 puis divisé par la valeur limite d'une seed (6216) pour ne garder que le reste de la division (cette opération est également appelée modulo)
  • 2. La valeur obtenue est convertie en base62, préfixée par autant de zéros que nécessaires pour produire une chaîne de 16 caractères : on obtient donc la seed
Comme évoqué plus haut, une seed est une chaîne de 16 caractères en . Ce qui signifie qu'elle peut être convertie en un gros nombre, et vice-versa. Sa valeur décimale (base 10) peut donc être comprise entre 0 (inclus) et 6216 (exclu), soit 47672401706823533450263330816.

La seed générée est enregistrée et peut désormais être utilisée pour donner lieu au tirage... et ainsi de suite jusqu'à la mise hors-service de la seed_pool.

Seed Pool
199bd291b6a487bdcc2c2ee694fe33795ce68a7f98980f5b122850311c8b0c58
dff3c4d48755ba4b5d502abeeaf634f641d648912ea0f2112a19994446ed2234lidjXjrPQvOVTNcM
054ef27ac47492d889f3ee68bbe31c5a748b1445d0c8d0c39f3434c9ab1563e9veBU6I7Kr7ATAk6l
3172b0dbd9355666b0dd60ca841066adde4d8bdae0123998ea0f936d2ae1ea2aEH5WZd5kvxgPp2Fc
0bebacec2587be7b59279dd0785ddf7d503879e84dc52129d08e73c3d78f2803SJvamW7ILjC7hQEr
...
f866064fc6962b11c85221f3be57bc68d1d017151dc4a9d1b3aee5e06f83660bunused
970ee7b2a0c4697c2344b8217c0f63c310ac52d6b9bea9b265b5c2d27d007635unused
TSSJNvGrhPgWYx833cU8DRYCr6Ge6Q8s
master_seedending_hashhashseed

On peut voir sur cette représentation que 4 seed ont été générées (à partir des derniers hash de la seed_pool) jusqu'à sa mise hors-service. Les autres hash sont inutilisés et n'ont pas donné lieu à la création de seed.

Vérification des tirages

Maintenant que vous savez comment les seed_pool et seed sont générées, nous arrivons à la partie intéressante et intéractive : comment nous prouvons que les gagnants proviennent bien des fruits du hasard. Hasard que vous pouvez vérifier par vous-même !

La vérification peut se faire à partir de n'importe quel niveau de la Drawchain™ et de plusieurs manière différentes que nous vous listons ci-dessous.

À partir de la master_seed

Pour commencer, vous pouvez vérifier que la master_seed que nous utilisons pour générer les hash d'une seed_pool est bien celle issue de Random.org grâce au lien joint à la master_seed directement depuis la Drawchain™ ou la Seed Pool en question.

Pour rappel, cette méthode de vérification auprès de Random.org n'est possible qu'après la mise hors-service de la seed_pool dont provient la master_seed.

À partir de la seed_pool

Également, vous pouvez vérifier à n'importe quel moment que la liste des hash générés n'a pas été altérée et suit bien la logique décrite plus haut. Afin de vous en assurer, nous avons créé un JSFiddle disponible ci-dessous pour pouvoir reproduire notre génération :

Comment l'utiliser ?

  • 1. Saisissez une master_seed (ou un hash d'une seed_pool) dans le champ "Start hash"
  • 2. Saisissez le ending_hash (ou un hash postérieur) au sein de la même seed_pool dans le champ "End hash*"
  • 3. Cliquez sur le bouton "Compute!"

À partir de la seed

Enfin, les positions des personnes tirées au sort sont vérifiables à n'importe quel moment à partir de la seed dès lors qu'un tirage est terminé. Afin de vous en assurer, nous avons créé un JSFiddle disponible ci-dessous pour pouvoir reproduire la génération des positions :

Comment l'utiliser ?

  • 1. Saisissez la seed du tirage dans le champ "Seed of the draw"
  • 2. Saisissez le nombre de participations du concours dans le champ "Number of entries"
  • 3. Saisissez le nombre de gagnants à tirer dans le champ "Number of winners"
  • 4. Cliquez sur le bouton "Compute!"
Pour beaucoup plus de simplicité, nous aurions pu publier le code source de l'application pour prouver que les tirages au sort sont faits dans les règles de l'art. Malheureusement ce n'est pas possible puisque notre code est propriétaire et que nous ne souhaitons pas le fournir à des tiers, d'où l'existence de cette page ! Et puis rien n'aurait assuré qu'on utilise bien cette version open source, encore une fois on en arrive à devoir croire sur parole donc autant ne pas partager tout notre savoir-faire. Aussi, toujours dans la simplicité, nous aurions pu tout simplement prendre un nombre au hasard entre 1 et le nombre de participations, mais ça n'est pas Pickaw 😉

Voilà, désormais la Drawchain™ et son mécanisme qui ont nécessité plusieurs mois de travail à eux seuls n'ont plus de secrets pour vous ! Nous espérons que ces explications ont été claires et qu'elles ne vous ont pas perdu.