Retenção de blocos: o ataque que um pool não consegue ver em um único share
Um minerador envia shares reais e esconde o que teria sido um bloco. Veja quanto isso custa, quem paga e como é detectado.
O que é o ataque
Cada share que você envia a um pool é uma solução real que não atingiu o alvo do bloco. De vez em quando, uma solução também fica abaixo do alvo do bloco, e esse share é um bloco inteiro. Ele parece igual a qualquer outro share até o momento em que o pool o verifica.
Um ataque de retenção de blocos é um minerador que faz o trabalho honestamente, envia todos os shares comuns e descarta discretamente aquele que teria sido um bloco. O pool conta os shares e paga por eles. O bloco que ele deveria ter recebido nunca chega.
Por que um share nunca entrega o ataque
É isso que torna o ataque interessante em vez de apenas mal-educado. Nada no atacante parece errado em nenhum share individual. O hardware é real, o hashrate é real, os shares são válidos e chegam no ritmo certo. O pool não consegue examinar um share e ver absolutamente nada.
O que falta é uma ausência, e uma ausência só fica visível com o tempo. Um minerador com uma certa parte do hashrate do pool deveria encontrar mais ou menos essa mesma parte dos blocos. Em uma hora, isso não diz nada, porque encontrar blocos é um processo aleatório e períodos sem blocos são normais. Em uma janela longa o bastante, isso diz muita coisa.
Quanto custa, e quem realmente paga
O pool perde a recompensa de bloco que deveria ter recebido. Mas o pool não é realmente onde a perda cai, e esta é a parte que vale entender se você minera em qualquer pool.
Em um esquema proporcional, a rodada simplesmente continua até que outra pessoa encontre um bloco. Todos na rodada contribuíram com trabalho para uma rodada que durou mais do que deveria, então todos ganham um pouco menos por unidade de trabalho. O custo é distribuído entre os mineradores honestos.
Em um esquema de pagamento por share é pior para o operador, porque o pool já pagou cada share do próprio bolso e depende de que os blocos cheguem. Um ataque prolongado contra um pool de pagamento por share é uma perda direta para o operador, e historicamente esse é o caso que mais preocupou as pessoas.
Por que alguém faria isso
O atacante também joga fora a recompensa de bloco, então à primeira vista é puro prejuízo próprio. Só faz sentido se o atacante ganhar em algum lugar que o pool não consegue ver.
O motivo comum é a concorrência. Um operador que roda o próprio pool pode alugar ou apontar hashrate para um rival, suprimir os resultados dele e fazer o próprio pool parecer mais sortudo em comparação. O atacante paga pela sabotagem com os shares que ainda recebe.
Existe uma variante mais sutil em que o atacante guarda o bloco em vez de descartá-lo, continua minerando em cima dele de forma privada e o envia depois, em um momento que lhe convém. É mais difícil de executar e exige uma grande parte do hashrate para valer a tentativa.
Como ele é detectado na prática
A detecção é estatística, e precisa ser, porque não existe outro sinal disponível. A medida é simples de enunciar: comparar os blocos que um contribuidor encontrou com os blocos que a contagem de shares dele diz que ele deveria ter encontrado, em uma janela longa o bastante para a sorte se equilibrar.
A janela é a parte difícil. Se ela for curta, um azar comum parece um ataque, o que significaria acusar mineradores honestos o tempo todo. Se for longa, um atacante real opera por um tempo antes que os números falem. Não existe um jeito esperto de contornar essa troca; é uma propriedade da aleatoriedade, não do software.
É por isso que um detector sério levanta a questão para um humano em vez de agir sozinho. Um banimento automático guiado por uma estatística vai acabar banindo alguém que só teve azar, e tirar do ar um minerador legítimo é um resultado pior do que o próprio ataque.
O que isso significa se você é um minerador honesto
Quase nada, e é por isso que vale dizer isso com clareza.
Seus shares são contados e pagos da mesma forma de qualquer jeito. Ter azar não é uma infração e não pode ser, porque em qualquer janela curta a maioria dos mineradores tem azar. Uma sequência de rodadas em que você contribuiu muito e o pool não encontrou nada é variância normal, e o número de sorte nas estatísticas do pool existe justamente para você ver o quão normal isso é.
A única coisa que vale saber é que esse é um motivo para os pools se importarem com quem aponta hashrate para eles, e um motivo para um pool que publica seus blocos e sua sorte com honestidade ser mais fácil de confiar do que um que não publica. Tudo o que é preciso para verificar o pool está na página Blocos.