Baixar
Baixar
Fechar menu -

RSK: A Mineração de Mesclagem de Bitcoin veio para ficar

Published on: 23 Julho, 2019

Por Sergio Demian Lerner, cientista-chefe da RSK

Introdução à Mineração de Bitcoin

Bitcoin Mining (Mineração de Bitcoin) é o processo usado pelo Bitcoin para alcançar a resistência a ataques Sybil, e forma a base para o Consenso de Nakamoto. O processo envolve a solução de desafios computacionalmente difíceis ao selecionar um conjunto válido de transações a serem aplicadas ao razão. Atualmente, a maior parte da mineração de Bitcoin é realizada pelos pools de mineração. Pools de mineração existem para reduzir a variação de pagamento para mineradores, mas também para reduzir os custos de manutenção e os requisitos de largura de banda. Eles seguem a arquitetura cliente-servidor na qual os mineradores ou “trabalhadores” (os clientes) se conectam ao servidor de pools (o servidor). O servidor de pools executa um dos softwares do servidor do pool de mineração. Alguns softwares comuns são Ckpool, Btcpool e Eloipool.

O servidor de pools geralmente se comunica com uma instância de bitcoind por meio de um canal RPC sobre TCP/IP não criptografado. O canal é usado para obter informações sobre a melhor ramificação atual e o hash de bloco pai para o bloco a ser minerado. Além disso, o servidor de pools obtém um conjunto válido de transações pré-selecionadas. Isso é executado usando o comando do servidor bitcoind RPC getblocktemplate. O servidor de pools escolherá um subconjunto dessas transações para incluí-las no novo bloco. Além disso, o servidor de pools geralmente pesquisa bitcoind a cada poucos segundos para detectar alterações no bloco pai. Para reduzir o atraso na detecção de novos blocos, algumas implementações de servidor de pools conectam-se ao bitcoind sobre o protocolo p2p ou usam a opção de linha de comando bitcoind blocknotify para serem notificadas assim que possível quando um bloco chegar. O servidor de pools pode fazer uso de uma ou mais conexões p2p padrão para a rede Bitcoin para enviar os blocos recém-criados, e pode se comunicar com backbones de transferência de blocos rápidos como FALCON ou FIBRE.

Mineração de mesclagem

A mineração de mesclagem é uma técnica para usar o mesmo hashrate de mineração que protege um blockchain primário para proteger um blockchain secundário. O Namecoin foi a primeira criptomoeda a mesclar com o Bitcoin. A mineração de mesclagem é executada incorporando-se o id de bloco do blockchain secundário (um hash criptográfico do novo bloco construído recentemente) em algum lugar no bloco do blockchain primário que está sendo extraído. Esse hash secundário, prefixado por algum texto descritivo curto ou bytes mágicos, é chamado de “tag” de mineração de mesclagem. O prefixo permite que o blockchain secundário localize a tag. No entanto, não deve haver ambiguidade sobre onde a tag está localizada: um bloco do blockchain primário deve ser associado a nenhum ou no máximo um bloco de um blockchain secundário.  Embora o uso de hashing criptográfico para a vinculação evite trapaças, os requisitos de segurança de vinculação são muito inferiores aos exigidos na criptografia tradicional. Informalmente, o único requisito de segurança para mineração de mesclagem é que deve ser mais difícil criar um bloco do blockchain primário que possa ser associado a dois blocos da mesmo blockchain secundário do que minerar dois blocos do blockchain primário diferentes, um para cada associação, na dificuldade do blockchain secundário. Para a RSK, o blockchain primário é, claro, o Bitcoin, e o secundário é o RSK. A dificuldade do bloco RSK atualmente se compara à segurança de 70 bits, enquanto a dificuldade do Bitcoin se compara a 74 bits. 

Proxy de Prova de Trabalho 

