Bitcoin como gerador de números aleatórios
Introdução
Este artigo tem o objetivo de demonstrar que é possível utilizar a blockchain do Bitcoin para extrair números aleatórios. Entre as diversas características da blockchain, a que interessa para este estudo é o hash do bloco. O hash do bloco é uma identificação única que serve para validar a integridade do bloco e também da blockchain.
O hash do bloco possui um grau de incerteza devido ao processo de mineração. Um minerador, mesmo sabendo quais são as transações que irá processar, não tem como saber qual será o hash do bloco sem executar efetivamente o processo de mineração e encontrar o bloco antes de outro minerador. A incerteza gerada por esse processo pode ser aproveitada para extrair números aleatórios confiáveis.
O jogo de dados e o hash
Na estatística é comum usar como exemplo para demonstrar a incerteza e probabilidade de eventos o dado de 6 faces. Quando consideramos um dado honesto, a probabilidade de cair qualquer um dos seis números é 1/6 ou 16,66%. Não importa quantas vezes o dado será jogado, as probabilidades não serão alteradas, e quanto mais vezes o dado for jogado, mais próximo da probabilidade teórica será a distribuição dos resultados.
O hash do bloco do Bitcoin é formado por 64 caracteres hexadecimais, sendo que os caracteres da esquerda sempre iniciam com o caractere 0. A quantidade de zeros à esquerda está relacionada à dificuldade de mineração, sendo que quanto zeros à esquerda mais difícil é encontrar o hash candidato. Considerando essa característica, a estratégia para extração de um número aleatório é utilizar-se dos caracteres da direita para a esquerda.
Veja o exemplo de hash abaixo :
0000000000000000000c45084fbca14ecda1b8d24da770741ebcf2ea21a0f783
A pergunta que queremos responder é: qual a probabilidade de que o último caractere do hash dos próximos blocos seja o 3. Fazendo uma analogia ao exemplo do dado honesto, temos uma probabilidade de 1/16 ou aproximadamente 6,25% de chances para que o último caractere do próximo bloco seja “3”. Essa é a probabilidade teórica que buscamos e será abordada a seguir.
Analisando hashes
Para responder a pergunta anterior, foram extraídos 650.001 hashes da blockchain do bitcoin, iniciando do bloco 0 até o bloco 650.000. Em seguida, essa extração foi transformada em colunas onde foram calculadas as populações de cada um dos 16 caracteres possíveis.
Com isso foi gerado um grafico do tipo histograma que é apresentado abaixo:
Como ocorre com o jogo de dados, os hashes gerados pelo processo de mineração tendem a se aproximar da distribuição teórica, o que nos dá a confiança necessária para usa-los como ferramenta de sorteio de números aleatórios.
Sobre
Sei que o artigo não ficou completo. Ocorre que iniciei os estudos e juntei bastante informação e códigos mas acabei por questões pessoais não concluindo. Porém, espero que ele sirva de insigt para outros membros usarem.