Pular para o conteúdo
buybitcoinsmart

Glossário / Privacidade e segurança

Gasto duplo

Outros nomes: Gasto duplo de bitcoin.

O que é um gasto duplo?
Um gasto duplo é a tentativa de fazer o mesmo bitcoin pagar duas pessoas diferentes, conseguindo que uma segunda transação, que gasta os mesmos bitcoins, seja confirmada no lugar da primeira.

O dinheiro digital é copiável por natureza, e impedir a cópia é o problema que o bitcoin foi criado para resolver. Cada fração de bitcoin está em uma saída que pode ser consumida exatamente uma vez, e o registro contábil resolve disputas ao enterrar uma versão sob blocos: após seis confirmações, cerca de uma hora, desfazer isso exige superar em mineração toda a rede. Enquanto um pagamento não for confirmado, trate-o como uma promessa, não como dinheiro recebido.

Como funciona

Gastar bitcoin significa consumir saídas específicas, cada uma identificada pela transação que a criou e por sua posição nessa transação. Os nós completos mantêm um conjunto de todas as saídas não gastas, e a validação é uma consulta: se a saída que sua transação nomeia não está nesse conjunto, a transação é inválida e é descartada, por melhor que esteja assinada.

Isso torna um gasto duplo confirmado impossível por construção. Os casos interessantes acontecem todos antes da confirmação, e são três.

O comum é a substituição. Duas transações que gastam a mesma saída são conflitantes, e apenas uma pode sobreviver. Os nós aceitam a que chegou primeiro e normalmente ignoram a segunda, mas repassam uma substituição que pague uma taxa mais alta. Desde o Bitcoin Core 28.0, lançado em outubro de 2024, a configuração -mempoolfullrbf vem ativada por padrão, ou seja, um nó retransmite uma transação conflitante com taxa mais alta, tenha ou não a original pedido ser substituível. Tudo o que não está confirmado fica sujeito a isso.

O segundo é uma corrida. O atacante transmite uma transação ao nó do comerciante e uma transação conflitante ao resto da rede no mesmo momento, apostando que a versão que paga a si mesmo chega primeiro aos mineradores. Não é preciso taxa extra, apenas melhor conectividade.

O terceiro é uma reorganização, que exige a maioria do poder de hash e é discutida em ataque de 51%. É o único método capaz de desfazer um pagamento que já está em um bloco.

O próprio código do Bitcoin errou nesse ponto exatamente uma vez em público. A CVE-2018-17144, divulgada em setembro de 2018, foi um bug que permitia a uma transação gastar a mesma entrada duas vezes sem derrubar o nó que a verificava. O Bitcoin Core 0.16.3 trouxe a correção em questão de dias, e não houve dano à cadeia, mas é um lembrete útil de que a garantia é aplicada por um software que as pessoas precisam continuar auditando.

Por que isso importa quando você compra bitcoin

Os compradores quase nunca são vítimas de um gasto duplo. Quando você envia dólares ou euros a uma corretora e recebe bitcoin, a corretora assume o risco de liquidação, e é por isso que ela espera confirmações antes de liberar um saque e que os depósitos mostram um contador de progresso. Depois que os bitcoins chegam a um endereço que você controla, ninguém pode gastá-los de novo, porque um gasto exige sua assinatura.

A exposição se inverte no momento em que você é quem recebe bitcoin. Isso acontece mais vezes do que as pessoas esperam: vender bitcoins em uma negociação ponto a ponto, aceitar bitcoin por trabalho autônomo, manter uma loja que aceita pagamentos. Em todos os casos, o erro é entregar mercadoria, dinheiro em espécie ou uma transferência bancária em troca de uma transação não confirmada. Espere pelo menos um bloco e, para valores maiores, espere vários.

Existe também um gênero inteiro de golpe construído sobre essa expressão. Vendedores em aplicativos de mensagens e sites de vídeo oferecem "double spend software", "flash BTC" ou ferramentas que supostamente geram bitcoins gastáveis mediante uma taxa. Nada do que vendem funciona, porque a transação inválida é rejeitada por todos os nós da rede; o produto é a taxa que você pagou. Nosso guia de segurança cobre a família de fraudes à qual isso pertence.