Na mineração de mesclagem, um cabeçalho Bitcoin serve apenas como um proxy de prova de trabalho. O RSK Blockchain deve interpretar o PoW de um cabeçalho de bloco Bitcoin e procurar no bloco Bitcoin pela tag que estabelece unicamente a relação com um cabeçalho de bloco RSK. Portanto, ele traduz de forma transitória a PoW de bloco Bitcoin para uma PoW de bloco RSK. Como mencionado anteriormente, a dificuldade para o RSK Blockchain é menor do que a dificuldade para o blockchain Bitcoin, assim, muitos cabeçalhos de bloco Bitcoin que não resolvem o desafio PoW do Bitcoin serão soluções válidas para o desafio PoW da RSK. Vamos nos aprofundar nessa distinção. Cada blockchain calcula uma dificuldade esperada para cada bloco. Essa dificuldade é definida por todos os blocos anteriores, a fim de manter o tempo médio entre os blocos aproximadamente constante. Internamente, a dificuldade se traduz em um “target”, que é inversamente proporcional à dificuldade. O destino é um inteiro não assinado de 256 bits.

Alvos aproximados para blockchain minerada por mesclagem, no mesmo dia. O RSK tem um alvo maior porque os blocos são 20 vezes mais frequentes

Devido à imprevisibilidade do hash criptográfico, um ID de cabeçalho de bloco, que é um conteúdo hash criptográfico do conteúdo do cabeçalho do bloco, é considerado uma variável aleatoriamente uniforme. Embora isso possa não ser teoricamente verdadeiro, ele funciona na prática, pois não há métodos práticos conhecidos para reverter as funções hash usadas no Bitcoin (double SHA256) ou no RSK (Keccak). Esse hash digest, quando interpretado como um número não assinado, deve ser menor que o destino, pois o bloco representa uma solução para o desafio PoW. Portanto, quanto menor o alvo, mais difícil é resolver o desafio PoW.  

Provas SPV

O blockchain secundário não requer o bloco Bitcoin completo para validar o PoW do cabeçalho Bitcoin e associá-lo ao cabeçalho RSK. Essa associação pode ser comprovada por uma prova SPV (que compreende principalmente uma prova de filiação à árvore Merkle). O diagrama a seguir descreve a relação entre as diferentes partes da prova. As caixas azuis representam as informações contidas na prova SPV e precisam ser transmitidas ao longo do bloco RSK.

Uma prova SPV de Bitcoins possibilita a compactação de provas PoW mineradas por mesclagem

Hierarquia do alvo

Em geral, o alvo RSK será maior do que o alvo Bitcoin, porque os blocos RSK são mais frequentes do que os blocos Bitcoin, então o desafio RSK é menos difícil de resolver. Assim, um cabeçalho de bloco Bitcoin que resolve o desafio PoW da RSK pode não ser aceito pela rede Bitcoin. Note que ambos os desafios envolvem trabalhar com cabeçalhos de Bitcoin, e realmente resolvê-los envolve o mesmo processo de tentativa e erro. Então, como o pool pode detectar e informar sobre os desafios RSK mais frequentemente resolvidos, enquanto os mineradores estão tentando resolver o problema mais difícil do Bitcoin? A resposta é que os mineradores já estão procurando resolver blocos com uma dificuldade muito menor da requerida para Bitcoin. Esses blocos intermediários são chamados de “compartilhamentos”, e são exigidos pelo servidor de pools para contabilidade. De fato, é o software do servidor de pools o que irá comandar os mineradores para tentar resolver os desafios muito mais simples (especificando um alvo muito mais elevado). Você pode pensar que os compartilhamentos são um tipo de solução intermediária que ajuda a resolver o verdadeiro desafio do Bitcoin, mas não são. Compartilhamentos não podem ser estendidos para alcançar uma solução de bloqueio real. No entanto, quanto mais poderoso for um minerador, mais compartilhamentos ele criará para o pool entre soluções reais. Portanto, os compartilhamentos fornecem maior granularidade para as contribuições das mineradoras contábeis. Os compartilhamentos são transmitidos ao servidor de pools regularmente para que o servidor possa dividir lucros futuros entre todos os clientes envolvidos, ponderando suas contribuições de hashing. Mas os compartilhamentos também são transmitidos porque um deles pode ser (por acaso) uma solução para o atual desafio Bitcoin PoW. Assim, os mineradores não precisam receber a dificuldade (ou alvo) real do desafio PoW do Bitcoin a partir do servidor de pools, e normalmente não sabem se resolveram um bloco de Bitcoin até que isso seja comunicado pelo pool. O servidor de pools verifica cada compartilhamento recebido, reconstrói o cabeçalho do bloco e, se o hash do cabeçalho SHA256 for numericamente menor do que o alvo associado à dificuldade atual do Bitcoin, ele encaminha o bloco para o bitcoind daemon, que o espalha pela rede. Como cada blockchain secundário pode ter uma dificuldade diferente, um servidor de pools capaz de mesclagem extraída precisa fazer essa verificação para cada blockchain secundário manipulado. Se o cabeçalho Bitcoin representar uma solução válida para o desafio PoW do blockchain RSK, ele envia o cabeçalho do bloco bitcoin para rskj, que anexará o bloco RSK associado e o encaminhará como válido para a rede RSK. 

