(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 i
cr.crypto-security
Gil Kalai
la source
la source
Réponses:
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 kk k−1 k
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.
la source
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.
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.
la source
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}b b
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.
la source
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:
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 .
la source