O que é gasto duplo?

O gasto duplo é um problema potencial em um sistema de dinheiro digital, onde os mesmos fundos são enviados para dois destinatários ao mesmo tempo. Sem quaisquer contramedidas adequadas, um protocolo que não resolve o problema fica fundamentalmente prejudicado – os utilizadores não têm como verificar se os fundos que receberam já não foram gastos noutro local.

Quando se trata de dinheiro digital, garantir que unidades específicas não possam ser duplicadas é de suma importância. Todo o sistema seria prejudicado se Alice pudesse receber 10 unidades, copiá-las e colá-las 10 vezes e ficar na posse de 100 unidades. Da mesma forma, tal esquema não funcionará se ela puder enviar as mesmas 10 unidades para Bob e Carol simultaneamente. Portanto, para que o dinheiro digital funcione, devem existir mecanismos para prevenir este comportamento.


Como evitar gastos duplos?

A abordagem centralizada

A via centralizada é consideravelmente mais fácil de implementar do que as alternativas descentralizadas. Isto normalmente envolve um superintendente gerenciando o sistema e controlando a emissão e distribuição de unidades. Um bom exemplo de solução centralizada para o problema do gasto duplo é o eCash de David Chaum.

Para emitir aos usuários um ativo digital que imita dinheiro (capaz de troca anônima e peer-to-peer), um banco pode usar assinaturas cegas – conforme detalhado pelo criptógrafo David Chaum em seu artigo de 1982, Blind Signatures for Untraceable Payments.

Nesse contexto, se um usuário (vamos chamá-lo de Dan) desejar receber US$ 100 em dinheiro digital, ele deverá informar primeiro o banco. Desde que tenha saldo em sua conta, ele gerará um número aleatório (ou muitos, para valores menores). Suponhamos que ele produza cinco números, cada um com o valor de $20. Para evitar que o banco rastreie unidades específicas, Dan ofusca os números aleatórios adicionando um fator de cegueira a cada um deles.

Ele então entrega esses dados ao banco, que debita US$ 100 em sua conta e assina mensagens certificando que cada uma das cinco informações pode ser resgatada por US$ 20. Dan agora pode gastar os fundos emitidos pelo banco. Ele vai ao restaurante de Erin e compra uma refeição que lhe custa US$ 40.

Dan pode remover o fator cegante para expor o número aleatório associado a cada “nota” de dinheiro digital, que serve como um identificador exclusivo para cada unidade (muito parecido com um número de série). Ele revela dois deles para Erin, que agora deve resgatá-los imediatamente no banco para evitar que Dan os gaste com outro comerciante. O banco verificará se as assinaturas são válidas e, se tudo parecer correto, creditará US$ 40 na conta de Erin.

As notas usadas agora estão essencialmente queimadas e mais devem ser emitidas se Erin desejar gastar seu novo saldo da mesma forma.

A configuração Chaumian eCash pode ser valiosa para transferências privadas. Mas falha em resiliência porque o banco é um ponto central de falha. Uma letra emitida não vale nada por si só, pois o seu valor deriva unicamente da vontade do banco de trocá-la por dólares. Os clientes estão à mercê do banco e devem confiar na sua boa vontade para que o dinheiro funcione. Este é precisamente o problema que a criptomoeda pretende remediar.


A abordagem descentralizada

Garantir que os fundos não possam ser gastos duas vezes num ecossistema sem supervisor é mais desafiador. Participantes igualmente poderosos devem coordenar-se em torno de um conjunto de regras que evitem fraudes e incentivem todos os usuários a agir honestamente.

A maior inovação apresentada no white paper do Bitcoin foi uma solução para o problema do gasto duplo. Embora não seja referenciado como tal, Satoshi propôs a estrutura de dados agora amplamente conhecida como blockchain.

Um blockchain é na verdade apenas um banco de dados com algumas propriedades únicas. Os participantes da rede (chamados de nós) executam software especializado, que lhes permite sincronizar sua cópia do banco de dados com seus pares. O resultado é que toda a rede pode auditar o histórico de transações que datam do bloco gênese. Ao ter o blockchain visível publicamente, é fácil detectar e prevenir atividades fraudulentas, como transações que tentam duplicar os gastos.

Quando um usuário transmite uma transação, ela não é adicionada imediatamente ao blockchain – ela deve primeiro ser incluída em um bloco por meio de mineração. Como tal, o destinatário só deve considerar a transação válida após o seu bloco ser adicionado à cadeia. Caso contrário, correm o risco de perder os fundos, pois o remetente poderá gastar as mesmas moedas noutro local.