Observe que, para RSK, o servidor de pools tem a opção de transmitir ao rskj apenas um comprovante SPV da tag incorporada no bloco Bitcoin (mais sobre isso posteriormente), para reduzir os requisitos de largura de banda. 

A tabela a seguir mostra as dificuldades aproximadas (em termos de número médio de nonces iterados para encontrar uma solução de desafios, a partir de junho de 2019) da Bitcoin, RSK e compartilhamentos:

Incorporação da Tag RSK

A tag RSK consiste no identificador ASCII “RSKBLOCK:” concatenado com um fragmento de dados binários que inclui o resumo de hash do cabeçalho do bloco RSK sendo extraído. Como dito anteriormente, a tag deve ser identificada sem ambiguidade (não deve haver uma maneira de criar um bloco Bitcoin que possa ser associado a dois blocos RSK diferentes). Embora o Namecoin tenha definido um esquema para empacotar tags para diferentes blockchains minerados por mesclagem, o esquema proposto nunca foi padronizado. Portanto, a fim de melhorar a compatibilidade futura e permitir maior versatilidade para softwares de minerpool, a tag RSK pode estar localizada em qualquer lugar na transação de geração (a primeira transação de um bloco, às vezes chamada de coinbase). A tag RSK pode estar localizada no campo coinbase da transação de geração ou em qualquer uma das saídas da transação de geração (geralmente como uma carga útil OP_RETURN). Os diagramas a seguir mostram as duas possibilidades.

A Tag RSK armazenada no campo Coinbase

A Tag RSK armazenada em uma saída da transação de geração

O formato atual da Tag RSK

O formato atual da Tag RSK é: RSKBLOCK:RskBlockHeaderHash

“RSKBLOCK:” é a string ASCII que consiste nos bytes: 52 53 4b 42 4c 4f 43 4b 3a.

RskBlockHeaderHash é o hash digest do Keccak do cabeçalho do bloco RSK em formato binário, sem os campos de mineração de mesclagem, que são preenchidos depois que o PoW é resolvido.

Quando a tag RSK é incluída em um script de saída, ela deve ser incluída após os opcodes OP_RETURN OP_PUSHDATA1, para evitar spam no Bitcoin UTXO, mas isso não é obrigatório por consenso.

As seguintes restrições adicionais se aplicam:

  • O número de bytes imediatamente após o RskBlockHeaderHash, até o final da transação coinbase, deve ser menor ou igual a 128 bytes.
  • Os bytes brutos à direita não devem conter a string binária “RSKBLOCK:” (52 53 4b 42 4c 4f 43 4b 3a)
  • Se a tag RSK estiver localizada em um script de saída não último, existe uma probabilidade insignificante de a tag RSK aparecer por acaso nos bytes da saída a seguir. O software do servidor de pools não deve descartar a possibilidade de um endereço Bitcoin desonesto incluído na transação de geração ter a tag incorporada e ser usado como um ataque para quebrar a validade do cabeçalho mesclado. Isso pode ser um problema para pools descentralizados (como p2pool), que distribui as receitas na própria transação de geração. Portanto, recomendamos usar o último script de saída para a tag RSK. 
  • Se a tag RSK estiver localizada no campo da base de moeda, existe uma probabilidade insignificante de o “RSKBLOCK:” aparecer por acaso no campo de dados ExtraNonce2 cujo conteúdo é fornecido pelo minerador que resolve o bloco, como parte do protocolo Stratum. Além disso, o minerador poderia incluir a tag no ExtraNonce2 maliciosamente. Isso não é um problema, desde que o servidor de pools adicione a tag RSKBLOCK: após o bloco ExtraNonce2.

