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™
- Seed
45cdz4W0Cc28sZaQ
- Seed
yVQ42tfQ8McEjIIA
- Seed
RWwjzQw4ShULofUd
- Seed
nnWqTElLhG6OvPPF
- Seed
06nrizrLXKHhbEAg
- Seed
FLvwQhNjahe6WGrO
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.
seedPool
contient donc la liste de toutes les seeds des tirages définitifs d’une période de 24 heures. 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
:
- Hashage de la
master_seed
avecsha256
pour créer lehash
#1 - Hashage du
hash
#1 (sous forme hexadécimale textuelle) avecsha256
pour créer lehash
#2 - Réitère l’étape (2.) jusqu’à avoir une liste de
hash
suffisamment grande
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. - 199bd291b6a487bdcc2c2ee694fe33795ce68a7f98980f5b122850311c8b0c58
- dff3c4d48755ba4b5d502abeeaf634f641d648912ea0f2112a19994446ed2234
- 054ef27ac47492d889f3ee68bbe31c5a748b1445d0c8d0c39f3434c9ab1563e9
- 3172b0dbd9355666b0dd60ca841066adde4d8bdae0123998ea0f936d2ae1ea2a
- 0bebacec2587be7b59279dd0785ddf7d503879e84dc52129d08e73c3d78f2803
- ...
- f866064fc6962b11c85221f3be57bc68d1d017151dc4a9d1b3aee5e06f83660b
- 970ee7b2a0c4697c2344b8217c0f63c310ac52d6b9bea9b265b5c2d27d007635
TSSJNvGrhPgWYx833cU8DRYCr6Ge6Q8s
- master_seed
- ending_hash
- hash
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.
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
:
- Le
hash
est converti en base 10 puis divisé par la valeur limite d’uneseed
(6216) pour ne garder que le reste de la division (cette opération est également appelée modulo) - 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 laseed
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
. - 199bd291b6a487bdcc2c2ee694fe33795ce68a7f98980f5b122850311c8b0c58 lidjXjrPQvOVTNcM
- dff3c4d48755ba4b5d502abeeaf634f641d648912ea0f2112a19994446ed2234 veBU6I7Kr7ATAk6l
- 054ef27ac47492d889f3ee68bbe31c5a748b1445d0c8d0c39f3434c9ab1563e9 lidjXjrPQvOVTNcM
- 3172b0dbd9355666b0dd60ca841066adde4d8bdae0123998ea0f936d2ae1ea2a EH5WZd5kvxgPp2Fc
- 0bebacec2587be7b59279dd0785ddf7d503879e84dc52129d08e73c3d78f2803 SJvamW7ILjC7hQEr
- ...
- f866064fc6962b11c85221f3be57bc68d1d017151dc4a9d1b3aee5e06f83660b unused
- 970ee7b2a0c4697c2344b8217c0f63c310ac52d6b9bea9b265b5c2d27d007635 unused
TSSJNvGrhPgWYx833cU8DRYCr6Ge6Q8s
- master_seed
- ending_hash
- hash
- Seed
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
To begin with, you can check that the master_seed
we use to generate the hash
of a seed_pool
is the one from Random.org using the link attached to the master_seed
directly from Drawchain™ or the Seed Pool in 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 ?
- Saisissez une
master_seed
(ou unhash
d’uneseed_pool
) dans le champ « Start hash » - Saisissez le
ending_hash
(ou unhash
postérieur) au sein de la mêmeseed_pool
dans le champ « End hash* » - 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 ?
- Saisissez la
seed
du tirage dans le champ « Seed of the draw » - Saisissez le nombre de participations du concours dans le champ « Number of entries »
- Saisissez le nombre de gagnants à tirer dans le champ « Number of winners »
- 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 😉