O que é gasto duplo?

A duplicação de gastos é um problema potencial num sistema monetário digital onde os mesmos fundos são enviados para dois destinatários ao mesmo tempo. Na ausência de contramedidas adequadas, um protocolo que não resolva o problema está fundamentalmente fadado ao fracasso. Os usuários não têm como verificar se os fundos recebidos já não foram gastos em outro lugar.

Quando se trata de dinheiro digital, é essencial garantir que unidades específicas não possam ser duplicadas. Todo o sistema ficaria comprometido se Alice pudesse receber 10 unidades, copiá-las e colá-las 10 vezes e acabar com 100 unidades. Da mesma forma, tal sistema não pode funcionar se puder enviar as mesmas 10 unidades para Bob e Carol simultaneamente. Para que o dinheiro digital funcione, devem existir mecanismos para prevenir este comportamento.


Como evitar gastos duplos?

A abordagem centralizada

A abordagem centralizada é consideravelmente mais fácil de implementar do que as alternativas descentralizadas. Isso geralmente envolve um supervisor que gerencia o sistema e controla 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 (utilizável para realizar trocas anônimas, 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) quiser receber 100 dólares em dinheiro digital, ele deverá primeiro informar o banco. Se tiverem saldo na conta, irão gerar um número aleatório (ou vários, para valores pequenos). Suponha que ele produza cinco números, cada um dos quais com o valor de $20. Para evitar que o banco identifique unidades específicas, Dan embaralha os números aleatórios adicionando um fator de cegueira a cada um.

Ele então entrega esses dados ao banco, que debita de sua conta 100 dólares e assina mensagens certificando que cada uma das cinco moedas pode ser trocada por 20 dólares. Dan agora pode gastar os fundos emitidos pelo banco. Ele vai ao restaurante de Erin e compra uma refeição que 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 para Erin, que agora deve trocá-los imediatamente com o banco para evitar que Dan os gaste em outro comerciante. O banco verificará se as assinaturas são válidas e, se tudo parecer bem, creditará US$ 40 na conta de Erin.

Os bilhetes usados ​​são agora essencialmente inúteis, e mais devem ser emitidos se Erin quiser gastar o seu novo saldo da mesma forma.

O sistema eCash de Chaumian pode ser útil para transferências privadas. Mas falha na resiliência porque o banco é um ponto central de falência. Uma nota emitida não vale nada por si só, porque o seu valor provém unicamente da disposição do banco em 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 as criptomoedas querem resolver.


A abordagem descentralizada

É mais difícil garantir que os fundos não possam ser gastos duas vezes num ecossistema sem um supervisor. 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 de gastos duplos. Embora não seja mencionado como tal, Satoshi propôs a estrutura de dados hoje conhecida como blockchain.

Um blockchain é na verdade apenas um banco de dados com certas propriedades únicas. Os participantes da rede (chamados 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 verificar o histórico de transações e rastreá-lo até o bloco gênese. Como o blockchain está disponí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. Portanto, 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 unidades noutro local.

Uma vez confirmada a transação, as unidades 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 várias confirmações antes de considerar um pagamento válido. Cada bloco subsequente aumenta significativamente o esforço necessário para modificar ou reescrever a string (o que pode acontecer em um ataque de 51%).

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

Erin mostra 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 agora são de Erin. Sem muitos detalhes, qualquer pessoa que receba a transação assinada por Dan pode verificar se ele estava de fato na posse dos fundos e, portanto, tinha autoridade para enviá-los.

Conforme mencionado, porém, a transação só é válida se estiver incluída em um bloco confirmado. Aceitar transações não confirmadas é um pouco como aceitar os US$ 40 em eCash do exemplo anterior, sem sacá-los imediatamente do banco, o que permite ao remetente gastá-los em outro lugar nesse meio tempo. 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 e Bitcoin

O Bitcoin é cuidadosamente projetado para evitar ataques de gastos duplos, pelo menos quando o protocolo é usado conforme pretendido. Ou seja, se as pessoas estão aguardando a confirmação das transações em bloco, não há uma maneira fácil para o remetente cancelá-las. Para fazer isso, eles teriam que “inverter” o blockchain, o que requer uma quantidade irreal de poder de hashing.

No entanto, alguns ataques de gasto duplo têm como alvo 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 num bloco. Um restaurante fast food movimentado provavelmente não pode esperar que a rede processe cada compra. Portanto, se uma empresa permite pagamentos “instantâneos”, ela se expõe ao dobro dos gastos. Alguém pode pedir um hambúrguer, pagar e enviar imediatamente os mesmos fundos para seu próprio endereço. Com taxas mais elevadas, esta nova transação corre o risco de ser confirmada primeiro e, portanto, invalidar a anterior.

Existem três métodos populares para gastar em dobro:

  • Ataques de 51%: Quando uma única entidade ou organização obtém o controle de mais de 50% da taxa de hash, permitindo-lhes excluir ou alterar a ordem das transações. Tal ataque é muito improvável no Bitcoin, mas ocorreu em outras redes.

  • Ataques de corrida: duas transações conflitantes são transmitidas sucessivamente, 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 forçam o destinatário a aceitar 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 transmite apenas o seu bloco previamente minerado, o que pode invalidar o pagamento. Os ataques Finney exigem uma sequência específica de eventos e também estão sujeitos à aceitação de transações não confirmadas pelo destinatário.

Como podemos ver, um comerciante que aguarda confirmações de bloqueio reduzirá significativamente as chances de se tornar vítima de gastos duplos.


Concluir

O gasto duplo permite que um usuário manipule um sistema de dinheiro eletrônico para seus próprios fins, usando os mesmos fundos mais de uma vez. Tradicionalmente, a falta de soluções adequadas para o problema tem impedido novos progressos.

Felizmente, porém, a utilização de assinaturas cegas oferece uma solução atractiva para sistemas financeiros centralizados. Mais tarde, a criação de mecanismos de prova de trabalho e da tecnologia blockchain deu origem ao Bitcoin, uma forma de moeda descentralizada que, por sua vez, inspirou milhares de outros projetos de criptomoeda.