Register
Sarah Dez 16, 2018

O Guia Avançado do Baralhamento Transparente de Cartas na CoinPoker

Até agora, as salas de poker online têm sido secretas em relação ao seu software de baralhamento de cartas. Os jogadores não têm conseguido verificar se estes sistemas fechados baralham as cartas de uma forma verdadeiramente justa, e isto é algo que o Transparent Card Shuffler da CoinPoker foi criado para mudar. Usando funções de O Guia Avançado do Baralhamento Transparente de Cartas na CoinPoker

Sem categoria

Até agora, as salas de poker online têm sido secretas em relação ao seu software de baralhamento de cartas. Os jogadores não têm conseguido verificar se estes sistemas fechados baralham as cartas de uma forma verdadeiramente justa, e isto é algo que o Transparent Card Shuffler da CoinPoker foi criado para mudar.

Usando funções de hash criptográficas unidireccionais, o novo baralhador de cartas da CoinPoker torna possível revelar com segurança informações sobre o processo de baralhamento e dá-lhe a possibilidade de:

Antes de mergulhar na tecnologia por detrás do baralhamento transparente de cartas, dê uma vista de olhos no nosso breve tutorial para o ajudar a testá-lo por si próprio!

Como utilizar a ferramenta de validação para provar a participação

Se o nosso baralhador de cartas transparente é totalmente novo para si, sugerimos que comece por consultar o nosso guia básico com capturas de ecrã aqui.

Passo 1: Para provar a equidade da mão, é necessário aceder às funções de hash unidireccionais mencionadas anteriormente. Pode encontrá-las clicando no link RNG Shuffle Order na parte inferior do separador Hand History.

Passo 2: Aqui encontrará uma longa lista de sequências de hash. A primeira secção será para cada carta na ordem inicial do baralho, seguida das sementes encriptadas de cada jogador e da CoinPoker e, por último, os hashes de cada carta na ordem final do baralho.

Pense nos números listados sob o baralho baralhado com hash como a sua posição no baralho, e o hash de cada jogador como o seu “fator de agitação” encriptado submetido no início da mão.

Passo 6: Estes dados são inúteis sem a Ferramenta de Validação, à qual pode aceder clicando no link no topo da janela.

Passo7: O passo seguinte é validar a mão, o que pode significar uma de duas coisas, dependendo se o utilizador deseja

  1. Verificar a equidade, provando a sua participação no “shake”
  2. Verificar se a posição real de uma carta no baralho final corresponde à posição encriptada que participou na determinação antes do baralhamento

Para a Opção 1:

Introduza as sementes encriptadas ou “factores de agitação” como lhes chamamos na Ferramenta de Validação. Estes estão marcados pelas setas azuis. Os resultados serão o “fator de agitação coletivo” ou hash combinado, e a ordem final do baralho.

Se eles coincidirem, então verificou com sucesso a sua participação no baralhamento!

Para a Opção 2:

