Guia para Iniciantes Sobre Double-Spending
P√°gina Inicial
Artigos
Guia para Iniciantes Sobre Double-Spending

Guia para Iniciantes Sobre Double-Spending

Intermedi√°rio
Publicado em Feb 17, 2020Atualizado em Jan 31, 2023
7m

Conte√ļdo


O que é double-spending?

Double-spending (gastos duplos) √© um problema que pode ocorrer em um sistema de dinheiro digital em que os mesmos fundos s√£o gastos duas vezes, ou seja, s√£o enviados para dois destinat√°rios ao mesmo tempo. Se um protocolo n√£o utilizar contramedidas adequadas para resolver o problema, ele estar√° comprometido ‚Ästos usu√°rios n√£o t√™m como verificar se os fundos que receberam j√° foram gastos ou n√£o.

Quando se trata de dinheiro digital, é extremamente importante garantir que unidades específicas não possam ser duplicadas. Todo o sistema seria comprometido se Alice pudesse receber 10 unidades, copiá-las e colá-las 10 vezes e ter posse de 100 unidades. Da mesma forma, esse esquema não pode funcionar se Alice puder enviar as mesmas 10 unidades para Bob e Carol simultaneamente. Portanto, para que o sistema de dinheiro digital funcione, o uso de mecanismos para impedir esse comportamento é necessário.


Como o double-spending pode ser prevenido?

Abordagem centralizada

A implementação em um sistema centralizado é consideravelmente mais fácil do que em 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 double-spending é a de David Chaum, para a eCash. 

Para emitir aos usu√°rios um ativo digital que imita dinheiro (capaz de efetuar trocas an√īnimas e¬†peer-to-peer), um banco pode usar blind signatures (assinaturas cegas) ‚Äď conforme explica√ß√£o do cript√≥grafo David Chaum em seu artigo de 1982¬†Blind Signatures for Untraceable Payments.

Nesse contexto, se o usu√°rio Dan deseja receber $100 em dinheiro digital, ele √© obrigado a informar o banco primeiro. Caso ele tenha saldo em sua conta, ele ir√° gerar um n√ļmero aleat√≥rio (ou muitos, para denomina√ß√Ķes menores). Vamos supor que ele produz cinco n√ļmeros, cada um com um valor de $20. Para impedir que o banco rastreie unidades espec√≠ficas, Dan ofusca os n√ļmeros aleat√≥rios adicionando um¬†blinding factor¬†(fator de oculta√ß√£o) a cada um deles.

Ele ent√£o entrega esses dados ao banco, que debita $100 de sua conta e assina mensagens certificando que cada uma das cinco informa√ß√Ķes possui um valor de resgate de $20. Dan agora pode gastar os fundos emitidos pelo banco. Ele vai at√© o restaurante de Erin e compra uma refei√ß√£o que custa $40.¬†

Agora Dan pode remover o blinding factor e expor o n√ļmero aleat√≥rio associado a cada ‚ÄĚnota‚ÄĚ de dinheiro digital, que serve como um identificador exclusivo para cada unidade (como um n√ļmero de s√©rie). Ele revela dois deles para Erin, que deve resgat√°-los imediatamente com o banco para impedir que Dan gaste os mesmo $40 com outra compra. O banco ir√° verificar se as assinaturas s√£o v√°lidas e, se tudo estiver correto, ir√° enviar $40 para a conta de Erin.

As duas "notas" usadas foram basicamente queimadas e agora ser√° necess√°rio emitir mais notas se Erin quiser gastar o saldo que recebeu.

A configuração de Chaum para a eCash pode ser valiosa para transferências privadas. Porém, ela apresenta falhas na resiliência pois o banco é um ponto central de falha. Uma nota digital emitida, em si, não tem valor, pois seu valor é derivado da vontade do banco ou do vendedor de trocá-la por dólares. Os clientes estão à mercê do banco e devem confiar em sua boa vontade para que o sistema de dinheiro funcione. Este é, precisamente, o problema que a criptomoeda pretende solucionar.


Abordagem descentralizada

Em um ecossistema sem supervisão, garantir que os fundos não possam ser gastos duas vezes é uma tarefa mais difícil. Os participantes, que detêm o mesmo poder, devem se coordenar 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 da Bitcoin foi uma solu√ß√£o para o problema de double-spending. Embora n√£o tenha sido mencionado como tal, Satoshi prop√īs a estrutura de dados que hoje √© amplamente conhecida como¬†blockchain.
Uma blockchain √©, na realidade, apenas um banco de dados com algumas propriedades exclusivas. Os participantes da rede (denominados de¬†n√≥s) executam um software especializado, que lhes permite sincronizar sua c√≥pia do banco de dados com seus pares (peers). Dessa forma, toda a rede pode verificar e auditar o hist√≥rico de transa√ß√Ķes que remetem ao¬†bloco de g√™nese. Como a blockchain √© publicamente vis√≠vel, √© f√°cil detectar e impedir atividades fraudulentas, como transa√ß√Ķes que tentam gastar duas vezes o mesmo valor (double-spending).
Quando um usu√°rio transmite uma transa√ß√£o, ela n√£o √© imediatamente adicionada √† blockchain ‚Äď ela deve primeiro ser inserida em um bloco atrav√©s da¬†minera√ß√£o. Sendo assim, o destinat√°rio deve considerar a transa√ß√£o v√°lida apenas quando seu bloco for adicionado √† cadeia. Caso contr√°rio, existe o risco de perda dos fundos, pois o usu√°rio que est√° enviando, poderia gastar as mesmas moedas em outra transa√ß√£o.¬†
Depois que a transa√ß√£o √© confirmada, as moedas n√£o podem ser gastas novamente, pois a propriedade √© atribu√≠da a um novo usu√°rio ‚Äď e toda a rede pode verificar isso. √Č por esse motivo que muitos recomendam esperar v√°rias confirma√ß√Ķes antes de considerar um pagamento como v√°lido. Cada bloco subsequente aumenta drasticamente a quantidade de esfor√ßo necess√°rio para modificar ou reescrever a cadeia (que pode ocorrer durante um¬†ataque de 51%).

