Aller au contenu
DrawSeal

Vérifiez qu’un tirage n’est pas truqué.

Aucune confiance aveugle requise : vous pouvez recalculer vous-même n’importe quel tirage DrawSeal, dans votre navigateur, à partir de données publiques.

Pourquoi ce tirage est fiable

Chaque tirage suit la même chronologie vérifiable. Voici comment, dans l’ordre où ça se passe à chaque fois.

  1. Avant l’ouverture de chaque tirage, nous tirons une graine secrète et publions son empreinte, en annonçant quel tirage de hasard mondial servira. Nous sommes engagés sans rien pouvoir prévoir.
  2. À la fermeture des inscriptions, la liste des participants est figée et son empreinte publiée. Plus personne ne peut alors y ajouter ni en retirer qui que ce soit.
  3. Cette empreinte est aussitôt soumise aux calendriers OpenTimestamps, qui l’ancrent dans la blockchain Bitcoin — un service indépendant, hors de notre contrôle. Nous ne pouvons plus prétendre l’avoir figée à un autre moment.
  4. Vingt-quatre heures plus tard, le hasard tombe publiquement, produit par un réseau international indépendant que personne ne pilote. Le gagnant en découle par un calcul que chacun peut refaire.

À aucun moment nous n’avons eu à la fois le pouvoir de changer quelque chose et la connaissance de ce que ça changerait.

Les 3 preuves que vous pouvez contrôler

  1. L’engagement était publié avant le tirage

    Une empreinte sha256 de la graine et un numéro de round drand sont publiés avant le tirage. L’organisateur ne peut donc pas choisir la graine après avoir vu les participants.

  2. L’aléa vient d’une source publique et signée

    DrawSeal utilise drand, une balise d’aléa publique dont chaque valeur est signée (BLS). La page de vérification contrôle cette signature.

  3. Le gagnant se recalcule à l’identique

    Avec la graine révélée + l’aléa drand + la liste (pseudonyme) des participants, votre navigateur rejoue le tirage. Si le gagnant affiché diffère, la fraude est visible.

Aucune donnée personnelle (e-mail) n’est jamais exposée : les participants apparaissent sous un identifiant pseudonyme.

Vérifier vous-même, sans nous faire confiance

  1. Avant le tirage, on publie un cadenas fermé (une empreinte) et on annonce qu’on utilisera un nombre tiré par un réseau public indépendant, à un instant précis dans le futur. On ne peut pas encore l’ouvrir, mais il est déjà là, figé.
  2. Après le tirage, on révèle la clé qui ouvre ce cadenas. N’importe qui peut vérifier que cette clé correspond exactement au cadenas publié avant — impossible de l’avoir changée après avoir vu qui participait.
  3. Le nombre aléatoire ne vient pas de nous : il est fourni par drand, un réseau public que personne ne contrôle. Vous pouvez aller le chercher vous-même ailleurs que sur notre site pour confirmer qu’il n’a pas été inventé.
  4. Avec la clé + ce nombre public, n’importe qui peut refaire exactement le même calcul que nous et retrouver le même gagnant — vous n’avez pas à nous croire sur parole, vous pouvez le vérifier.
Détails techniques (pour développeurs / audit)
  1. Données publiques. Servies en JSON, sans authentification, à l’adresse /api/public/giveaways/<identifiant-du-giveaway>/verification : empreinte de la graine (serverSeedHash), round drand ciblé, puis (après le tirage) la graine révélée, le beacon drand et le pool des participants (identifiants pseudonymes) avec les gagnants annoncés.
  2. Engagement. sha256(graine) === serverSeedHash, publié avant le tirage.
  3. Aléa. Signature BLS du beacon drand vérifiée à l’aide de la clé publique du réseau (fonction verifyBeacon). Contrôle indépendant : interroger directement https://api.drand.sh/52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971/public/<round> et comparer randomness à celle du bundle.
  4. Gagnant du rang r. finalHash = sha256(graine | drand | r | empreinte_du_pool), puis cible = finalHash mod Σpoids désigne le numéro de ticket gagnant dans le pool restant (rangs précédents retirés).

Algorithme complet publié dans le paquet open-source @drawseal/shared (verifyDraw, verifyBeacon, computeWinners) — réimplémentable dans n’importe quel langage à partir des seules données publiques ci-dessus.