Uma saída P2SH padrão consome 34 bytes, portanto, a limitação do comprimento da trilha (o número máximo de bytes após a tag) geralmente significa que a tag deve estar localizada no campo da base de moeda ou nas últimas 4 saídas da transação de base. 

A restrição de bytes à direita permite que o nó completo da RSK crie uma prova de SPV compactada que consiste em:

  • Cabeçalho do Bitcoin (80 bytes)
  • Um ramo Merkle para a transação Coinbase (aproximadamente 320 bytes)
  • Um estado intermediário de SHA-256 consumindo o cabeçalho da transação coinbase (32 bytes)
  • Um pedaço alinhado de 64 bytes contendo um rastro da transação com base em moeda, incluindo a tag RSK (máximo de 169 bytes). O uso de uma trilha permite que o protocolo use uma prova de que a trilha pertence à transação da base de moeda como um hash de início livre começando com o estado médio dado.
  • Atualmente, o tamanho máximo de uma prova de mineração de mesclagem SPV é de 780 bytes.

O software do servidor de pools pode enviar para o rskj daemon o bloco completo ou essa prova SPV. Se o rskj receber um bloco, ele irá analisá-lo e extrair os campos necessários para construir a prova SPV.

O RskBlockHeaderHash é criado pelo nó RSK padrão (rskj daemon).  O Rskj expõe uma interface RPC-JSON de mineração contendo o comando “getwork”. Um plug-in de servidor de pools pesquisa o daemon rskj e mantém o valor RskBlockHeaderHash mais recente para fornecer ao servidor de pools. Se um hash de compartilhamento for baixo o suficiente para que o desafio PoW da RSK seja resolvido, o servidor de pools informará o plug-in, que por sua vez informará ao daemon rskj. 

Melhorias no Merge-Mining na próxima atualização de rede (a.k.a Armadillo)

A próxima versão 1.0.0 apresenta uma atualização de rede que melhora o formato da tag de mineração de mesclagem. O novo formato é especificado por  RSKIP110 .  A alteração adiciona informações adicionais às tags de mineração de mesclagem da RSK para que os usuários ou sistemas automatizados possam tomar decisões informadas sobre a integridade da rede. Usando ferramentas de monitoramento de tags, os nós da rede RSK também podem responder autonomamente a situações anormais de uma maneira que proteja nós de gastos duplos, e também nos nós futuros poderia transmitir provas criptográficas sucintas de estado anômalo para outros nós da rede.  

O hash de cabeçalho de bloco de 32 bytes é substituído por uma matriz de bytes de 32 bytes com o seguinte formato:

  • Prefixo de 20 bytes do hash-para-mineração de mesclagem (PREFIX)
  • Compromisso-de 7 bytes para-o Vetor Pai (CPV)
  • Número de tios de 1 byte nos últimos 32 blocos (NU), limitado por 255.
  • Número de Bloco de 4 Bytes (BN)

Os quatro campos devem ser verificados em consenso. Em suma, os campos CPV, NU e BN permitem que qualquer nó monitorando o blockchain de Bitcoin crie um gráfico das cadeias concorrentes paralelas de blocos RSK sendo construídas, mesmo que não sejam transmitidas para a rede RSK.  O hash do cabeçalho RSK é truncado para 20 bytes, de modo que a tag ainda ocupa 32 bytes, mantendo, portanto, a compatibilidade com os softwares do servidor de pools.

Segurança da mineração de mesclagem da RSK

A teoria do consenso de Nakamoto usando prova de trabalho é baseada na segurança termodinâmica e teórica dos jogos, não na segurança criptográfica. A mineração de mesclagem da RSK é protegida contra qualquer invasor irracional que possa calcular operações de hash de 2^80 em menos de 30 segundos. Um atacante racional preferiria se comportar de forma honesta e fundir-se com um bloco RSK exigindo apenas cerca de 2 a 69 operações (a dificuldade atual e um bloco RSK) e ser totalmente subsidiado pelo Bitcoin, em vez de continuar com outros ataques. Deixando de lado a possibilidade remota da capacidade de composição desse ataque com outros sistemas explorados, um invasor irracional que tenta executar operações de hashing 2^80 teria de investir 2000 vezes mais hardware do que o minerador racional, e seu consumo de eletricidade não seria subsidiado. O investimento seria de cerca de cinco trilhões de dólares (5e12), assumindo que ele usa hardware similar às ASICs (Application Specific Integrated Circuits) de Bitcoin de última geração. Mas as coisas são ainda piores para o invasor irracional, já que ele só pode produzir um ou mais blocos que compartilham a prova de trabalho para a mesma altura do bloco RSK, e veremos mais tarde que isso geralmente não proporciona nenhum ganho monetário ao invasor (1). Portanto, são cinco trilhões de dólares desperdiçados. Assim, a segurança de 80 bits é bem equilibrada em todos os componentes, e não há nenhum componente com segurança substancialmente mais fraca que possa ser alvo de ataques. Para justificar isso, analisaremos, de maneira breve e informal, possíveis alvos de ataque. 

