Mineração alta: a última opção para proteger o blockchain PoW de um "ataque de 51%"

imagem

Os desenvolvedores do fork do Litecoin Cash apresentaram uma pré-impressão do documento técnico ' The Hive: Mineração baseada em agentes no Litecoin Cash ', na qual descreveram sua proposta para proteger o blockchain de criptomoeda com base no algoritmo de prova de trabalho de um "ataque de 51%". Sua solução combina mineração usando dispositivos ASIC antigos (SHA-256) e mineração virtual democrática usando “abelhas trabalhando” (HiveMine). No caso de implementação competente da blockchain, o LCC resolverá um dos maiores problemas dos projetos modernos de blockchain (do Bitcoin ao Ethereum): a ameaça de um ataque quando mais da metade da energia total da rede estiver concentrada nas mãos do invasor.

51% Problema de Ataque


Quem monitora o mercado de criptomoedas não pode deixar de notar o recente surto de 51% de ataques a projetos relativamente pequenos de PoW (prova de trabalho - "prova de trabalho realizada"), quando os invasores reescrevem transações e transferem fundos o mais rápido possível por meio de trocas. “Relativo” neste caso significa que uma pequena fração dos dispositivos que suportam a segurança criptográfica de uma grande blockchain (Bitcoin ou Ethereum, por exemplo) será suficiente para quebrar o consenso de uma pequena blockchain que trabalha no mesmo algoritmo de hash (Bitcoin Cash ou Bitcoin Gold, respectivamente) .

No caso de criptomoedas que tomam o algoritmo SHA-256 (LCC ou BCH) como base para criptografia, o risco é composto pelo fato de que a maior e mais segura criptomoeda do mundo trabalha no mesmo algoritmo - Bitcoin (BTC).

Neste artigo, vamos nos concentrar no modelo matemático de proteção contra ataques de 51% e destacar superficialmente os principais termos e conceitos relacionados usados ​​na criptografia de blockchains.

Introdução à mineração alta


No esquema clássico de segurança de blockchain PoW, os mineradores competem computando um grande número de hashes de bloco em potencial para encontrar um que atenda às condições de complexidade especificadas pelo consenso da rede. Se a complexidade for zero e qualquer hash for aceito pela rede como válido, a prova de trabalho não funcionará e qualquer nó da rede poderá minerar facilmente blocos.

À primeira vista, isso não é ruim: a mineração se tornará democrática e de baixo custo em termos de energia. Mas, na prática, todo mundo extrairá blocos baratos e os empurrará para a rede, o que significa que haverá muitos candidatos para a continuação da cadeia de blocos. Como os mineradores não entenderão mais em qual bloco construir a continuação do blockchain, muitas cadeias órfãs aparecerão. Haverá o caos, que foi observado pelas moedas PoW com um algoritmo inadequado para ajustar a complexidade da mineração.

Se a complexidade for zero e a produção do bloco não sofrerá nenhum custo, ninguém será capaz de determinar quais cadeias candidatas valem mais, o que significa que não haverá prioridade. Os mineiros também poderão trabalhar em várias cadeias sem perder nada.

Esse experimento mental simplesmente demonstra que o principal objetivo do algoritmo de prova de trabalho, prova de participação ou geralmente de qualquer coisa é fornecer à rede uma maneira determinística de determinar o direito de minerar, cunhar ou forjar um bloco, com o qual outros participantes concordarão. . Além disso, outra condição importante para todos os que buscam blocos não é trabalhar em várias cadeias simultaneamente com impunidade. No sistema de prova de aposta, tal abordagem é punida pela privação parcial ou completa de uma aposta.

A mineração alta é uma forma alternativa de luta em bloco quando o direito de produzir um bloco é garantido por um agente que trabalha em nome do usuário. Esses agentes - “abelhas trabalhando” - estão no próprio blockchain. Eles são completamente descentralizados e são criados quando um usuário faz uma transação especial para criar um agente.

