Voglio scegliere a caso un gioco nei 50 giochi che ho, per giocare con uno dei miei amici. Ma questo amico non si fida di me, e nemmeno io: ogni volta che uno di noi prende una partita, l'altro si lamenta che la scelta non è stata davvero casuale.
Una prima soluzione potrebbe essere quella di mettere tutti i nomi in un cappello e dopo raccogliere un nome; ma siamo entrambi paranoici: il cappello potrebbe contenere solo un nome ripetuto 50 volte, quindi dobbiamo verificare che tutti i nomi siano presenti solo una volta per garantire una scelta casuale. Questo è troppo lungo.
Seconda soluzione: entrambi selezioniamo a caso un numero intero in [1,50], lo scriviamo su un foglio e sommiamo il risultato modulo 50. Questa è una buona soluzione quando ci troviamo di fronte l'un l'altro.
Ma cosa succede se vogliamo scegliere un gioco online, io a Parigi e il mio amico che gioca a New York? Ho provato a emulare il protocollo di cui sopra: ogni giocatore sceglie casualmente un numero in un intervallo enorme come [1,1e30] e in una prima volta invia un hash del suo numero (simulando il fatto di nascondere il numero su un pezzo di carta) . Quando ogni giocatore ha ricevuto l'hash dell'altro, i due giocatori pubblicano i loro numeri e aggiungono loro il modulo 50.
Questo protocollo è corretto? C'è un protocollo migliore (forse più veloce) per questo scopo?