Register
Sarah Dic 16, 2018

La guida avanzata al mescolamento trasparente delle carte su CoinPoker

Fino ad oggi, le sale da poker online hanno mantenuto il riserbo sul loro software di mescolamento delle carte. I giocatori non sono stati in grado di verificare che questi sistemi chiusi mescolassero le carte in modo veramente equo, e questo è qualcosa che il Transparent Card Shuffler di CoinPoker è stato costruito per cambiare. La guida avanzata al mescolamento trasparente delle carte su CoinPoker

Non categorizzato

Fino ad oggi, le sale da poker online hanno mantenuto il riserbo sul loro software di mescolamento delle carte. I giocatori non sono stati in grado di verificare che questi sistemi chiusi mescolassero le carte in modo veramente equo, e questo è qualcosa che il Transparent Card Shuffler di CoinPoker è stato costruito per cambiare.

Utilizzando funzioni di hash crittografiche unidirezionali, il nuovo mescolatore di carte di CoinPoker consente di rivelare in modo sicuro le informazioni sul processo di mescolamento, dando la possibilità di:

Prima di immergervi nella tecnologia che sta dietro al mescolamento trasparente delle carte, date un’occhiata al nostro breve tutorial che vi aiuterà a testarlo da soli!

Come usare lo strumento di convalida per dimostrare la partecipazione

Se il nostro mescolatore di carte trasparente è del tutto nuovo per voi, vi suggeriamo di iniziare consultando la nostra guida di base con gli screenshot qui.

Fase 1: Per dimostrare l’equità della mano, è necessario accedere alle funzioni hash unidirezionali menzionate in precedenza. Le troverete cliccando sul link RNG Shuffle Order in basso nella scheda Hand History.

Fase 2: Qui si trova un lungo elenco di sequenze di hash. La prima sezione sarà per ogni carta nell’ordine iniziale del mazzo, seguita dai semi criptati di ogni giocatore e di CoinPoker, e infine dagli hash di ogni carta nell’ordine finale del mazzo.

Considerate i numeri elencati sotto la voce ” mazzo mescolato” come la loro posizione nel mazzo, e l’hash di ogni giocatore come il suo “fattore di scossa” criptato presentato all’inizio della mano.

Fase 6: Questi dati sono inutili senza lo Strumento di convalida, a cui si può accedere facendo clic sul link in alto nella finestra.

Fase 7: Il passo successivo è la convalida della mano, che può significare una delle due cose, a seconda che si desideri o meno:

  1. Verificare l’equità provando la vostra partecipazione alla “scossa”
  2. Verificare se la posizione effettiva di una carta nel mazzo finale corrisponde alla posizione criptata che avete partecipato a determinare prima del mescolamento

Per l’opzione 1:

Inserire nello Strumento di convalida i semi criptati o “fattori di mescolamento”, come li abbiamo chiamati. Questi sono contrassegnati dalle frecce blu. I risultati saranno il “fattore di scossa collettivo” o hash combinato e l’ ordine finale del mazzo.

Se corrispondono, avete verificato con successo la vostra partecipazione al rimescolamento!

Per l’opzione 2:

