Newsgroup: it.hobby.enigmi
Titolo: testa o croce al telefono

C'è un modo onesto ma semplice da implementare per giocare a testa o croce al telefono?
 
La soluzione che mi hanno proposto è basata sulla crittografia, roba coi numeri primi moltiplicati.
 
Funziona, ma non mi pare agile comunicare numeri primi enormi prima e dopo la previsione per sapere chi ha vinto.
 
Sapete pensare a qualcosa di alternativo?
 
Magari qualcosa di laterale o tecnologico, basta che sia veloce e facile.
Un protocollo tipo:
A: pippo
B: Testa?
A: pluto
B: Evvai!
 
Facciamo che il gioco si fa su un normale smatphone con whatsapp, internet, GPS, social ecc, ma escludiamo skype e videochat varie altrimenti è come giocare face-to-face.
 
Ciao, Silv:o)
 


Versione "analogica" con un caro vecchio elenco telefonico in mano ad entrambi i giocatori. Elenco grande come era (è??) quello di Roma che era in 2 volumi.
 
I giocatori concordano che testa=pari e croce=dispari (o viceversa)
Il giocatore A tira una moneta e senza dire il risultato sceglie un'utenza dall'elenco la cui ultima cifra del telefono è pari/dispari in funzione di quanto venuto dal tiro della moneta. A comunica al giocatore B il numero telefonico a meno dell'ultima cifra (senza ovviamente comunicare neanche l'utenza). Il giocatore B deve quindi scommettere su pari o dispari, dopo di che A comunica l'utenza così che B possa controllare l'ultima cifra.
 
Ovviamente il lancio della moneta è così completamente superfluo :-)
 
Ovviamente con l'elenco digitalizzato si può barare:
 - A, cercando preventivamente 2 numeri che differiscano solo nell'ultima cifra
 - B, cercando in pochi decimi di secondo il numero comunicatogli da A
 
Penso a qualcosa di meglio, va... :-)
 
Ciao
GaS
 

Stavo pensando che invece la versione "digitale" in cui posso sfruttare app e servizi on-line è forse troppo facile:
 
 
E-mail
A crea una casella di posta a@a.a di cui manda a B i dettagli a meno della password, poi manda una mail ad a@a.a con il risultato della moneta. A questo punto B fa la sua scelta è solo dopo A comunica la password della casella di posta così che B possa verificare il risultato.
La mail viene quindi utilizzata come una specie di notaio
 
Social cosi
A da a B gli estremi di un account su un qualche social e poi pubblica un post *privato* con il risultato della moneta.
B scommette e solo dopo A rende il post *pubblico*
 
 
E tante altre varianti sono possibili.
 
Avevi in mente qualcosa del genere?
 
Ciao
GaS

 Avevi in mente qualcosa del genere?
 
Più o meno. Se arrivano soluzioni "pure" comunicabili a voce è meglio, concordo che social e internet danno troppi aiuti.
 
Silv:o)

 primi moltiplicati.
 
Anche se mezza spoilerata, qualcuno ha pensato ad una implementazione con i numeri primi?
 
Silv:o)

 
 
 
Se si usa Linux ( ma forse c'e' un equivalente Win e Mac) ci sarebbe un modo
semplice:
 
-uno sceglie pari e l'altro dispari 
-ognuno da una parola di 4 o 5 lettere (il piu' possibile in contemporanea per
  evitare di fare prove e scegliere la parola).
- si usa il comando che calcola l' hash MD5 (usato per codificare le password)
  con la parola di chi ha scelto pari come "salt" e l'altra come password.
- si va a vedere se l'ultima cifra presente nell'hash e' pari o dispari.
 
il comando e' semplicemente (salt-> pippo passw->pluto)
 
# openssl passwd -1 -salt pippo pluto
$1$pippo$F9LWBxyY10vUi9mf7Zzq4
 
in questo caso e' pari.
 
in alcune versioni c'e' anche "mkpasswd" che fa lo stesso ma anche con altri
algoritmi.
In effetti puo' essere usata una qualsiasi funzione che calcola l'hash...
 
Ciao,
      Gorgo
 

 In effetti puo' essere usata una qualsiasi funzione che calcola l'hash...
 
In generale qualsiasi generatore di numeri random con seed è deterministico e non prevedibile (se non conosci l'algoritmo), il difficile è generare un seed che non sia costruito ad arte da uno dei due.
 
Silv:o)

 Silv:o)
 
 
Ciao,
      Gorgo
 

 secondo? Spiegami come fare....
 
