Il existe des dizaines d’outils pour tirer un nom au sort en ligne. Presque tous partagent le même défaut : ils vous demandent de leur faire confiance. Vous cliquez, une animation se joue, un nom sort. Rien ne distingue ce nom d’un nom choisi à l’avance, et rien ne vous empêche de relancer jusqu’à obtenir celui qui vous arrange.
Tant que le tirage n’engage rien, ce n’est pas grave. Dès qu’il y a un lot, une communauté qui regarde ou un client qui paie l’opération, le problème devient réel.
Un générateur aléatoire classique produit des nombres imprévisibles pour celui qui regarde, mais parfaitement contrôlables par celui qui l’exécute. L’opérateur choisit le moment, la graine, et le nombre d’essais. Aucune de ces trois choses n’est visible de l’extérieur.
C’est pourquoi une capture d’écran ne prouve rien, une vidéo de roue qui tourne non plus, et une déclaration d’honnêteté encore moins. Ce ne sont pas des preuves : ce sont des affirmations. Une preuve, c’est un dispositif qui permet à quelqu’un qui ne vous fait pas confiance d’arriver néanmoins à la même conclusion que vous.
Avant le tirage, l’organisateur publie l’empreinte cryptographique d’une graine secrète. L’empreinte ne révèle pas la graine, mais elle l’enferme : une fois publiée, il devient impossible de présenter ensuite une autre graine sans que l’empreinte ne cesse de correspondre.
L’engagement seul ne suffit pas — l’organisateur pourrait choisir une graine dont il connaît déjà le résultat. Il faut un second ingrédient, imprévisible au moment de l’engagement. C’est le rôle de drand, une balise d’aléa distribuée : un réseau de serveurs indépendants produit à intervalle régulier une valeur collective, qu’aucun acteur seul ne peut prédire ni infléchir, et que n’importe qui peut authentifier.
L’organisateur fixe à l’avance quel round servira. Ce round n’a pas encore été produit au moment où il s’engage.
Après le tirage, la graine est révélée. Le gagnant se calcule de façon déterministe à partir de la graine et de la valeur drand annoncée. N’importe qui peut vérifier trois choses : que la graine révélée correspond à l’empreinte publiée avant, que la valeur drand est authentique, et que le calcul donne bien ce gagnant-là. C’est ce que fait la page de vérification.
La mécanique cryptographique ne vaut que si la liste des participants est elle aussi hors d’atteinte. La liste est donc scellée à la fermeture des inscriptions, et son empreinte publiée avec le reste.
Le filtrage anti-fraude s’applique avant le calcul de cette empreinte, et ses règles sont publiques : double opt-in obligatoire, domaines jetables exclus, dédoublonnage, limitation par adresse IP. Un filtrage appliqué après coup, ou dont les règles varieraient, serait une porte dérobée.
Enfin, le tirage se programme au minimum 24 heures à l’avance : s’engager une seconde avant de tirer ne prouverait rien.
Vous n’avez plus à répondre aux accusations. Le sceptique dispose de tout ce qu’il faut pour trancher lui-même, et il tranchera en votre faveur, parce que le calcul est le calcul. Vous obtenez aussi une vidéo partageable du tirage.
Et si plusieurs lots sont en jeu, chaque rang est tiré dans le pool restant : personne ne gagne deux fois, et chaque rang se vérifie séparément.
La participation est toujours gratuite. Aucun flux d’argent ne vient d’un participant : seul l’organisateur paie l’outil. Cette gratuité n’est pas qu’un argument commercial — c’est ce qui maintient l’opération hors du champ des jeux de hasard.
Un tirage ordinaire, oui : l’opérateur maîtrise la graine, le moment et le nombre d’essais, sans que rien ne se voie. Un tirage provably-fair ne le peut pas, parce que l’engagement est publié avant que le hasard n’existe.
La graine révélée, le round drand et l’algorithme — les trois sont publiés. Le calcul se refait à la main ou avec n’importe quel outil.
Parce qu’un générateur local est contrôlé par celui qui l’exécute. drand est produit par un réseau d’organisations indépendantes, imprévisible avant sa publication et authentifiable après.
La liste peut venir d’inscriptions ouvertes ou d’un import CSV d’un million de caractères au maximum, à découper en plusieurs imports au-delà.