(...)
De repente, cresci tanto que atingi esses 51% e resolvo fazer o ataque... consegui, ter mais sucesso que os outros e começaria a avacalhar o sistema, lançando blocos incorretos, com gastos duplos...
Entendo que, a partir daí, haveria questões a serem enfrentadas: de um lado, bastaria que qualquer outra pessoa conseguisse, posteriormente, efetuar a prova de trabalho antes de mim e lançar um novo bloco correto na rede, caso em que meu bloco (ou blocos) ilegítimo seria ignorado pelo minerador e demais fullnodes (correto?)... a corrente de blocos seguiria, então, a partir do bloco imediatamente anterior àquele incorreto que lancei... aquele meu trabalho não seria digno de credibilidade - penso que mesmo a minoria não iria querer seguir a mim, pois, mesmo tendo 51%, apresento transações incorretas, e seus trabalhos, lançados após meu bloco inválido, serão igualmente ignorados (aliás, daí dizerem ser razoável se esperar a inserção de "seis blocos ou uma hora", para verificar se há segurança na concretização da operação por meio do consenso)... (correto?)
(...)
O erro está nessa frase: "lançando blocos incorretos, com gastos duplos". Os blocos NÃO SÃO incorretos. São pelo contrário, corretíssimos! Se você gerar blocos incorretos você realmente cairá nessa situação descrita.
A ideia do ataque de 51% é gerar uma nova cadeia, TOTALMENTE CORRETA, mais longa que a "principal" e que não contenha as transações que você pretende fazer gasto duplo. Dessa forma você está "apagando" as transações que já foram feitas ou substituindo elas por outras de sua preferencia.
Por exemplo:
- Eu quero comprar um carro!
- Envio, sei-la, 2 BTC para a concessionária. Digamos que o txid seja "1234ABCD".
-- Nesse momento eu inicio o ataque e coloco meus mineradores em modo de ataque, eles vão continuar minerando, sem nunca incluir a transação "1234ABCD", e tomando o cuidado de esperar sempre um novo bloco ser gerado pelos outros mineradores antes de publicar um dos meus blocos. Assim eu construo uma cadeia "quase" do mesmo tamanho que a cadeia principal, mas que está sempre órfã porque é publicada sempre "depois" da principal.
- A concessionária espera 6 confirmações e me entrega o carro.
- Eu concluo o ataque publicando minha cadeia completa, que eu estava publicando "aos poucos" pra evitar detecção.
-- A rede sofre uma "reorg" e os meus blocos publicados que estavam "órfãos" passam a ser a cadeia principal, mais longa. A transação "1234ABCD" que eu evitei incluir nos meus blocos "desaparece", mesmo já tendo 6 confirmações. Os 2 BTC voltam pra minha carteira.
Em nenhum momento foi gerado um bloco "incorreto", todos os blocos foram corretos, apenas não incluíam a minha transação que eu quero "apagar". Nenhum full node consegue diferenciar qual bloco é o atacante e qual é o "normal" pois ambos são corretos. tendo duas cadeias de blocos "corretas", ele vai seguir a regra de consenso e aceitar a cadeia mais longa.