Scegliete una delle carte distribuite (queste avranno sia un hash a sinistra che la funzione hash criptata a destra. Inserire l’hash all’interno della funzione di destra nella sezione Convalida carta. Il risultato dovrebbe essere l’hash elencato a sinistra in CoinPoker e il valore corretto della carta.

Fase 8: Divertitevi a esplorare le carte non dealtate e a dimostrare la vostra partecipazione al primo sistema RNG decentralizzato del poker online!

La spiegazione avanzata: Come funziona il RNG trasparente di CoinPoker

Immaginate il mazzo di carte non mescolate come segue: 2c, Qd, Kh

In realtà, ci sarebbe una permutazione di 52 carte, ma per avere un’idea di come funziona questo processo, limiteremo il numero a tre. Utilizzando questo ordine di mazzo, CoinPoker creerà il mazzo iniziale e lo condividerà con tutti i giocatori al tavolo nei seguenti passaggi.

Fase 1

CoinPoker esegue il suo RNG utilizzando un valore segreto, che chiameremo seme. Questo valore esiste solo temporaneamente ed è semplicemente utilizzato per avviare il processo.

Fase 2

CoinPoker utilizza questo seme casuale per generare un valore di sale; un dato casuale che funge da password o passphrase per le funzioni crittografiche unidirezionali. Questo viene combinato con una carta per creare un hash per ogni carta del mazzo. Utilizzando le tre carte menzionate in precedenza, la formula sarebbe simile a questa:

  • Hash(2c salt1) = aa
  • Hash(Qd salt2) = bb
  • Hash(Kh salt3) = cc

Nota: gli hash aa, bb e cc sono semplificati per motivi di rappresentazione. In realtà, sono stringhe a 256 bit e sono un po’ più difficili da usare, almeno per gli esseri umani.

Passo 3

CoinPoker mescola il mazzo di carte con hash del passaggio 2 utilizzando il seme casuale del passaggio 1.

  • Il mazzo non mescolato in hash era: aa (2c), bb (Qd), cc (Kh)
  • Il mazzo rimescolato (mazzo iniziale) negli hashish è ora: bb (Qd), cc (Kh), aa (2c)

Passo 4

CoinPoker invia questo mazzo con hash (come vettore che include tutti gli hash delle carte nell’ordine iniziale del mazzo) a ciascun giocatore.

Lo scopo dell’utilizzo degli hash è quello di rendere possibile la rivelazione di alcune carte del mazzo e consentire ai giocatori di verificarle, senza esporre altre che dovrebbero essere tenute nascoste (ad esempio, le mani mucked). Ora tutti i giocatori sono in possesso dell’elenco di hash che rivela l’ordine iniziale del mazzo.

Le fasi successive riguardano il modo in cui il mazzo iniziale viene trasformato nel mazzo finale utilizzando gli input dei giocatori, che vengono combinati con quelli di CoinPoker per formare un input collettivo (detto anche seed aggregato). Anche in questo caso si parla di semi.

Fase 5

Ancora una volta, per semplificare la complessità di questo processo, immaginiamo che ci siano due giocatori al tavolo. Chiamiamoli Alice e Bob.

Passo 6

Alice e Bob devono ora calcolare un hash del loro seme da inviare a CoinPoker. La formula sarà simile a questa:

  • Hash(seme_di_alice) = XX
  • Hash(seme_di_Bob) = YY

Passo 7

CoinPoker genera un nuovo seme, diverso da quello del passaggio 1. Questo seme viene utilizzato per creare un’operazione di scambio. Questo seme casuale viene utilizzato per creare un hash: Hash(CoinPoker’s_seed) = ZZ

Passo 8

I semi hash dei giocatori, così come quelli di CoinPoker, vengono quindi compilati in un elenco di semi di impegno: [XX, YY, ZZ].

Passo 9

CoinPoker invia un vettore di semi di impegno ad Alice e Bob.

Passo 10

Dopo aver ricevuto i semi di impegno, Alice e Bob inviano il loro seme reale dal passaggio 5. Questo è il seme che è stato utilizzato per la creazione della lista di impegni. Questo è il seme che è stato utilizzato per creare gli hash. Quindi Hash(seme_di_alice) = XX e Hash(seme_di_bob) = YY.

Passo 11

I semi reali vengono quindi utilizzati per creare un seme aggregato. Questo nuovo seme tiene conto di tutti i semi dei giocatori e di quelli di CoinPoker, risultando in un valore a cui ha contribuito l’intero tavolo.

Hash(Alice’s_seed Bob’s_seed CoinPoker’s_seed) = aggregated_seed

Passo 12

CoinPoker utilizza il seme aggregato per mescolare il mazzo iniziale. L’hash del mazzo finale viene quindi distribuito a tutti i posti. Si noti che questo è il mazzo finale utilizzato fino al completamento della mano.

Mazzo iniziale: Qd, Kh, 2c → RNG con seme aggregato → Mazzo finale: Kh, 2c, Qd
(hash: cc, aa, bb)

Come funziona lo strumento di verifica RNG

Uno dei vantaggi principali dell’uso di funzioni hash crittografiche è che siamo in grado di rivelare in modo sicuro le informazioni sullo shuffle, che possono essere utilizzate in seguito per dimostrare se lo shuffle è stato equo. Chiamiamo questo strumento RNG Validation Tool e continueremo i passi per aiutarvi a capire come funziona.

Si noti che né Bob né Alice conoscono i semi reali dell’altro e hanno accesso solo al proprio seme reale. Ciò a cui hanno accesso sono tutti gli hash dei semi degli altri giocatori e di CoinPoker (ricordate i passi 8 e 9).

Dopo che la mano è stata giocata, i giocatori ricevono i semi reali di tutti i partecipanti, che possono utilizzare per verificare la loro partecipazione al mescolamento finale del mazzo e la casualità delle carte.

Fasi 13-18: Verifica dell’impatto dei giocatori sul mazzo mescolato

Passo 13

Per prima cosa, i giocatori devono prendere ogni seme reale e usarlo per verificare se il valore hash che hanno è corretto. Per farlo, inseriscono il seme reale nella formula dell’hash e verificano se il risultato corrisponde al valore reale ricevuto.

Se Hash(seme_di_alice) è effettivamente uguale a XX, allora viene verificato come corretto

Passo 14

Una volta che tutti i semi reali dei giocatori e di CoinPoker sono stati utilizzati per verificare gli hash, i giocatori possono anche verificare se il seme aggregato è corretto inserendo i valori mancanti in una funzione hash:

Hash(alice_seed bob_seed server_seed) = aggregated_seed

Passo 15

Ora che il seme aggregato è stato verificato come corretto da ciascun giocatore, Alice o Bob possono invertire la funzione RNG. Inserendo l’hash del mazzo finale e il seme aggregato per calcolare il mazzo iniziale, i giocatori possono verificare se il risultato è lo stesso ordine iniziale del mazzo ricevuto al passo 4.

Passo 16

Se il risultato corrisponde all’ordine hash del mazzo iniziale, il giocatore ha dimostrato di aver partecipato al mescolamento del mazzo finale.

La dimostrazione della partecipazione è solo l’inizio. I giocatori possono anche verificare la casualità delle carte del mazzo finale. Questo può essere fatto per tutte le carte comuni e per le mani rivelate da altri giocatori (quindi niente mani mucked), ma per comodità di spiegazione vi mostreremo come verificare la correttezza delle prime due carte:

Passo 17

Una volta terminata la mano, i giocatori ricevono (oltre a tutti i semi reali) i sali e i valori delle prime due carte distribuite. Si noti che i valori e i sali delle carte sono stati utilizzati nella funzione Hash del Passo 2:

Hash(Kh salt3) = cc

Passo 18

Ora che Alice e Bob hanno i valori di tutte le variabili della funzione hash, possono invertirla per confermare se la carta Kh era effettivamente la prima carta del mazzo di carte ricevuto al Passo 12. Se la funzione Hash(Kh salt3) è stata indovinata, la carta Kh è la prima.

Se Hash(Kh salt3) dà come risultato cc, il giocatore conferma che l’hash cc del mazzo finale è corretto. Questa operazione può essere eseguita per tutte le carte rivelate sul tavolo.

Nel caso di carte non rivelate o di mani mucked, i giocatori non riceveranno il valore della carta o il sale. Avranno accesso agli hash, ma non potranno usare questo metodo per rivelarli.

Spiegazione dell’esperto e taglia di 1.000.000 CHP per le bug

Sebbene la spiegazione di cui sopra possa essere abbastanza avanzata per il giocatore di poker medio, essa copre solo la punta dell’iceberg per gli appassionati di crittografia. Di seguito sono riportati i link al documento originale del protocollo e al codice open source su GitHub:

Nello spirito della trasparenza, offriamo anche 1.000.000 di CHP a chiunque riesca a dimostrare che il sistema di mescolamento trasparente delle carte è difettoso. Per maggiori dettagli sulle condizioni della taglia e sulle modalità di richiesta, consultate la nostra pagina ufficiale Bug Bounty qui.

Sarah