Escolha uma das cartas distribuídas (estas terão um hash à esquerda e a função de hash encriptada à direita. Introduza o hash dentro da função da direita na secção Validação de cartas. O resultado deverá ser o hash listado à esquerda na CoinPoker, bem como o valor correto da carta.

Passo 8: Divirta-se a explorar o undealt card e a provar a sua participação no primeiro sistema RNG descentralizado do poker online!

A Explicação Avançada: Como funciona o RNG Transparente da CoinPoker

Imagine o baralho de cartas não baralhado da seguinte forma: 2c, Qd, Kh

Na realidade, haveria uma permutação de 52 cartas, mas para ter uma ideia de como este processo funciona, vamos limitar o número a três. Usando esta ordem de baralho, CoinPoker criará o baralho inicial e partilhá-lo-á com todos os jogadores na mesa nos seguintes passos.

Passo 1

A CoinPoker executa o seu RNG usando um valor secreto, que designaremos por seed. Este valor existe apenas temporariamente e é simplesmente usado para iniciar o processo.

Passo 2

A CoinPoker utiliza esta semente aleatória para gerar um valor de sal; dados aleatórios que funcionam como uma palavra-passe ou frase-chave para funções criptográficas unidireccionais. Este valor é combinado com uma carta para criar um hash para cada carta do baralho. Usando as três cartas mencionadas anteriormente, a fórmula seria mais ou menos assim:

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

Nota: Os hashes aa, bb e cc são simplificados para fins de representação. Na realidade, são strings de 256 bits e um pouco mais complicadas de trabalhar; pelo menos para os humanos.

Passo 3

A CoinPoker baralha o baralho com hash do Passo 2 usando a semente aleatória do Passo 1.

  • O baralho não baralhado em hashes era: aa (2c), bb (Qd), cc (Kh)
  • O baralho baralhado (baralho inicial) em hashes é agora: bb (Qd), cc (Kh), aa (2c)

Passo 4

A CoinPoker envia este baralho com hash (como um vetor que inclui todos os hashes das cartas na ordem inicial do baralho) a cada jogador.

O objetivo de usar os hashes é tornar possível revelar certas cartas do baralho e permitir que os jogadores as verifiquem, sem expor outras que devem ser mantidas escondidas (i.e. mãos com mucked). Agora todos os jogadores têm em sua posse a lista de hashes que revela a ordem inicial do baralho.

Os próximos passos cobrem a forma como o baralho inicial é transformado no baralho final usando a entrada dos jogadores, que é combinada com a entrada da CoinPoker para formar uma entrada colectiva (também conhecida como semente agregada). Mais uma vez, estas são referidas como sementes.

Passo 5

Mais uma vez, para simplificar a complexidade deste processo, imagine que há dois jogadores na mesa. Chamemos-lhes Alice e Bob.

Passo 6

A Alice e o Bob precisam agora de calcular um hash da sua semente para enviar para a CoinPoker. A fórmula será um pouco parecida com esta:

  • Hash(Alice’s_seed) = XX
  • Hash(Bob’s_seed) = YY

Passo 7

A CoinPoker gera uma nova seed, que não é a do passo 1. Esta semente aleatória é utilizada para criar um hash: Hash(CoinPoker’s_seed) = ZZ

Passo 8

Os hash seeds dos jogadores, assim como os da CoinPoker, são então compilados numa lista de commitment seeds: [XX, YY, ZZ].

Passo 9

O CoinPoker envia um vetor de sementes de compromisso à Alice e ao Bob.

Passo 10

Depois de receber as sementes de compromisso, Alice e Bob enviam a sua semente real do passo 5. Esta é a semente que foi usada para criar os hashes. Assim, Hash(Alice’s_seed) = XX e Hash(Bob’s_seed) = YY.

Passo 11

As sementes reais são então usadas para criar uma semente agregada. Esta nova semente tem em conta todas as sementes dos jogadores, bem como as da CoinPoker, resultando num valor para o qual toda a mesa contribuiu.

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

Passo 12

O CoinPoker usa a semente agregada para baralhar o baralho inicial. O hash para o baralho final é então distribuído por todos os lugares. Note que este é o último baralho usado até que a mão esteja completa.

Baralho Inicial: Qd, Kh, 2c → RNG com aggregated_seed → Baralho final: Kh, 2c, Qd
(Hashes: cc, aa, bb)

Como funciona a ferramenta de verificação de RNG

Uma das principais vantagens da utilização de funções hash criptográficas é o facto de podermos revelar com segurança informação sobre o baralhamento, que pode mais tarde ser utilizada para provar se o baralhamento foi justo. Chamamos a isto a Ferramenta de Validação RNG, e vamos continuar os passos para o ajudar a perceber como funciona.

Note que nem Bob nem Alice conhecem as sementes reais um do outro, e só têm acesso à sua própria semente real. O que eles têm acesso são todos os hashes das sementes dos outros jogadores e da CoinPoker (lembre-se dos passos 8 e 9).

Após a mão ser jogada, os jogadores recebem as sementes reais de todos os participantes, que podem usar para verificar a sua participação no baralho final, bem como a aleatoriedade das cartas.

Passos 13-18: Verificando o impacto do jogador no baralho embaralhado

Passo 13

Primeiro, os jogadores precisam de pegar em cada semente real e usá-la para verificar se o valor hash que têm está correto. Fazem-no introduzindo a semente real na fórmula de hash, verificando se o resultado corresponde ao valor real que receberam.

Se Hash(Alice’s_seed) for realmente igual a XX, então é verificado como correto

Passo 14

Uma vez que todas as sementes reais dos jogadores e da CoinPoker são usadas para verificar os hashes, os jogadores também podem verificar se o aggregated_seed está correto, inserindo os valores em falta numa função hash:

Hash(alice_seed bob_seed server_seed) = aggregated_seed

Passo 15

Agora que a semente agregada foi verificada como correcta por cada jogador, a Alice ou o Bob podem inverter a função RNG. Ao introduzir o hash do baralho final e a semente agregada para calcular o baralho inicial, os jogadores podem verificar se resulta na mesma ordem inicial do baralho que receberam no Passo 4.

Passo 16

Se o resultado corresponder à ordem hash do baralho inicial, então o jogador provou com sucesso que participou no baralhamento do baralho final.

Provar a participação é apenas o começo. Os jogadores também podem verificar a aleatoriedade das cartas no baralho final. Isto pode ser feito para todas as cartas comunitárias e mãos reveladas por outros jogadores (por isso não há mãos Mucked), mas para fins de explicação vamos mostrar-lhe como pode verificar a justiça das duas primeiras cartas:

Passo 17

Quando a mão termina, os jogadores recebem (para além de todas as sementes reais) os sais e os valores das duas primeiras cartas distribuídas. Note que os valores das cartas e os sais foram usados na função Hash do Passo 2:

Hash(Kh salt3) = cc

Passo 18

Agora que Alice e Bob têm valores para todas as variáveis na função hash, eles podem invertê-la para confirmar se o Kh foi realmente a primeira carta no baralho final recebido no Passo 12.

Se Hash(Kh salt3) resultar em cc, então o jogador confirma que o hash cc do baralho final está correto. Isto pode ser feito para qualquer carta revelada na mesa.

No caso de cartas não reveladas ou de mãos com mucked, os jogadores não receberão o valor da carta ou o salt. Eles terão acesso aos hashes, mas não poderão usar este método para os revelar.

Explicação do especialista e a recompensa de 1.000.000 CHP pelo bug

Embora a explicação acima possa ser suficientemente avançada para o jogador de póquer comum, apenas cobriria a ponta do iceberg para os entusiastas da criptografia. Abaixo estão os links para o documento original do protocolo, bem como o código fonte aberto no GitHub:

No espírito da transparência, estamos também a oferecer 1.000.000 CHP a quem conseguir provar que o sistema transparente de baralhar cartas é defeituoso. Para mais detalhes sobre as condições da recompensa e como reclamar, veja a nossa página oficial de Bug Bounty aqui.

Sarah