(Przepraszam, jeśli jest to dobrze znane.) Chciałbym podać jakiś przedmiot jednemu z agentów, aby agent j otrzymał element z prawdopodobieństwem p i . Czy istnieje narzędzie kryptograficzne (lub inne), aby każdy agent (a nawet każdy obserwator) był w stanie przekonać się, że losowe losowanie rzeczywiście było uczciwe?
cr.crypto-security
Gil Kalai
źródło
źródło
Odpowiedzi:
Jeśli dobrze rozumiem problem, wydaje się, że sprowadza się to do publicznego rzutu monetą side. Wydaje się, że istnieje wiele sposobów na zrobienie tego, jeśli podejmiesz trochę zaangażowania. Jednym przykładem może być wygenerowanie przez każdą ze stron losowej liczby całkowitej od 0 do k - 1 , przy użyciu zobowiązania do bitu do publicznego zatwierdzenia tego ciągu bitów. Następnie, gdy każdy agent się zgodzi, wszyscy publicznie ujawniają swoją tajną liczbę całkowitą. Zwycięski agent jest następnie indeksowany przez sumę liczb całkowitych modulo k . Jeśli choć jeden agent jest uczciwy, flip musi być losowy.k k−1 k
Oczywiście jednym z problemów jest to, że wymaga nieco zaangażowania. Teoretyczne schematy informacji dotyczące zaangażowania bitowego są niemożliwe zarówno w przypadku obliczeń klasycznych, jak i kwantowych (chociaż Adrian Kent niedawno zaproponował schemat wykorzystujący teorię względności). Jednak bezpieczne zaangażowanie bitów można osiągnąć przy założeniach obliczeniowych.
źródło
Jak zauważyli inni użytkownicy, jest to dobrze zbadany problem w kryptografii. Nazywa się to „rzutowaniem monetą” i jest szczególnym przypadkiem obliczeń wielopartyjnych.
Jaki protokół faktycznie wykonuje to zadanie, zależy bardzo od kontekstu.
Aby dać wyobrażenie o tym, jak jest subtelny, protokół „wszyscy zobowiązują się do losowych wartości” sugerowany przez innego respondenta jest niepewny, czy stosowany schemat zobowiązań jest elastyczny. Schematy zobowiązań niewymienialnych dają ci bezpieczny protokół, ale ich projektowanie jest nieco skomplikowane.
źródło
Uwaga: przeczytaj poniższe komentarze. Ten protokół wydaje się mieć problemy.
Każdy agent może być pewien, że wybrana liczba losowa jest losowo równomiernie, wybierając losowo swój własny wektor. Aby każdy obserwator mógł zostać przekonany, musi ufać, że przynajmniej jeden agent postępował zgodnie z protokołem, ale jeśli nie, chyba chyba nikt nie chciał uczciwej loterii.
źródło
Bierni obserwatorzy nie mogą zweryfikować, czy rysunek nie został zainscenizowany. Dane wejściowe do procesu pseudolosowego można wybrać w celu uzyskania pożądanego rezultatu.
Jeśli jednak obserwator może podać losową liczbę, o której wie, że jest losową ORAZ upewnić się, że inni agenci nie zmienią później swoich danych wejściowych (ponieważ mogliby zrekompensować jego efekt swoimi danymi wejściowymi), to może być pewien, że wynik był rzeczywiście losowy .
Wymaga to schematu zobowiązań, którego nie znamy, a który jest matematycznie udowodniony, że jest bezpieczny, ale w praktyce można go zrealizować za pomocą bezpiecznego skrótu (takiego jak SHA3).
Rozważ ten przykład:
Zrobiłem przykładową implementację. Możesz to zobaczyć na żywo tutaj: https://mrogalski.eu/cl/ lub sprawdź źródła na GitHub .
źródło