Uma vez confirmada a transação, as moedas não podem ser gastas duas vezes, pois a propriedade é atribuída a um novo usuário – e toda a rede pode verificar isso. É por esta razão que muitos recomendam aguardar múltiplas confirmações antes de aceitar um pagamento como válido. Cada bloco subsequente aumenta drasticamente a quantidade de esforço necessária para modificar ou reescrever a cadeia (o que pode ocorrer durante um ataque de 51%).

Vamos revisitar o cenário do restaurante. Dan retorna ao restaurante e desta vez nota um adesivo de Bitcoin Aceito Aqui na janela. Ele gostou da refeição que comeu da última vez, então pede novamente. Custa-lhe 0,005 BTC.

Erin apresenta a ele um endereço público para o qual ele deve enviar os fundos. Dan transmite a transação, que é essencialmente uma mensagem assinada informando que os 0,005 BTC que estavam em posse de Dan estão agora em posse de Erin. Sem entrar em muitos detalhes, qualquer pessoa que receba a transação assinada de Dan pode verificar se ele realmente estava de posse das moedas e, portanto, tinha autoridade para enviá-las.

Porém, conforme mencionado, a transação só é válida se incluída em um bloco confirmado. Aceitar transações não confirmadas é muito parecido com aceitar os US$ 40 em eCash do exemplo anterior, sem descontá-los imediatamente no banco – permite ao remetente gastá-los em outro lugar. Portanto, é recomendado que Erin aguarde pelo menos 6 confirmações de bloqueio (cerca de uma hora) antes de aceitar o pagamento de Dan.


Gastos duplos em Bitcoin

O Bitcoin é cuidadosamente projetado para evitar ataques de gasto duplo, pelo menos quando o protocolo é usado conforme o esperado. Ou seja, se os indivíduos aguardam a confirmação das transações em um bloco, não há uma maneira fácil para o remetente desfazê-lo. Para fazer isso, eles precisariam “reverter” o blockchain, o que requer uma quantidade irreal de poder de hashing.

No entanto, existem alguns ataques de gastos duplos que visam partes que aceitam transações não confirmadas. Para compras de baixo valor, por exemplo, um comerciante pode não querer esperar que as transações sejam incluídas em um bloco. Um restaurante fast-food movimentado provavelmente não pode ficar parado enquanto a rede processa cada compra. Portanto, se uma empresa permite pagamentos “instantâneos”, ela se expõe a gastos duplos. Alguém pode pedir um hambúrguer, pagar e enviar imediatamente os mesmos fundos para seu próprio endereço. Com uma taxa mais elevada, esta nova transação provavelmente será confirmada primeiro e, portanto, invalidará a anterior.

Existem três métodos populares para realizar um gasto duplo:

  • Ataques de 51%: quando uma única entidade ou organização consegue controlar mais de 50% da taxa de hash, o que lhes permite excluir ou modificar a ordem das transações. Tal ataque é altamente improvável no Bitcoin, mas já aconteceu em outras redes.

  • Ataques de corrida: duas transações conflitantes são transmitidas em sucessão, usando os mesmos fundos – mas apenas uma transação é confirmada. O objetivo do invasor é invalidar o pagamento validando apenas a transação que o beneficia (por exemplo, enviando os mesmos fundos para um endereço que ele controla). Os ataques de corrida exigem que o destinatário aceite uma transação não confirmada como pagamento.

  • Ataques Finney: um invasor pré-minera uma transação em um bloco sem transmiti-la imediatamente para a rede. Em vez disso, ele gasta as mesmas moedas em outra transação e só então transmite seu bloco previamente minerado, o que pode invalidar o pagamento. Os ataques Finney exigem a ocorrência de uma sequência específica de eventos e também dependem da aceitação de transações não confirmadas pelo destinatário.

Como podemos ver, um comerciante que espera por confirmações de bloqueio reduzirá enormemente os riscos de se tornar vítima de gastos duplos.


Pensamentos finais

Um gasto duplo permite que um usuário jogue com um sistema de dinheiro eletrônico para obter ganhos financeiros, utilizando os mesmos fundos mais de uma vez. Tradicionalmente, a falta de soluções adequadas para o problema tem impedido o progresso na área.

Felizmente, porém, a utilização de assinaturas cegas propôs uma solução interessante para esquemas financeiros centralizados. Mais tarde, a criação de mecanismos de Prova de Trabalho e da tecnologia blockchain deu origem ao Bitcoin como uma forma poderosa de dinheiro descentralizado – que, por sua vez, inspirou milhares de outros projetos de criptomoeda.