Primeiro, a RSK compacta a transação de geração com um truque criptográfico não padrão. Em vez de fornecer a transação de geração completa, ela transmite apenas a cauda. Para ainda ser capaz de produzir o hash criptográfico correto dessa mensagem, ele começa a partir de um estado intermediário da construção de Merkle-Damgård, em vez do estado inicial. Esse midstate de 64 bytes é transmitido ao longo da cauda. O uso seguro desse truque requer a suposição de uma propriedade mais forte do SHA256, conhecida como resistência a “colisão freestart”, e precisamos que ela seja pelo menos tão segura quanto os 80 bits de força bruta, que é nosso limite de segurança de destino. SHA-1 (uma função hash já quebrada) tem um ataque de início livre mais conhecido que requer força bruta de cerca de 80 bits. Nenhuma colisão frestart foi encontrada em SHA256, e os melhores resultados (2) correspondem a colisões semiautomáticas em uma versão reduzida rodada de SHA256 (38 das 64 rodadas, a um custo de 2^65 operações). Assim, podemos concluir que a mineração de mesclagem da RSK é segura. Deve ser observado que um suposto ataque de início livre em SHA256 exigindo 2^80 operações seria devastador para SHA256 e o tornaria inútil como uma função hash padrão segura, e a Bitcoin estaria em apuros de qualquer forma. Mas, se tal ataque for descoberto, a plataforma RSK poderia ser facilmente protegida por um upgrade de rede para não usar este truque criptográfico para compactação SPV, às custas de um pequeno aumento no tamanho do bloco.  No entanto, como dissemos antes, mesmo que o ataque custasse menos do que a mineração de mesclagem em termos de segurança de bits, não seria rentável.

Segundo, com relação ao truncamento do hash digest na próxima versão 1.0.0, o novo esquema fornece o equivalente à segurança de 80 bits para colisões de tags. No entanto, o ataque é teórica, econômica e computacionalmente irracional. Do ponto de vista da complexidade computacional, um ataque de colisão de 80 bits exigiria o uso de uma quantidade irreal de memória (3). Além disso, o custo de CPU do ataque de colisão é mais de 2000 vezes maior do que o custo de resolver o desafio PoW da RSK (69 vs 80 bits). 

Do ponto de vista teórico e devido ao consenso DECOR + usado no RSK, como a colisão só pode ocorrer na mesma altura do bloco RSK, os blocos em colisão compartilham a recompensa do bloco, então não há benefício em encontrar novos irmãos de blocos anteriores se a recompensa do bloco anterior for aproximadamente igual à recompensa de um novo bloco. O atacante estaria competindo principalmente com ele mesmo. Pela mesma razão, não há nenhum benefício em encontrar colisões para novos blocos, com a dificuldade adicional de que ele seja executado em 30 segundos em média, em vez de 5 minutos disponíveis para tios de referência.

Do ponto de vista econômico, uma mineração de mesclagem honesta recebe as taxas de transação do Bitcoin, então a mineração de mesclagem é subsidiada pela Bitcoin, enquanto o atacante tem que pagar o custo total do ataque de colisão. Isso faz com que quase qualquer ataque à ligação PoW não seja econômico. Isso é válido para ambas as colisões de hash digest no hash do bloco RSK e as colisões de início livre no hash da transação coinbase. 

Portanto, achamos que a tag está segura para os próximos 20 anos, mesmo considerando um avanço na eficiência da computação. No entanto, se as tendências de computação mudarem radicalmente, uma atualização de rede futura poderá expandir facilmente o tamanho do hash para os 32 bytes completos. 

