Une loterie dont vous pouvez être convaincu qu'elle est équitable

27

(Désolé si cela est bien connu.) Je voudrais donner un élément à l'un des agents, afin que l'agent obtienne l'élément avec la probabilité . Existe-t-il un outil cryptographique (ou autre) pour que chaque agent (et même chaque observateur) puisse être convaincu que le tirage au sort était effectivement juste?j p ikjpi

Gil Kalai
la source
1
Les agents sont-ils autorisés à connaître .. ? p kp0pk
Mike Samuel

Réponses:

19

Si je comprends bien le problème, il semblerait que le public retourne une pièce à . Il semble y avoir beaucoup de façons de le faire si vous assumez un peu l'engagement. Un exemple serait que chaque partie génère un entier aléatoire entre 0 et , en utilisant l'engagement de bits pour s'engager publiquement sur cette chaîne de bits. Ensuite, une fois que chaque agent s'est engagé, ils révèlent tous publiquement leur entier secret. L'agent gagnant est alors celui indexé par la somme des entiers modulo . Si même un seul agent est honnête, alors le flip doit être aléatoire.k - 1 kkk1k

Bien sûr, un problème avec cela est qu'il nécessite un peu d'engagement. Les schémas théoriques de l'information pour l'engagement des bits sont impossibles à la fois pour l'informatique classique et quantique (bien qu'Adrian Kent ait récemment proposé un schéma exploitant la relativité). Cependant, l'engagement de bits sécurisés peut être obtenu avec des hypothèses de calcul.

Joe Fitzsimons
la source
2
Mon problème avec cette approche est que si vous voulez convaincre beaucoup d'observateurs extérieurs de l'équité, alors chacun d'eux doit s'engager un peu et vous devez être sûr que chacun d'eux révélera la preuve de son engagement. Vous ne pouvez pas simplement ignorer le bit d'un observateur qui ne révèle pas sa preuve, car le dernier observateur à révéler pourrait manipuler le résultat de la loterie en décidant de révéler ou non sa preuve.
Zsbán Ambrus
1
@ user8067: Je ne pense pas que ce soit possible sans interaction ni confiance qu'au moins une partie soit honnête. La raison pour laquelle je dis cela est que si le caractère aléatoire initial est en fait prédéterminé par une conspiration de tous ceux qui participent à ce moment-là, alors tout le processus est déterministe et non aléatoire. Cependant, le problème nécessite que le processus soit aléatoire, donc cela semble être le mieux que vous puissiez faire.
Joe Fitzsimons
2
Je ne suis pas convaincu que ce soit possible.
Joe Fitzsimons
2
@RickyDemer: Il n'y a pas suffisamment d'informations dans la question pour savoir quel modèle d'adversaire est applicable ici. Si Gil nous disait exactement à quoi cela sert, alors il serait plus facile de prouver si un programme spécifique répond ou non à ses exigences. Mais cela dit, je ne doute pas que Gil soit plus que capable de vérifier si nos réponses répondent ou non à ses besoins.
Joe Fitzsimons
2
@RickyDemer: Ce n'est pas du tout clair pour moi quel est le modèle évident pour ce cas. Cela dépend fortement de la configuration et les hypothèses par défaut ne sont pas évidentes. C'est un peu trop de downvote et de commencer à agir comme ma réponse et Lev's ont tort. Ils n'incluent pas explicitement la mise en garde soulignée dans la réponse d'Adam. Notez que je ne modifie pas ma réponse, car sans plus d'informations de Gil, je ne pense pas qu'il soit logique de deviner le modèle de l'adversaire, et je le laisse donc aussi général que possible (ne spécifiant pas si le l'engagement de bits doit être non-maliable).
Joe Fitzsimons
15

Comme d'autres utilisateurs l'ont laissé entendre, il s'agit d'un problème bien étudié en cryptographie. Il est appelé "coin-flipping" et est un cas particulier du calcul multipartite.

Quel protocole fait le travail dépend en fait beaucoup du contexte.

  • Dans le cadre "autonome", le protocole sera exécuté de manière isolée, sans que les joueurs soient impliqués dans d'autres protocoles (ou, en fait, aucune interaction avec le monde extérieur) en même temps. Il y a un traitement merveilleusement approfondi de cela dans le manuel d'Oded Goldreich "Foundations of Cryptography" (Volume 2, je pense).

Juste pour donner une idée de sa subtilité, le protocole "tout le monde s'engage sur des valeurs aléatoires" suggéré par un autre répondant n'est pas sûr si le schéma d'engagement que vous utilisez est malléable. Les schémas d'engagement non malléables vous offrent un protocole sécurisé, mais ils sont un peu compliqués à concevoir.

  • Dans les paramètres où les participants sont impliqués dans d'autres protocoles simultanés, vous voulez un protocole qui soit composable . Il existe différentes notions de composabilité, mais la plus forte, appelée composabilité universelle , nécessite des hypothèses de configuration supplémentaires (par exemple, une PKI ou une chaîne aléatoire commune visible par toutes les parties mais contrôlable par aucune d'entre elles). Je ne connais malheureusement pas de traitement accessible de ce sujet. Mais regarder un document récent sur la composabilité universelle ou l'engagement non malléable serait un bon point de départ.