Hai ragione, se nel titolo dico "al telefono" faccio pensare a tempi "telefonici". Il tuo approccio basato sul libro è perfettamente coerente con le richieste di semplicità, inoltre l'informazione data da A sull'esito del lancio non è falsificabile ed è abbastanza difficile da decodificare in tempi utili a barare. Però non puoi negare che se sfogliare un libro è sufficentemente lento da non permettere di barare è anche lento da verificare, perché non prevede scorciatoie: devi andare a cercare il libro. E il gioco risulterebbe noioso in fase di verifica.
 
Diciamo allora che l'informazione fornita da A sull'esito del lancio deve essere:
1) non falsificabile. Non ci deve essere modo di alterarla ne di dare una chiave di lettura che porti ad interpretarla in maniera opposta al reale.
2) difficilmente decodificabile senza chiave di lettura.
3) facile e veloce da verificare con l'adeguata chiave di lettura (che per la 1 non può essere fuorviante).
 
La tua soluzione del libro è ovviamente non falsificabile, perchè carta canta, ma se non è troppo facile da decodificare allora è troppo difficile da verificare, visto che le due operazioni coincidono.
 
La soluzione crittografica basata su hash e chiavi corte potrebbe andare bene, è semplice come decodifica e abbastanza robusta da non essere decodificabile. Inoltre non è falsificabile: la possibilità di collisione dell'hash è praticamente pari a zero.
Sul filone crittografico però mi piace di pià una soluzione come quella che ha generato questo post, che non necessita, almeno per il giocatore che cerca di indovinare, di niente di più che carta e penna (ma a dire il vero sono stato io a innalzare l'asticella proponendo di usare smartphone).
 
La soluzione di Gas basata sull'elenco del telefono fornisce discrete garanzie solo se non si ha la versione digitale dell'elenco, altrimenti fallisce miseramente in due punti su tre (falsificabile e craccabile) con la versione digitale, come anche lui ammette.
 
La soluzione basata sulle email è difficile da craccare senza le credenziali, facile e veloce da verificare con le credenziali, ma purtroppo è falsificabile perchè è vero che non posso facilmente taroccare l'ora di ricezione, ma dato che conosco le credenziali dell'account mi basta cancellare, prima di dare la password, una delle due email che avevo mandato.
 
Anche la soluzione basata sui post privati/pubblici sui social è falsificabile, mi pare.
 
 
Silv:o)

 Stessa cosa: pubblico due messaggi privati e rendo pubblico solo quello che mi fa comodo.
 
ok anche qui, geniale nella sua "semplicità"
 
Si vede che sono troppo onesto per pensare a simili colpi bassi :-)))
 
Ciao

 per evitare di fare prove e scegliere la parola).
 
C'è un modo più semplice che evita la necessità di scegliere contemporaneamente uno la salt e uno la password:
 
1) A lancia la moneta, poi calcola l'hash dell'esito e lo comunica a B, al netto del salt ovviamente, che è il prefisso;
 
2) B sceglie e comunica ad A la sua scelta;
 
3) A gli comunica il salt usato per il calcolo dell'hash;
 
4) B calcola l'hash dell'esito, usando lo stesso salt usato da A;
 
esempio 
A: dug/uTZUauri2dKC1t2z.0
B: croce
A: pippo
B: porc@# (ha scoperto che l'hash di "croce" è $1$pippo$2EkYZFQLL49eQhFcEqnVd/ e non $1$pippo$dug/uTZUauri2dKC1t2z.0)
 
anzi, visto che sono al telefono, si mandano solo la prime o le ultime lettere dell'hash.
 
A: zeta minuscola punto zero
B: croce
A: evvai!
B: ancora?!? stavolta non mi fido... dammi la salt.
A: pippo
B: uff. sette a cinque per te.
 
Ciao, Silv:o)
 


Stavo pensando esattamente lo stesso ed avevo cominciato a scrivere il
messaggio quando ho visto il tuo.....
 
Ma io ero rimasto al pari e dispari e codificavo un qualsiasi numero, immagino
che sapendo la parola codificata (testa o croce) permette qualche sotterfugio
(avendo tempo e CPU a disposizione)
 
A parte il trucco di limitare la comunicazione agli ultimi caratteri,
decisamente piu' semplice! 
 
 
Ciao,
      Gorgo
 

 decisamente piu' semplice! 
 
