Qual é o problema do gasto duplo?

O problema do gasto duplo é um problema potencial nos sistemas de dinheiro digital, onde os mesmos fundos são pagos a dois beneficiários ao mesmo tempo. Sem contramedidas adequadas, o protocolo por si só não pode resolver completamente este problema. Afinal, os usuários não têm como verificar se os fundos que recebem foram pagos a terceiros.

No mundo do dinheiro digital, é necessário garantir que uma unidade monetária específica não possa ser copiada. Se Alice pudesse receber 10 unidades monetárias, copiá-las e colá-las 10 vezes e depois ter ela mesma 100 unidades monetárias, todo o sistema desmoronaria. Da mesma forma, se ela pudesse enviar as mesmas 10 unidades monetárias para Bob e Carol ao mesmo tempo, o sistema também não funcionaria. Portanto, devem existir mecanismos para evitar que isto aconteça para garantir o bom funcionamento das moedas digitais.


Como evitar o problema de gasto duplo?

Abordagem centralizada

As abordagens centralizadas são mais fáceis de implementar do que as soluções descentralizadas, que normalmente requerem um supervisor para gerir o sistema e controlar a emissão e emissão de unidades monetárias. O eCash de David Chaum resolve o problema do gasto duplo por meio de uma abordagem centralizada.​

Os bancos podem usar assinaturas cegas para emitir ativos digitais semelhantes a dinheiro para os usuários (o que pode permitir transações anônimas entre pares). Isso é detalhado no artigo de 1982 "Blind Signature Techniques for Untraceable Payments", do criptógrafo David Chaum.

Nesse caso, se o usuário Dan quiser receber US$ 100 em dinheiro digital, ele deverá primeiro avisar o banco. Se houver saldo em sua conta, será gerado um número aleatório (mais se o valor for menor). Suponha que cinco números aleatórios sejam gerados, cada um valendo US$ 20. Para evitar que os bancos rastreiem unidades monetárias específicas, Dan confunde a situação adicionando um fator cegante a cada número aleatório.

Ele então forneceu esses dados ao banco, que deduziu o saldo de US$ 100 de sua conta e assinou a mensagem, provando que cada uma das cinco mensagens era resgatável por US$ 20. Neste momento, Dan pode usar dinheiro digital emitido pelo banco. Ele foi ao restaurante de Erin para comer e gastou US$ 40.​

Dan elimina o fator cegante e expõe o nonce associado a cada “nota” de dinheiro digital, que é um identificador exclusivo para cada unidade monetária (aproximadamente equivalente a um número de série). Ele revela dois dos números aleatórios para Erin, que deve trocar imediatamente os fundos com o banco para evitar que Dan pague a outros comerciantes. O banco verificará se a assinatura é válida e, se estiver correta, depositará US$ 40 na conta de Erin.

As "notas" usadas são então destruídas, e se Erin desejar usar o saldo de sua conta da mesma forma, mais notas deverão ser emitidas.

O mecanismo Chaumian eCash é extremamente valioso para transferências privadas. No entanto, o mecanismo eCash em si não oferece resistência. Como os bancos são nós centralizados, se o sistema falhar, todos sofrerão. As notas emitidas por bancos não têm valor em si; o seu valor provém inteiramente da vontade do banco de trocar as notas por dólares americanos. Os clientes estão sujeitos ao banco e devem confiar na reputação do banco para operar fundos. Este é exatamente o problema que as criptomoedas pretendem resolver.


Abordagem descentralizada

Evitar o problema do gasto duplo num ecossistema sem mecanismos de supervisão é ainda mais desafiador. Os participantes com poderes iguais devem coordenar-se entre si de acordo com o mesmo conjunto de regras para prevenir fraudes e incentivar todos os utilizadores a agirem com integridade.

A maior inovação apresentada no white paper Bitcoin é a solução para o problema do gasto duplo. Satoshi Nakamoto propôs uma estrutura de dados sem precedentes, agora conhecida como blockchain.

Blockchain é na verdade apenas um banco de dados com algumas propriedades únicas. Os participantes da rede (chamados nós) executam software especializado que lhes permite sincronizar suas próprias cópias do banco de dados entre si. Dessa forma, toda a rede pode auditar o histórico de transações que remonta ao bloco gênese. Como o blockchain pode ser visualizado publicamente, será mais fácil detectar e prevenir fraudes, como a identificação de tentativas de transações de gasto duplo.

Quando um usuário publica uma transação, ela não é adicionada imediatamente ao blockchain e deve primeiro ser extraída antes que o bloco possa ser carregado. Portanto, somente quando o bloco for inserido na cadeia o beneficiário poderá confirmar que a transação é válida. Caso contrário, o destinatário correrá o risco de perder fundos se o remetente pagar o mesmo token em outro lugar.​

