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.