Considere novamente o cen√°rio do restaurante. Dan retorna ao restaurante e dessa vez nota um adesivo na janela escrito "Aceitamos Bitcoin". Ele gostou da √ļltima refei√ß√£o que fez, ent√£o a pede novamente. O pre√ßo √© de 0,005 BTC.¬†

Erin mostra para Dan um¬†endere√ßo p√ļblico para o qual ele deve enviar os fundos. Dan transmite a transa√ß√£o, que √© essencialmente uma mensagem assinada afirmando que 0,005 BTC que estavam em posse de Dan est√£o agora no endere√ßo de Erin. Sem muitos detalhes, qualquer um que tenha recebido uma transa√ß√£o assinada por Dan pode verificar se ele realmente tinha posse das moedas e, portanto, tinha de fato condi√ß√£o para envi√°-las.

Conforme mencionado, a transa√ß√£o s√≥ √© v√°lida se for inserida em um bloco que √© confirmado. Aceitar transa√ß√Ķes n√£o confirmadas √© como aceitar os $40 em eCash do exemplo anterior, sem descontar o valor imediatamente com o banco ‚Äď permitindo que o valor seja gasto em outro lugar. Portanto, √© recomend√°vel que Erin aguarde pelo menos 6 confirma√ß√Ķes de bloco (aproximadamente uma hora) antes de aceitar o pagamento de Dan.


Double-spending na Bitcoin

A Bitcoin √© cuidadosamente projetada para evitar tentativas de double-spending, pelo menos quando o protocolo √© usado conforme o esperado. Ou seja, se os indiv√≠duos esperarem que as transa√ß√Ķes sejam confirmadas em um bloco, n√£o existe uma maneira simples para que o remetente reverta o envio. Para isso, ele precisaria ‚Äúreverter‚ÄĚ toda a blockchain, o que requer uma quantidade absurda de hashing power (poder computacional).

No entanto, existem v√°rios ataques de double-spending direcionados √†s 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 muito ocupado provavelmente n√£o pode ficar aguardando enquanto a rede processa todas as compras. Portanto, se uma empresa aceita esses pagamentos ‚Äúinstant√Ęneos‚ÄĚ, ela se torna vulner√°vel a tentativas de double-spending. Algu√©m pode pedir um lanche, pagar por ele e depois enviar imediatamente os mesmos fundos para seu pr√≥prio endere√ßo. Tendo uma taxa mais alta, √© prov√°vel que essa nova transa√ß√£o seja confirmada primeiro e, portanto, invalidar√° a transa√ß√£o anterior destinada ao pagamento do lanche.

Existem três métodos populares para efetuar um golpe de double-spending:

  • 51% attacks: quando uma √ļnica entidade ou organiza√ß√£o consegue controlar mais de 50% da taxa de hash, o que permite excluir ou modificar a ordem das transa√ß√Ķes. Esse tipo de ataque √© muito improv√°vel no sistema da Bitcoin, mas j√° aconteceu em outras redes.
  • Race attacks: duas transa√ß√Ķes em conflito 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, enviar os mesmos fundos para um endere√ßo que ele controla). Os Race attacks exigem que o destinat√°rio aceite uma transa√ß√£o n√£o confirmada como pagamento.
  • Finney attacks: o invasor previamente 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 o bloco minerado anteriormente, o que pode invalidar o pagamento. Os Finney Attacks exigem que uma sequ√™ncia espec√≠fica de eventos ocorra e tamb√©m dependem da aceita√ß√£o (do destinat√°rio) de transa√ß√Ķes n√£o confirmadas.

Como podemos ver, um comerciante que aguarda as confirma√ß√Ķes de bloco, reduzir√° drasticamente os riscos relacionados a tentativas de double-spending.


Considera√ß√Ķes finais

O double-spending permite que um usu√°rio engane um sistema de pagamento eletr√īnico para obter ganhos financeiros, usando os mesmos fundos mais de uma vez. A falta de solu√ß√Ķes adequadas para este problema tem dificultado o progresso na √°rea.

Felizmente, no entanto, o uso das blind signatures (assinaturas cegas) prop√īs uma solu√ß√£o interessante para sistemas financeiros centralizados. Mais tarde, a cria√ß√£o dos mecanismos de¬†Proof of Work e a tecnologia blockchain deram origem √† Bitcoin como uma poderosa ferramenta de dinheiro descentralizado ‚Äď que, por sua vez, inspirou milhares de outros projetos de criptomoedas.