# Doble gasto

El gasto doble o doble gasto es un defecto potencial del dinero digital por el que una misma moneda digital (a la que también se llama token) puede gastarse más de una vez. Esto es posible porque cada moneda consta de un archivo digital que puede duplicarse o falsificarse. Al igual que con el dinero falsificado, el doble gasto conlleva inflación dado que se crean nuevas monedas fraudulentas que anteriormente no existían. Esto devalúa la moneda en relación con otras unidades monetarias, y disminuye la confianza de los usuarios, así como dificulta la circulación y posesión de la moneda. En el caso concreto de Bitcoin, este se protege contra los ataques de doble gasto agregando cada transacción a la cadena de bloques y verificándola después. Para ello, utiliza un sistema descentralizado, basado en una gran red de nodos que confirman la transacción. Cuando más vulnerable es Bitcoin a este tipo de ataques, es durante el inicio de la transacción en la red y por eso, a más veces se confirme, menos probable será el riesgo de sufrir un ataque.
Otros sistemas numéricos inhiben los ataques de doble gasto con la ayuda de terceros que siguiendo unas reglas comerciales, autorizan cada transacción. Ejemplos de ello son las firmas ciegas y, particularmente en sistemas off-line, el secreto compartido.

## Descripción

Para ejecutar un ataque de gasto con éxito han de seguirse los siguientes pasos:
* El atacante realiza una transacción para recibir un servicio o producto de otra persona.
* El atacante comienza a minar el bloque en el que se incluye la transacción legal, de esta manera genera otra rama alternativa de bloques fraudulenta en la que el destino es él mismo.
* El atacante continuará minando la rama fraudulenta hasta que esta sea más larga que la original, mientras que el vendedor otorgará el servicio o producto al ver la transacción en el libro público (ledger), se haya confirmado o no la transacción.
* Si el atacante ha tenido éxito en el tercer paso, la rama fraudulenta será publicada y considerada válida, recuperando este la moneda gastada en la otra transacción.

## Tipos de ataques
### Ataque de carrera

Esta variación del ataque de doble gasto solo se puede producir en caso de transacciones cuyos vendedores aceptan pagos sin confirmación ya que se exponen a que la transacción pueda ser revertida.
El ataque se basa en que a la hora de realizar una transacción podemos realizar al mismo tiempo otra u otras transacciones usando los mismos fondos. El nombre del ataque viene porque se produce una carrera para ver que transacción se acepta primero.

### Ataque Finney

Debe su nombre a Hal Finney que fue el primer receptor de una transacción por medio de una red Bitcoin. Solo funciona si el comerciante acepta transacciones no confirmadas. Requiere la participación de un minero.
El atacante va a ir minando bloques en el bloque que está buscando incluye una transacción que le devuelve algunas de sus monedas sin transmitir la transacción. En cada bloque que genera incluye una transferencia de una dirección A a B ambos controladas por él. Cuando encuentra un bloque hace una compra desde A y cuando se acepte el pago el atacante difunde su bloqueo, la transacción le envía las monedas a él y anulara el pago anterior al comerciante.

### Ataque Vector 76

Es una combinación del ataque de carrera y el ataque Finney que puede utilizarse incluso en transacciones con una confirmación. Por eso se le conoce como ataque de una conversación.

### Ataque  por fuerza bruta

Este ataque se puede realizar incluso si se necesitan recibir algunas confirmaciones al realizar la transacción. El éxito o fracaso del ataque depende del hashrate que tengamos es decir de la frecuencia de hash que tengamos, pero requiere un gasto considerable en electricidad.
El ataque consiste en hacer una transacción en la que pagamos al vendedor y mientras se va minando una cadena de bloques alternativa en el que se incluye un ataque de doble gasto, una vez se ha esperado un número de confirmaciones y el vendedor vende el producto, si en ese momento se han encontrado más de n bloques entonces se libera la cadena y el atacante recupera su dinero.

### Ataque por mayoría o ataque >50%

Este ataque solo se puede realizar si el atacante controla más del 50% del hashrate, este sería un caso especial del ataque por fuerza bruta que tendría un 100% de probabilidades de éxito ya que el atacante va a poder generar bloques más rápido que el resto de la red.
El número de confirmaciones sería irrelevante pero un mayor número de confirmaciones puede retrasar lo suficientemente al atacante para que este método no sea rentable.

## Prevención

La prevención del doble gasto puede realizarse de dos formas: centralizada y descentralizada.
La base del ataque de doble gasto es que una moneda o partes de ella puedan usarse más de una vez, lo cual en teoría es algo que debería ser imposible. Para solventar este problema se han desarrollado sistemas de verificación que siguen básicamente la siguiente secuencia:
* Se lleva a cabo la transacción.
* Se incluye la transacción en el bloque.
* Se confirma la transacción. Hasta que no se ha confirmado por lo menos seis veces, el estatus de la transacción no pasa a legítimo. Este número concreto se debe a que según la teoría de la probabilidad, el éxito de una operación de ataque de doble gasto no superaría el 0,1 %.
* La transacción ya confirmada y legitimada se finaliza.

### Centralizada

Normalmente se implementa utilizando una tercera parte confiable central que pueda verificar que se haya gastado la moneda (token). Esto normalmente representa un punto único de fallo desde el punto de vista tanto de la disponibilidad como de la confianza.

### Descentralizada

Desde 2007 existen varios sistemas de prevención del doble gasto mediante la utilización de sistemas distribuidos.[2][3]

#### Prevención descentralizada en Bitcoin

La criptomoneda Bitcoin implementó una solución descentralizada a principios de 2009. Emplea un protocolo criptográfico denominado sistema de prueba de trabajo (proof-of-work) para evitar la necesidad de una tercera parte confiable en la validación de transacciones. En vez de ello, las transacciones se guardan en un libro de contabilidad público llamado «cadena de bloques». Se considera que una transacción es válida cuando está incluida en la cadena que contiene la mayor cantidad de trabajo computacional. Esto hace que el doble gasto sea «imposiblemente difícil», volviéndolo más robusto a medida que crece la red global.[4]