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_seedavecsha256pour créer lehash#1 - Hashage du
hash#1 (sous forme hexadécimale textuelle) avecsha256pour créer lehash#2 - Réitère l’étape (2.) jusqu’à avoir une liste de
hashsuffisamment 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
hashest 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 unhashd’uneseed_pool) dans le champ « Start hash » - Saisissez le
ending_hash(ou unhashpostérieur) au sein de la mêmeseed_pooldans 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
seeddu 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 😉