Plug de Mineração de Mesclagem da RSK em Desenvolvimento

A figura a seguir mostra uma arquitetura padrão do servidor de pools, incluindo um plug-in de mineração de mesclagem da RSK:

Servidor de pools com o plug-in de mineração de dados RSK conectado às diferentes redes

O plug-in servidor de pools RSK se comunica com o daemon rskj usando dois métodos  mnr_getwork e mnr_submitBitcoinBlock.  Outros métodos de envio permitem enviar menos informações para o nó rskj, para reduzir o consumo de largura de banda. A porta de conexão JSON-RPC do daemon rskj pode ser configurada, e o valor padrão é 4242. Uma descrição dos métodos e do formato de troca de dados pode ser encontrada aqui: https://github.com/rsksmart/rskj/wiki/JSON-RPC-API. Esses métodos são implementados junto com muitos outros que pertencem à interface Web3, que é a interface padrão para se conectar ao nó rskj. 

A equipe RSK desenvolveu vários plugins totalmente funcionais para várias implementações de pool, como CoiniumServ, Ckpool, Btcpool e Eloipool. Outros pools implementaram seus próprios plug-ins. Recomendamos o Ckpool sobre outros softwares de pool de mineração conforme ele é otimizado e verificamos extensivamente que a mineração de mesclagem não afeta o desempenho da mineração de Bitcoin. 

Em breve, abriremos nosso guia para o desenvolvimento de plug-ins de mineração de mesclagem com dicas adicionais para ajudar os grupos a criar módulos de mineração de mesclagem eficientes e confiáveis.

É importante observar que, como o RSK usa o protocolo DECOR +, o software do servidor de pools pode continuar processando todas as soluções PoW da RSK encontradas pelos clientes do pool, mesmo que o bloco pai da RSK tenha sido alterado. Todos os blocos concorrentes (chamados tios) são recompensados.

Resumo

Entre 40% e 51% dos mineradores de Bitcoin estão atualmente explorando a RSK, que faz da RSK a plataforma de contrato inteligente mais segura do planeta, em segurança “termodinâmica” (4). A mineração de mesclagem da RSK é fácil, mas deve-se tomar cuidado para não alterar o funcionamento normal do software do servidor de pools, mesmo sob as condições mais adversas, como ataques diretos à rede RSK. A RSK Labs desenvolveu vários plug-ins que foram amplamente testados em relação a várias condições de falha, para verificar a continuidade da operação de mineração. Além disso, medidas de eficiência foram realizadas em softwares de pool de mineração para atestar que a eficiência do software de mineração não seja alterada. Incentivamos os mineradores em pool e solo a unir-se à RSK e participar da revolução do contrato inteligente Bitcoin. Se você precisar de ajuda para configurar sua operação de mineração de mesclagem, encontre-nos no fórum da comunidade RSK gitter.


(1) Outro ataque interessante seria usar colisões de tags para criar blocos para várias cadeias concorrentes em paralelo, todos com a mesma dificuldade acumulada, e alimentar um ao outro mineiro com uma “melhor cadeia” diferente para evitar que eles trabalhem na mesma melhor cadeia. Requer conexões diretas ponto a ponto com os outros mineradores. Poderia funcionar se o atacante tivesse menos poder de hashing do que os mineradores restantes juntos, mas muito mais poder de hashing do que os mineradores restantes separados. Ainda assim, esse ataque seria muito mais caro do que apenas executar um ataque de 51% para ignorar os bloqueios de outros mineradores.

(2) https://eprint.iacr.org/2015/350.pdf

(3) A memória RAM requerida por um simples ataque de colisão é de 2^80 hash digests (32 milhões de exabytes). Usando o algoritmo Oorschot/Wiener, e supondo que um único processador possa executar operações hash sequenciais de 2^40 em menos de 30 segundos, o requisito de memória RAM pode ser reduzido para 32 terabytes.

(4) Uma vez confirmada a transação em um bloco, ela não pode ser revertida sem que alguém gasta uma quantidade mínima de energia para reescrever a cadeia. Essa energia é conhecida como a segurança “termodinâmica” de um blockchain baseado em PoW.