Download
Sarah Dez 16, 2018

Guia Avançado Para o Baralhar de Cartas Transparente na CoinPoker

Até agora, as salas de póquer online têm mantido o segredo sobre o software de baralhar de cartas utilizado. Os jogadores não eram capazes de verificar estes sistemas fechados de baralhar de cartas de forma confiável, e isso é algo que o Baralhar Transparente de Cartas da CoinPoker veio mudar. A utilização de funções hash Guia Avançado Para o Baralhar de Cartas Transparente na CoinPoker

Uncategorized

Até agora, as salas de póquer online têm mantido o segredo sobre o software de baralhar de cartas utilizado. Os jogadores não eram capazes de verificar estes sistemas fechados de baralhar de cartas de forma confiável, e isso é algo que o Baralhar Transparente de Cartas da CoinPoker veio mudar.

A utilização de funções hash criptográficas de uma via permitiu à CoinPoker desenvolver um novo sistema de baralhar de cartas que fornece informações seguras sobre o processo do baralhar de cartas. E dá-lhe as seguintes vantagens:

  • Verificar as cartas que não foram dadas com o Hand Hindsight
  • Verificar as suas próprias contribuições para o baralhar com a Ferramenta de Validação RNG
  • Ganhar transparência sobre o funcionamento do nosso RNG

Antes de entrar na tecnologia por trás do baralhar transparente de cartas, verifique o nosso breve tutorial que o ajudará a testar estas funcionalidades por si!

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

Se o nosso sistema transparente de baralhar de cartas é totalmente novo para is, então sugerimos que comece com o nosso guia básico aqui.

Passo 1: De forma a provar a justiça de cada mão, precisará de aceder às funções hash de uma via que mencionámos atrás. Encontrará estas funções ao clicar no botão do RNG Shuffle Order dentro do separador de Histórico de Mãos.

Passo 2: Aqui encontrará uma longa lista de sequências de hash. A primeira secção é para cada carta ordenada do baralho inicial, seguindo-se as seeds encriptadas de cada jogador da CoinPoker, e por fim as hashes de cada carta no final da ordenação do baralho.

Pense nestes números listados por baixo de shufffled hashed deck como a sua posição no baralho, e em que cada hash de jogador tem o seu próprio “fator de agitação” que é submetido no início da mão.

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

Passo 7: O próximo passo é validar a mão que obteve, o que pode significar uma de duas coisas, dependendo do que pretende fazer:

  1. Verificar a justiça do jogo dado, provando a sua participação no “baralhar” das cartas
  2. Verificar se a posição de uma carta no baralho final está de acordo com a posição encriptada que lhe é única e que foi determinada antes do baralhar

Para a opção 1:

Introduza as seeds encriptadas, ou “fatores de agitação”, como lhes chamamos, na Ferramenta de Validação. Estes estão marcados com as setas azuis. Os outputs serão “fator coletivo de agitação”, ou hash combinada, e a ordem final do baralho.

Se elas fizerem match, então verificou com sucesso a sua participação no baralhar!

Para a opção 2:

Escolha uma das cartas dadas (elas terão tanto um hash à esquerda, como uma função has encriptada à direita. Introduza o hash dentro da função à direita da secção de Validação de Cartas. O output deve ser a hash listada à esquerda na CoinPoker, assim como o valor de cartas correto.

Passo 8: Divirta-se a explorar as cartas não dadas e a provar a sua participação no primeiro RNG descentralizado de póquer!

A explicação avançada: Como o RNG transparente da CoinPoker funciona

Imagine um baralho de cartas que não foram baralhadas do seguinte modo: 2c, Qd, Kh

Na realidade, haveria uma permutação de 52 cartas, mas para termos uma melhor ideia de como o processo funciona iremos limitar-nos apenas a três. Usando esta ordenação, a CoinPoker irá criar um baralho inicial e irá partilhá-lo com todos os jogadores da mesa nos próximos passos.

Passo 1

A CoinPoker corre o seu RNG usando um valor secreto, a que nos iremos referir como seed. Este valor só existe temporariamente, e só é usado para iniciar o processo.

Passo 2

A CoinPoker usa esta seed aleatória para gerar um Salt Value, ou seja, dados aleatórios que agem como a password ou passphrase para funções criptográficas de uma via. Isto é combinado com uma carta para criar uma hash para cada carta do baralho. A utilização das três cartas mencionadas atrás resulta numa fórmula com o seguinte aspeto:

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

Nota: As hashes aa, bb, e cc são simplificadas para efeitos de representação. Na realidade, estas são strings de 256 bits e que são um pouco difíceis de trabalhar, pelo menos para humanos.

Passo 3

A CoinPoker baralha o baralho com hash associado do Passo 2, utilizando a seed aleatória do Passo 1.

  • Baralho intocado com hashes era: aa (2c), bb (Qd), cc (Kh)
  • Baralho baralhado (inicial) com hashes é agora: bb (Qd), cc (Kh), aa (2c)

Passo 4

A CoinPoker envia este baralho com hash (como um vetor, que inclui todas as cartas com hash na ordem inicial do baralho) para cada jogador.

O propósito de usar as hashes é fazer com que seja possível revelar certas cartas do baralho e permite aos jogadores verificarem-nas, sem expor as outros que devem manter-se escondidas durante o jogo (como no caso das cartas alvo de fold). Agora todos os jogadores têm na sua posse a lista de hashes que revelam a ordem inicial do baralho.

Os próximos mostram como o baralho inicial foi transformado no baralho final, utilizando o input dos jogadores, que combinado com o input da CoinPoker forma um input coletivo (a.k.a. um seed agregado). Novamente, estes têm a designação de seeds.

Passo 5

Agora, com o objetivo de 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 de calcular a hash do seu seed que vão enviar para a CoinPoker. A fórmula terá o seguinte aspeto:

  • Hash(Alice_seed) = XX
  • Hash(Bob_seed)  = YY

Passo 7

A CoinPoker gera uma nova seed, distinta da do Passo 1. Esta seed aleatória é usada para criar uma hash: Hash(CoinPoker_seed) = ZZ

Passo 8

A seed dos jogadores, assim como a seed da CoinPoker, são compiladas numa lista de seeds agregadas: [XX, YY, ZZ]

Passo 9

A CoinPoker envia um vetor das seeds agregadas para a Alice e para o Bob.

Passo 10

Depois de receberem as seeds agregadas, a Alice e o Bob enviam a sua seed real do Passo 5. Esta é a seed que foi usada para criar as hashes. Por isso, Hash(Alice_seed) = XX e Hash(Bob_seed) = YY.

Passo 11 

As seeds reais são então usadas para criar uma seed conjunta. Esta nova seed tem em consideração todas as seeds dos jogadores, assim como a da CoinPoker, resultando num valor que é o resultado da contribuição de todos.

Hash(Alice_seed + Bob_seed + CoinPoker_seed) = seed conjunta

Passo 12

A CoinPoker usa a seed conjunta para baralhar o baralho inicial. A hash do baralho final é distribuída por todos as posições na mesa. Repare que este é o baralho final que é usado até que uma mão esteja completa.

Baralho Inicial: Qd, Kh, 2c →  RNG com seed_conjunta → Baralho Final: Kh, 2c, Qd
              (Hashescc, aa, bb)

Como Funciona a Ferramenta de Verificação RNG

Uma das principais vantagens de usar funções com hash criptográficas é o facto de podermos revelar em segurança a informação associada ao baralhar das cartas, e que pode ser usada mais tarde para provar que o baralhar foi justo. Chamamos a este processo a Ferramenta de Validação RNG. Continuaremos a mostrar-lhe mais passos para que compreenda como funciona.

Note que nem o Bob nem a Alice conhecem as seeds reais um do outro, e só têm acesso à sua seed própria real. Aquilo a que têm acesso é às hashes de seeds de outros jogadores e à CoinPoker (lembre-se dos Passos 8 e 9).

Depois de a mão ter sido jogada, os jogadores receberão as seeds reais de todos os participantes, que poderão usar para verificar a sua participação no baralhar final do baralho, assim como para provar a aleatoriedade da ordenação das cartas.

Passos 13-18: Verificação do Impacto dos Jogadores na Ordenação do Baralho

Passo 13

Em primeiro lugar, os jogadores devem tomar a seed real de cada um e usarem-na para verificar o valor da hash e se ele é correto. Isto é feito ao introduzir a seed real na fórmula da hash, e verificando se o resultado é igual ao valor atual que recebereram.

Assim, quando Hash(Alice_seed) iguala XX então é verificada como correta

Passo 14

Assim que todas as seeds reais dos jogadores e da CoinPoker forem usadas para verificar as hashes, os jogdores também poderão verificar se a seed conjunta está correta, introduzindo os valores em falta na função hash:

Hash(alice_seed + bob_seed + server_seed) = seed_conjunta

Passo 15

Agora que a seed conjunta foi verificada como correta por cada jogador, a Alice ou o Bob podem reverter a função RNG. Ao introduzir a hash e a seed conjunta no baralho final para perceber qual a ordenação original, os jogadores podem verificar se os resultados do baralho inicial é igual à que receberam no Passo 4.

Passo 16

Se o resultado for igual à ordem da hash inicial do baralho, então o jogador provou com sucesso que participou na ordenação do baralho que resultou na sua disposição final como se apresenta no fim.

Provar a participação é apenas o início. Os jogadores também podem verificar a aleatoriedade das cartas no baralho final. Isto pode ser feito para todas as cartas da comunidade e para todas as mãos reveladas por outros jogadores (por isso, não contam as mãos descartadas). Mas para o objetivo de melhor explicar o processo, mostramos-lhe como pode verificar a justiça das duas primeiras cartas:

Passo 17

Assim que a mão estiver terminada, os jogadores recebem (além das sees reais) os valores e salts da primeira e segunda cartas recebidas. Note que o valor e salts das cartas foram usados na função Hash do Passo 2:

Hash(Kh+salt3) = cc

Passo 18

Agora que a Alice e o Bob têm valores para todas as variáveis da função hash, eles podem revertê-los para confirmar se a KH foi realmente a primeira carta no final do baralhar obtido, tal como descrito no Passo 12.

Se a Hash(Kh+salt3) resultar em cc, então o jogador confirma que a hash do baralho final – cc – está correta. Isto pode ser feito para todas as cartas reveladas na mesa.

No caso das cartas que não saíram para a mesa, ou das mãos descartadas por fold, os jogadores não recebem um valor de carta ou salt. Terão acesso aos hashes, mas não poderão usar este método para as revelar.

Explicação especializada e o Bug Bounty de 1,000,000 CHP

Ainda que a explicação que demos em cima seja avançada o suficiente para um jogador médio de póquer, ela só cobre a ponta do icebeberg para os entusiastas da criptografia. Em baixo deixamos links para o documento original do protocolo, assim como o código fonte no GitHub:

No espírito da transparência, estamos a oferecer 1.000.000 CHP para as pessoas que provem que o sistema de baralhar cartas transparente pode ter problemas. Para mais detalhes sobre as condições do bounty e sobre como aceder aos benefícios, consulte a nossa página oficial de Bug Bounty aqui.

Sarah