Após a criação, as abelhas que trabalham começam a atuar como dispositivos virtuais para mineração (plataforma), e seus proprietários se tornam "apicultores". Quando as abelhas operárias obtêm o bloco com sucesso, a remuneração do bloco (incluindo as comissões incluídas no bloco) é paga ao apicultor. As abelhas que trabalham requerem muito pouca energia e não precisam de equipamentos especializados para a produção de blocos. Além disso, sua vida útil é limitada e a criação de uma abelha é uma ação especulativa com um determinado preço; isso evita tentativas de trabalhar em várias cadeias ao mesmo tempo. O sucesso de uma abelha individual depende unicamente da população de abelhas que vivem em toda a rede. Algumas abelhas nunca encontrarão um bloco, enquanto outras terão uma sorte desproporcional (semelhante à mineração a solo).

imagem

Fig. 1: uma abelha em funcionamento é adicionada à blockchain por meio de uma transação de criação de abelhas (BCT) e blocos de minas durante sua vida útil

Criação de agentes (abelhas trabalhando)


Para criar uma abelha em funcionamento, o usuário envia a transação para um endereço "morto" especial, por exemplo: CReateLitecoinCashWorkerBeeXYs19YQ . Observe que todos usam o mesmo endereço para criar a abelha. Este endereço é analisado como existente e correto, mas ninguém possui uma chave privada; O utilitário vanitygen determina que a busca por uma chave privada usando núcleos de 24 * 2 GHz levará cerca de 1,7 * 10 ^ 31 anos (com 50% de chance de sucesso).

Uma transação que cria uma abelha deve ter pelo menos duas saídas. O primeiro define uma taxa fixa para a criação de uma abelha, que é enviada para um endereço inacessível. Embora o preço da criação de uma abelha seja determinado dinamicamente, supõe-se que seja uma porcentagem da recompensa em bloco. Esse cálculo inclui o custo mínimo, de modo que, no momento em que todas as moedas são extraídas, faz sentido usar alta mineração para receber taxas de transação.

A segunda conclusão tem custo zero, mas especifica o endereço base, que receberá qualquer recompensa pelo bloco encontrado pela abelha no futuro. Você pode chamá-lo de "o futuro endereço do apicultor". Se desejado, o próprio usuário pode esclarecer; por padrão, um novo endereço será gerado toda vez em sua carteira.