A Lightning muda a forma do problema em vez de eliminá-lo. Os pagamentos são liquidados em segundos contra o saldo de um canal, então o comerciante não precisa esperar blocos, e a questão do gasto duplo passa a ser se um parceiro do canal tenta transmitir um estado antigo, algo que as watchtowers existem para punir.

Substituir um pagamento não confirmado, passo a passo

Substituir um pagamento não confirmado é a versão barata do ataque, e vale a pena percorrê-la com números reais.

Alice compra um notebook e paga 0,01 BTC. A carteira dela monta uma transação SegWit de uma entrada e duas saídas, de cerca de 141 bytes virtuais, e anexa 3 sat/vB, uma taxa de 423 satoshis. O terminal da loja mostra o pagamento como recebido e o notebook sai pela porta.

Antes de chegar um bloco, Alice transmite uma segunda transação que gasta a mesma entrada, desta vez enviando os bitcoins ao próprio endereço, com uma taxa de 20 sat/vB, ou 2.820 satoshis. Os mineradores ficam com a versão que vale mais para eles. Quando o bloco chega, o pagamento da loja desaparece da mempool e nunca será confirmado. Alice gastou 2.397 satoshis a mais, bem menos de um dólar na maioria dos preços, e ficou tanto com o notebook quanto com os bitcoins.

Nada nessa sequência é exótico, e nenhum poder de hash foi envolvido. A defesa também não custa nada: espere um bloco, cerca de dez minutos em média, e a janela de substituição se fecha.

Gasto duplo vs replace-by-fee

O replace-by-fee é o mesmo mecanismo usado honestamente. Quando seu próprio pagamento fica preso, você o retransmite com uma taxa mais alta ao mesmo destinatário, e a rede substitui a versão antiga sem problema. Um gasto duplo usa essa maquinaria para mudar quem recebe o pagamento. A política de retransmissão não consegue distinguir os dois casos, porque a diferença é a intenção expressa nas saídas, e é por isso que os comerciantes que aceitam pagamentos não confirmados agora presumem que todos eles são substituíveis.

Gasto duplo vs maleabilidade de transações

A maleabilidade muda o identificador de uma transação sem mudar o que ela paga. Os bitcoins ainda chegam ao destinatário pretendido; só o txid que você estava acompanhando fica obsoleto, o que historicamente quebrou a contabilidade de corretoras e o sistema de saques da Mt. Gox em fevereiro de 2014. O SegWit, ativado em agosto de 2017, eliminou a maleabilidade de terceiros ao mover as assinaturas para fora dos dados que passam por hash até formar o txid. Uma transação com maleabilidade é um problema de contabilidade; um gasto duplo é um pagamento que desaparece.

Não confundir com

Perguntas frequentes

Alguém pode fazer um gasto duplo do bitcoin que já recebi?

Não, depois que está confirmado. Reverter um pagamento já registrado em um bloco exige superar em poder de mineração a rede inteira, o que nunca aconteceu no bitcoin. Pagamentos que ainda estão sem confirmação na mempool são outra questão e podem ser substituídos.

É seguro aceitar um pagamento com zero confirmações?

Não, e isso ficou menos seguro quando o replace-by-fee completo se tornou a política de retransmissão padrão no Bitcoin Core 28.0. Qualquer transação sem confirmação pode ser substituída por outra em conflito que pague uma taxa maior, então espere pelo menos um bloco antes de entregar mercadoria ou dinheiro em espécie.

As ferramentas de gasto duplo vendidas on-line realmente funcionam?

Não. Todo produto anunciado como software de gasto duplo, flash bitcoin ou gerador de transações falsas é um golpe. As transações que eles produzem são rejeitadas por todos os nós da rede, e o único dinheiro que se move é a taxa que você pagou ao vendedor.

Leia a seguir

Termos relacionados

Mais em Privacidade e segurança

Ler esta página em inglês