Depois que uma transação é confirmada, a propriedade do token é atribuída ao novo usuário e verificada por toda a rede, de modo que os tokens não podem mais ser gastos em dobro. Por esse motivo, muitas pessoas recomendam aguardar diversas confirmações antes de aceitar um pagamento válido. Cada bloco subsequente aumenta significativamente a quantidade de trabalho necessária para modificar ou reescrever a cadeia (como no caso de um ataque de 51%).

Voltemos à situação do restaurante. Dan voltou ao restaurante e desta vez notou o adesivo na vitrine dizendo “Esta loja suporta pagamento com Bitcoin”. Ele não conseguia esquecer a última refeição e pediu novamente a mesma comida, custando 0,005 Bitcoins.​

Erin mostra a Dan o endereço público, que é o endereço de transferência. O anúncio da transação por Dan é essencialmente uma mensagem assinada anunciando que os 0,005 Bitcoins que ele possui agora são propriedade de Erin. Sem entrar em muitos detalhes, qualquer pessoa que veja a transação assinada por Dan pode confirmar que os tokens são realmente dele e, portanto, Dan tem autoridade para enviá-los.

Porém, como mencionado anteriormente, a transação só é válida após ser carregada no bloco e confirmada. Receber uma transação não confirmada é como receber US$ 40 em eCash anteriormente. Se não for sacado imediatamente através do banco, o remetente poderá gastar os fundos em outro lugar. Portanto, Erin deve esperar pelo menos 6 confirmações de bloqueio (aproximadamente uma hora) antes de aceitar o pagamento de Dan.


O problema de gastos duplos do Bitcoin

O Bitcoin é cuidadosamente projetado para evitar ataques de gasto duplo, pelo menos se o protocolo for usado conforme pretendido. Ou seja, se alguém estiver aguardando uma transação para obter a confirmação do bloqueio, o remetente não conseguirá reverter a transação facilmente. Somente “revertendo” o blockchain uma transação pode ser revertida, o que requer enormes quantidades de poder de hashing.

No entanto, alguns ataques de gasto duplo visam especificamente usuários que aceitam transações não confirmadas. Por exemplo, com pequenas compras, os comerciantes não querem esperar até que a transação seja incluída no bloco. Restaurantes fast-food movimentados podem não conseguir esperar o tempo que a rede leva para processar cada transação. Portanto, se um comerciante tiver pagamentos “instantâneos” habilitados, ele poderá enfrentar um problema de gasto duplo. Alguém pode pedir um hambúrguer e pagar por ele, e então enviar imediatamente os mesmos fundos de volta para seu próprio endereço. Contanto que a taxa de manuseio da transação posterior seja maior, ela poderá ser confirmada primeiro, fazendo com que a transação anterior se torne inválida.

Atualmente, existem três ataques comuns de gasto duplo:

  • Ataque de 51%: Uma única entidade ou organização consegue controlar mais de 50% da taxa de hash para excluir ou modificar a ordem das transações. É extremamente improvável que esse tipo de ataque ocorra na rede Bitcoin, mas já ocorreu em outras redes.

  • Ataque de corrida: Duas transações conflitantes são publicadas sucessivamente usando os mesmos fundos, mas apenas uma transação é confirmada. O objetivo do invasor é invalidar outro pagamento, validando uma transação a seu favor. Por exemplo, enviar fundos para um endereço que ele controla. Um ataque de corrida normalmente envolve o destinatário aceitando uma transação não confirmada como pagamento.

  • Ataques Finney: um invasor pré-minera uma transação e a coloca em um bloco, mas não a publica imediatamente na rede. Em vez disso, ele pagou o mesmo token em outra transação antes de publicar um bloco previamente minerado, invalidando assim o pagamento. As condições necessárias para um ataque Fenney são que os eventos ocorram em uma ordem específica, e o sucesso também depende de o destinatário aceitar a transação não confirmada.

Como podemos ver, os comerciantes podem reduzir bastante o risco e evitar serem vítimas do dobro dos gastos, simplesmente aguardando pacientemente pelas confirmações do bloco.


Resumir

Os usuários podem usar ataques de gasto duplo para adulterar sistemas de dinheiro eletrônico peer-to-peer e usar os mesmos fundos várias vezes para buscar ganhos injustos. No passado, porque este problema tinha que ser bem resolvido, o desenvolvimento deste campo esteve estagnado.

Felizmente, o uso de assinaturas cegas tornou-se uma solução atraente em soluções financeiras centralizadas. Posteriormente, o desenvolvimento do mecanismo de prova de trabalho e da tecnologia blockchain deu origem ao Bitcoin, uma forma poderosa de moeda descentralizada, que por sua vez forneceu inspiração para milhares de projetos de criptomoeda.