Um exemplo:

 "vout": [ { // Bee creation fee "addr": "CReateLitecoinCashWorkerBeeXYs19YQ" "value": 1.0000000 }, { // Address to receive block rewards for any blocks this bee mines "addr": "CTrdm8YDfjmFJwFnKbvNZ9NYznhMqrNgFR" "value": 0.0000000 }, { // Change address for change from creation fee "addr": "Cd6CRuWCu6p4NLR6XG7BKyC8hzvEoYuKbn" "value": 123.5274346 } ] 

As abelhas amadurecem e se tornam capazes de produzir blocos depois que 576 blocos aparecem na blockchain a partir do momento em que as abelhas foram criadas. Este é o número esperado de novos blocos adicionados à blockchain Litecoin Cash em 24 horas. Depois que as abelhas amadurecem, existem 4032 blocos (cerca de 1 semana) e procuram por blocos, depois eles morrem.

A abelha é criada em uma carteira QT. Algo assim se parece com isso:

imagem

Fig. 2: Layout da carteira LCC com abelhas trabalhando

Abelhas no trabalho: pesquisa de bloco


Por exemplo, digamos que a altura da blockchain = 1000, e a rede deve determinar qual abelha é atribuída para encontrar o bloco 1001. O apicultor de Alice agora tem 4 abelhas (criadas entre 576 e 4608).

Quando o bloco 1000 aparece, a carteira de Alice calcula dois valores.

O primeiro é um valor determinístico imprevisível, mas facilmente verificável. Isso é fácil, adicionando hashes de bloco em diferentes profundidades (codificadas) entre, digamos, 0 e 500000 blocos, garantindo que nosso valor aleatório esteja bem enraizado na blockchain:

 string deterministicRandString = blocks[blockHeight].hash + blocks[blockHeight-13].hash + blocks[blockHeight-173].hash + blocks[blockHeight-1363].hash + blocks[blockHeight-27363].hash + blocks[blockHeight-496393].hash; 

Em seguida, a carteira dela calcula o hash alvo da abelha, beeTargetHash . Esse valor é determinado pela média móvel exponencial com uma faixa dinâmica muito alta, que define beeTargetHash para que, para qualquer população de abelhas, seja determinada a frequência dos blocos obtidos durante o processo de mineração. No lado positivo, quanto mais blocos de PoW foram extraídos desde o último bloco de mina alto, mais alto (mais simples) beeTargetHash . O algoritmo é definido da seguinte forma; os valores de maxTarget , emaWindowsSize e emaDesiredSpacing serão determinados durante a simulação.

 beeHashTarget = previousBeeHashTarget (default to highest (easiest) target maxTarget) numPowBlocks = number of pow blocks since the previous hive mined block; emaInterval = emaWindowSize / emaDesiredSpacing; beeHashTarget *= (interval - 1) * emaDesiredSpacing + numPowBlocks + numPowBlocks; beeHashTarget /= (interval + 1) * emaDesiredSpacing; 

deterministicRandString e beeHashTarget podem ser calculados por qualquer nó da rede.

A carteira de Alice agora passa cada uma de suas abelhas vivas através de uma cadeia aleatória determinística, combinando as transações BCT das abelhas e misturando-as para obter um novo hash - o beeHash de uma abelha individual. Portanto, cada abelha gera um hash por bloco. Esse hash é semelhante ao melhor hash gerado por uma plataforma de mineração PoW no mesmo período.

 hash beeHash = sha256(deterministicRandString + bee.creationTransaction.ID); 

Como a carteira de Alice rastreia abelhas, cada uma calculando beeHash , ela mantém um registro dos melhores (mais baixos) hashes descobertos. Se, como resultado, o melhor hash descoberto pela carteira de Alice beeHash < beeTargetHash à condição beeHash < beeTargetHash , Alice terá o direito de adicionar um bloco.

Suponha que Alice tenha uma abelha viva, cujo hash seja menor que o destino e o identificador de transação BCT de uma abelha bem-sucedida seja o seguinte:

 0f6953f0a0816483c71ae3df45650a997e678588a315d72e9ae06e6a3f1c1841. 

Sabendo que a carteira de Alice tem o direito de assinar um bloco, a rede produz um bloco com uma transação especial com duas saídas:

 "vout": [ { // Zero-value output identifies the bee and proves it's really minting for Alice "value": 0, "n": 0, "scriptPubKey": { "asm": "OP_RETURN OP_BEE 0f6953f0a0816483c71ae3df45650a997e678588a315d72e9ae06e6a3f1c1841 IH3Emz49KJeRbw0q4R48pD6GWPQtvHCxLeQOxxH+yv14Tn5KzUFIXBe9Td8EHudejzebMYt/XpusENzNkGM/a4I=" } }, { // Block reward (subsidy + fees) - must pay to bee's correct coinbase address "value": 250.0001125, "n": 1, "scriptPubKey": { "addresses": [ "CTrdm8YDfjmFJwFnKbvNZ9NYznhMqrNgFR" ] } } 

vout[0] é uma saída de valor zero que não pode ser gasta. É usado para identificar a abelha que pegou o bloco e para provar que ela conseguiu para Alice.

vout[1] é a saída que paga a Alice uma recompensa em bloco.

Confirmação de bloqueio


A carteira de Bob, recebendo o bloqueio de Alice, agora deve garantir que ele satisfaça o consenso. Primeiro, ele garante que a transação inclua duas entradas, a primeira delas seja zero, e que o script inicie com OP_RETURN OP_BEE . Ele então recupera o ID da transação de abelha de Alice:

 0f6953f0a0816483c71ae3df45650a997e678588a315d72e9ae06e6a3f1c1841. 

Digressão: como a transação de criação de uma abelha é transferida para um endereço inacessível, a saída de transações não gastas (UTXO) permanece nela. Consequentemente, a carteira de Bob não precisa habilitar a opção de linha de comando txindex (que indexa completamente todas as transações devido a verificação atrasada e aumento do uso de disco) para verificar facilmente as saídas de BCT de Alice. Devido ao uso do UTXO, a carteira QT não precisa de bancos de dados ou modificações para suportar alta mineração. A guia abelhas também se integra dinamicamente.


Ao validar o alto bloco de minas, a carteira de Bob implementa o equivalente a RPC (chamada de procedimento remoto):

 gettxout 0f6953f0a0816483c71ae3df45650a997e678588a315d72e9ae06e6a3f1c1841 0 

Isso fornece a ele a primeira saída do BTC, vout [0] , e garante que 1) a profundidade da transação esteja na faixa da vida útil da abelha; 2) uma comissão foi paga pela criação de uma abelha; 3) foi enviado para o endereço correto do beco sem saída.

Se a verificação for aprovada, a carteira de Bob produzirá:

 gettxout 0f6953f0a0816483c71ae3df45650a997e678588a315d72e9ae06e6a3f1c1841 1 

Obtendo assim a segunda saída do BCT, vout [1] , confirmando que 1) o valor é zero; 2) o endereço é o mesmo para o recebimento da transferência de moedas no bloco (no exemplo CTrdm8YDfjmFJwFnKbvNZ9NYznhMqrNgFR ).