Comunque la crittografia è stata inventata proprio per trasmettere messaggi non falsificabili, difficilmente craccabili, facili da decodificare con la chiave: proprio i nostri scopi.
Con tablet e PC la si può usare nella forma più semplice: scrivo l'esito in un file qualsiasi (txt, word, pdf, jpeg) e te lo mando protetto da password se l'editor lo permette o al massimo zippato con password. Dopo che fai la previsione ti mando la password per controllare. Se non posso trasmettere file però non funiziona, mentre l'hash è relativamente semplice da inviare a voce, soprattutto se si usano solo alcuni caratteri.
 
Proporrei di vietare del tutto i tool di crittografia.
 
Le soluzioni carta penna e fantasia saranno le più gradite.
 
Ammessi smartphone e app ma non per la potenza di calcolo.
 
Per esempio, un'idea che mi era venuta stamattina in macchina ma non ho saputo concretizzare è sfruttare le fuzioni di reset password degli account.
Tipo A scrive su cloud l'esito, poi usa la funzionalità di reset password e l'email di reset arriva a B. Magari si può sfruttare la domanda di sicurezza (nome del gatto o della maestra delle elementari) da comunicare a B solo dopo aver ricevuto la sua previsione. Mi pare ancora falsificabile, perché di solito si può continuare ad accedere con la password vecchia anche dopo aver inviato la richiesta di reset.
 
Silv:o)


Dai un'occhiata a questo....
 
http://dl.acm.org/ft_gateway.cfm?id=1008911&type=pdf
 
 
"Coin Flipping by Telephone" by Manuel Blum, CRYPTO 1981
 
 
Comunque penso che l'unica soluzione al telefono che non passa da codifiche o
hash sia che uno da una indicazione che individua un numero univocamente ma
che richiede un certo tempo per trovarlo e l'altro deve immediatamente
scegliere pari o dispari, tipo pagina di un elenco telefonico ed il primo
numero e' quello che vale, o pagina e linea (piu' liungo da cercare), anche
peggio, pagina e numero di lettere, il primo cognome con quel numero di
lettere vale.
 
O anche, se si dispone di un fax e si puo' usare contemporaneamente al
telefono, mando un fax che contiene nell'ultima linea TESTA o CROCE e quando
il FAX sta trasmettendo (questo e' noto a tutti e due)  l'altro decide. 
 
Ciao,
      Gorgo
 

 il FAX sta trasmettendo (questo e' noto a tutti e due)  l'altro decide. 
 
Intanto non è proprio assicurata la non falsicabilita', per esempio usando un fax a scansione in tempo reale e qualche magheggio per la sostituzione dell'ultima riga, tipo adesivi o piegature (scrivo testa sulla penultima riga, copro la scritta col margine ripiegato e scrivo croce. Ci metto un decimo di secondo a togliere la piegatura se serve)
E poi non è proprio semplice certificare che avvenga DOPO la previsione. Troppo aleatorio. Si litigherebbe.
 
- Hai detto testa troppo tardi, hai letto l'ultima riga...
- Ma che dici, ancora si sentiva il rumore!
- Che è quella righina, hai messo una pecetta...
- A rosicone, cambia il toner piuttosto.
 
Silv:o)

 Silv:o)
 
Nuovo tentativo: complicato da mettere su ma poi potrebbe essere una soluzione
 
1) si crea un E-mail da qualche parte dove si permette forwarding multipli
2) si usa quell e-mail per registrarsi da qualche parte dove c'e' l'opzione di
   resettare la passwd in modo random
3) si mette il forward dell' e-mail agli indirizzi dei due 
4) si richiede una nuova passwd 
5) in base alla passwd si decide (ultima lettera o cose del genere)
 
Si puo' evitare 2 e 3 e direttamente usare il messaggio sull'email se e'
possibile controllare l'origine ed in effetti l'header del messaggio con la
passwd permette di controllare che arrivi veramente dal gestore della passwd,
quindi non e' possibile mandare all'e-mail un falso "messaggio di reset" .
 
Ma e' meglio con 2 e 3, che elimina la possibilita' che il primo che va vedere
e perde cancelli il messaggio e faccia finta di nulla ("Non ha funzionato!")
 
Ciao,
      Gorgo
 

 con i numeri primi?
 
La crittografia a chiave pubblica si basa proprio sul principio che fattorizzare numeri grandi è difficile.
 
A seconda dell'esito del lancio della moneta, si prendono due o tre primi "grandi", si moltiplicano tra loro e si comunica il prodotto.
Dopo aver ricevuto la previsione, si forniscono i fattori come prova.
 
I numeri devono essere abbastanza grandi da rendere difficile la fattorizzazione e scelti in modo tale che non si capisca dal numero delle cifre se i fattori sono 2 o 3.
 
Ciao, Silv:o)