Adam Smith
la source
1
«Une chaîne aléatoire commune visible par toutes les parties mais contrôlable par aucune d'entre elles» est exactement ce que nous voulons générer.
Zsbán Ambrus
1
et après avoir en quelque sorte résolu ce problème une fois, on peut universellement composer résoudre à nouveau (arbitrairement plusieurs fois).
Je pense que l'engagement UC est connu pour la configuration de la clé publique enregistrée (qui est une hypothèse plus forte que PKI) et la configuration multi-chaînes (qui est une hypothèse plus faible que la chaîne aléatoire commune).
2
Bienvenue sur le site, Adam!
Gil Kalai
11

Remarque: veuillez lire les commentaires ci-dessous. Ce protocole semble avoir des problèmes.


Je ne connais pas beaucoup la cryptographie, mais peut-être que ce qui suit fonctionnerait. En supposant que les sont connus du public, tout ce qui est nécessaire pour déterminer le gagnant est de sélectionner un nombre aléatoire parmi [0,1]. pj

Voici le processus: chaque agent sélectionne un vecteur aléatoire dans , où est le nombre de bits de précision nécessaires au processus. Ensuite, ils s'engagent tous dans leurs vecteurs en utilisant des protocoles connus. Enfin, une fois que tous les vecteurs sont engagés, tous leurs vecteurs sont révélés (et vérifiés) et XORed et le résultat est le nombre aléatoire à utiliser. A savoir, le vecteur résultant est la représentation binaire des chiffres au-delà de la virgule décimale. b{0,1}bb

Tout agent peut être sûr que le nombre aléatoire choisi est venu uniformément au hasard en choisissant son propre vecteur uniformément au hasard. Pour qu'un observateur soit convaincu, il doit avoir confiance qu'au moins un agent a suivi le protocole, mais si aucun ne l'a fait, je suppose que personne ne voulait vraiment une loterie équitable pour commencer.

Lev Reyzin
la source
Désolé Lev, je viens de remarquer ta réponse. Quand j'ai commencé à écrire une réponse, il n'y avait rien ici, mais nous semblons tous les deux avoir trouvé des réponses très similaires.
Joe Fitzsimons
Pas de soucis! On dirait que nous sommes sur la bonne voie, alors.
Lev Reyzin
Oui, en fait, je pense qu'il y a beaucoup d'articles à ce sujet dans le contexte du retournement de pièces, mais je ne connais pas assez bien cette littérature pour donner une réponse correcte sur la base de cela.
Joe Fitzsimons
7
La première référence que je connaisse est: M. Blum. Coin Flipping par téléphone. CRYPTO 1981: 11-15. Peut être téléchargé sur dm.ing.unibs.it/giuzzi/corsi/Support/papers-cryptography/…
Ryan Williams
4
Il existe une attaque standard, si vous utilisez des schémas d'engagement de bits standard (par exemple, le hachage). Prenons le cas de deux parties, Alice et Bob, où Alice va en premier. Après qu'Alice ait diffusé son engagement, Bob peut le copier. Après qu'Alice ait ouvert son engagement, Bob peut ouvrir le même maintenant. Maintenant, leurs vecteurs aléatoires sont égaux, donc ils xor à zéro - Bob a pu forcer la valeur finale à zéro, une contradiction de l'exigence d'équité.
DW
-3

Les observateurs passifs ne peuvent pas vérifier que le dessin n'a pas été mis en scène. Les entrées dans le processus pseudo-aléatoire peuvent être choisies pour donner le résultat souhaité.

Cependant, si l'observateur peut fournir un nombre aléatoire qu'il sait être aléatoire ET s'assurer que d'autres agents ne changeront pas leurs entrées par la suite (car ils pourraient compenser son effet avec leurs entrées), alors il peut être sûr que le résultat était bien aléatoire .

Cela nécessite un schéma d'engagement dont nous ne connaissons aucun qui est mathématiquement prouvé comme étant sûr mais qui peut en pratique être réalisé en utilisant un hachage sécurisé (tel que SHA3).

Considérez cet exemple:

entrez la description de l'image ici

J'ai fait un exemple d'implémentation. Vous pouvez le voir en direct ici: https://mrogalski.eu/cl/ ou consulter les sources sur GitHub .

Marek Rogalski
la source
1
Cela est déjà noté dans la réponse de Joe.
Kaveh
1
L'illustration graphique est très sympa!
Gil Kalai
3
Les graphiques sont très jolis mais votre réponse ne contient rien qui ne soit pas dans les réponses existantes.
David Richerby