A verificação a seguir verifica a assinatura da mensagem da última parte do vout [0] . A mensagem deve conter o número do bloco atual, assinado pelo endereço para o recebimento da transferência de moeda, portanto, a carteira de Bob produz:

 verifymessage CTrdm8YDfjmFJwFnKbvNZ9NYznhMqrNgFR "IH3Emz49KJeRbw0q4R48pD6GWPQtvHCxLeQOxxH+yv14Tn5KzUFIXBe9Td8EHudejzebMYt/XpusENzNkGM/a 4I=" "1001" 

Por fim, Bob calcula deterministicRandString e beeHashTarget para o bloco atual, calcula beeHash de Alice e o beeHashTarget com beeHashTarget . Se todas as verificações forem aprovadas, o bloco será considerado válido e verificado. O processo de validação de bloco é rápido e não requer verificação cara de blocos históricos.

Emparelhamento Hi-Mining e PoW Mining


Supõe-se que a mineração alta não seja o único método para garantir a segurança da rede. Os desenvolvedores do Litecoin Cash querem não apenas salvar a comunidade de mineração, mas também não interferir com ela de forma alguma. A mineração alta deve ser emparelhada com a mineração PoW em uma blockchain.

Atualmente, a operação do circuito é calculada da seguinte forma:

imagem

Ou seja, a operação do circuito se acumula em função da complexidade em cada bloco do circuito. Os desenvolvedores propõem alterar essa definição da seguinte maneira:

imagem

Assim, cada bloco de minas de colméia será recompensado dependendo da quantidade de trabalho concluído no bloco de PoW anterior, e a constante k é determinada experimentalmente.

Conclusão: mineração alta como defesa contra ataque 51%


De acordo com Jane 'Tanner' Craig, desenvolvedora principal da Litecoin Cash, a ideia do HiveMine não é apenas fornecer proteção confiável contra ataques de 51%, mas também democratizar e descentralizar a mineração. Diferentemente das blockchains PoS, quando “os ricos ficam mais ricos”, acumulando sua parte, o HiveMine ainda exige o custo de criar uma abelha que pode não dar resultado. A mineração baseada em agentes satisfaz as três tarefas principais da equipe: complicar significativamente o ataque de 51%, democratizar a mineração e a liberdade para os mineradores usando o algoritmo SHA-256, o que garante alta segurança da mesma rede Bitcoin. Para um ataque bem-sucedido, um invasor precisará assumir 51% do poder da rede, bem como 51% da população de abelhas na rede e, dado o processo de criação de abelhas, isso se tornará imediatamente óbvio.

De acordo com Craig, após testar e implementar o modelo HiveMine na rede Litecoin Cash, que não é fornecida com a mesma taxa de hash SHA-256 que o mesmo Bitcoin Cash, será, no entanto, mais rápido e mais confiável do que as redes Bitcoin Cash ou Bitcoin .

Referências:
1. ' The Hive: Mineração baseada em agentes em Litecoin Cash ', Iain CRAIG, Sebastian CLARKE, Michał WYSZYŃSKI e Federico DE GONZÁLEZ-SOLER. (2018)

Source: https://habr.com/ru/post/pt415949/


All Articles