¿Qué es el doble gasto?

El doble gasto es un problema potencial en un sistema monetario digital donde los mismos fondos se pueden gastar dos veces en el mismo intervalo de tiempo. Sin contramedidas adecuadas, un protocolo que no aborde esta cuestión es vulnerable a este tipo de actividad: los usuarios simplemente no pueden estar seguros de que sus fondos no se gastaron en otra cosa.

En el criptoespacio, limitar la duplicación de determinadas unidades es de suma importancia. Si Alice pudiera recibir 10 unidades y luego copiarlas y pegarlas 10 veces para obtener 100 unidades, todo el sistema fallaría. El sistema tampoco funcionaría si se enviaran las mismas 10 unidades a Boris y Katya al mismo tiempo. Por lo tanto, para que el dinero digital funcione, se deben crear mecanismos que limiten tales posibilidades.


¿Cómo se puede evitar el doble gasto?

Enfoque centralizado

El tipo de sistema centralizado es mucho más fácil de implementar, a diferencia de las alternativas descentralizadas. Básicamente, implica la presencia de una entidad u organización que gestiona el sistema y controla la emisión y distribución de nuevas unidades. Un buen ejemplo de una solución centralizada al problema del doble gasto es el eCash de David Chaum. 

Para emitir a los usuarios un activo digital que imite el efectivo (capaz de intercambio anónimo y entre pares), un banco puede utilizar firmas ciegas, como lo describe el criptógrafo David Chaum en su artículo de 1982 "Firmas ciegas para pagos imposibles de rastrear".

Por ejemplo, si un usuario (llamémosle Denis) quiere recibir 100 dólares en moneda digital, primero debe informar al banco. Si hay saldo en la cuenta, genera un número aleatorio o varios números para denominaciones más pequeñas. Digamos que produce cinco números, a cada uno de los cuales se le asigna un valor de $20. Para evitar que el banco rastree las unidades monetarias, Denis oculta los números aleatorios agregando un factor de cegamiento a cada uno de ellos.

Luego transmite la información al banco, que carga en su cuenta 100 dólares y luego firma mensajes confirmando que cada uno de los cinco datos es canjeable por 20 dólares. Ahora Denis puede gastar los fondos emitidos por el banco. Va al restaurante de Irina y compra comida, que cuesta $40. 

Denis puede eliminar el factor de cegamiento para utilizar un número aleatorio asociado con la moneda digital en el cheque, que servirá como un identificador único para cada artículo (similar a un número de serie). Le revela dos de ellos a Irina, quien ahora debe activarlos inmediatamente en el banco para que Denis no pueda gastar el mismo dinero en otra parte. El banco comprobará las firmas y, si todo va bien, acreditará 40 dólares en la cuenta de Irina.

Una vez activados, los cheques usados ​​se queman y, si Erin quiere gastar su nuevo saldo nuevamente, necesitará obtener nuevos cheques de la misma manera.

El eCash de Chaum puede ser conveniente para transacciones financieras privadas, pero el enfoque no es muy confiable ya que el banco es un punto central de falla. El cheque emitido en sí no vale nada, ya que su valor está determinado únicamente por la voluntad del banco de cambiar el cheque por dólares. Al mismo tiempo, los clientes están a merced del banco y deben confiar en él para poder gastar dinero, que es exactamente el problema que las criptomonedas pretenden corregir.


Enfoque descentralizado

Garantizar que los fondos no puedan gastarse dos veces en un ecosistema sin un organismo de supervisión externo es más desafiante. En este caso, participantes igualmente poderosos tendrían que acordar ciertas reglas para prevenir el fraude e incentivar a todos los usuarios a actuar con honestidad.

La mayor innovación presentada en el documento técnico de Bitcoin fue la solución al problema del doble gasto. Aunque no se menciona como tal, la estructura de datos propuesta por Satoshi ahora se conoce ampliamente como blockchain.

Blockchain es una base de datos con un conjunto de propiedades únicas. Los participantes de la red (llamados nodos) utilizan software especializado para sincronizar una copia de la base de datos con otros participantes. Como resultado, todos los participantes de la red pueden verificar el historial de cada transacción, comenzando desde el bloque génesis. Al hacer pública la cadena de bloques, se pueden detectar y prevenir fácilmente actividades fraudulentas, como transacciones de doble gasto.

Cuando un usuario transmite una transacción, no se agrega inmediatamente a la cadena de bloques: primero, debe incluirse en el bloque mediante minería. El destinatario considerará válida la transferencia solo después de agregar el bloque con la transacción a la cadena. De lo contrario, el destinatario corre el riesgo de no recibir los fondos prometidos, ya que el remitente podría gastar las mismas monedas en otro lugar. 

Una vez confirmada la transacción, las monedas no se pueden gastar dos veces, ya que la propiedad se transfiere al nuevo usuario y toda la red puede verificarlo. Es por este motivo que muchos recomiendan esperar hasta recibir varias confirmaciones antes de aceptar un pago. Cada bloque posterior aumenta la cantidad de esfuerzo necesario para cambiar o reescribir la cadena (como en un ataque del 51%).

Tomemos nuevamente el ejemplo del restaurante. Denis regresa al restaurante y ve un anuncio que dice que este establecimiento acepta pagos por servicios en Bitcoin. Le gustaron los platos que comió la última vez, así que los vuelve a pedir. Costará 0,005 BTC. 

Irina proporciona su dirección pública a la que debería enviar fondos. Denis transmite la transacción, que es esencialmente un mensaje firmado de que los 0,005 BTC de Denis ahora se están transfiriendo a Irina. Cualquiera a quien se le presente la transacción firmada por Denis puede verificar que él era efectivamente el propietario de las monedas y, por lo tanto, tenía derecho a enviarlas.

Como ya dijimos, una transacción sólo es válida si está incluida en un bloque confirmado. Aceptar transacciones no confirmadas es muy parecido a recibir $40 en eCash del ejemplo anterior sin cobrar el cheque en el banco de manera oportuna, lo que permite al remitente gastar la misma cantidad en otro lugar. Por lo tanto, Irina debe esperar al menos seis confirmaciones de bloque (aproximadamente una hora) antes de aceptar el pago de Denis.


Doble gasto en la red Bitcoin

El mecanismo de Bitcoin evita ataques de doble gasto, al menos mientras el protocolo funcione correctamente. Es decir, si alguien está esperando que se confirmen las transacciones de un bloque, no será fácil para el remitente revertirlas. Para lograr esto, es necesario revertir la cadena de bloques, pero esto requerirá una enorme cantidad de poder de hash.

Sin embargo, existen varios ataques de doble gasto dirigidos a transacciones no confirmadas. Por ejemplo, al realizar compras a bajo precio, es posible que el vendedor no quiera esperar a que las transacciones se incluyan en el bloque. Un restaurante de comida rápida sobrecargado de pedidos tampoco podrá funcionar correctamente con un tiempo de procesamiento tan largo para cada compra. Por lo tanto, si una empresa depende de pagos instantáneos, se vuelve vulnerable al doble gasto. Alguien podría pedir una hamburguesa, pagarla y luego enviar inmediatamente los mismos fondos a su dirección. Lo más probable es que una nueva transacción con una tarifa más alta se confirme primero y posteriormente se cancele la validación de la anterior.

Hay tres métodos populares para implementar el doble gasto:

  • Un ataque del 51% ocurre cuando una entidad u organización logra tomar el control de más del 50% de todo el hashrate de la red, permitiendo eliminar transacciones o cambiar su orden. Un ataque de este tipo es poco probable en el caso de Bitcoin, pero puede ocurrir en relación con otras redes blockchain.

  • Un ataque racial ocurre cuando dos transacciones conflictivas se transmiten al mismo tiempo usando los mismos fondos, pero solo una de ellas se confirma. El objetivo del atacante es invalidar la validación confirmando sólo la transacción que desea (por ejemplo, enviando los mismos fondos a su dirección). La condición para tal ataque es el permiso del vendedor para pagar la mercancía mediante transacciones no confirmadas.

  • Los ataques de Finney ocurren cuando un atacante extrae previamente un bloque con su transacción sin transmitirlo inmediatamente a la red. En cambio, gasta las monedas nuevamente, pero como parte de una transacción diferente, y solo entonces transmite el bloque anterior, cancelando la transferencia al vendedor. Los ataques de Finney requieren una secuencia específica de eventos y también dependen de la voluntad del destinatario de aceptar transacciones no confirmadas.

Como podemos ver, un vendedor que espera a que se confirme un bloqueo tiene un riesgo significativamente menor de convertirse en víctima del doble gasto.


Reanudar

El doble gasto le permite utilizar el sistema de dinero digital para obtener ganancias financieras gastando la misma cantidad más de una vez. La falta de soluciones adecuadas a este problema impide seguir avanzando en este ámbito.

Afortunadamente, la llegada de las firmas ciegas ha resuelto muchos de los problemas de los sistemas financieros centralizados. Y la creación de mecanismos de prueba de trabajo y la tecnología blockchain dio origen a Bitcoin, una poderosa forma de dinero descentralizado que ha inspirado a muchos usuarios a crear miles de otros proyectos de criptomonedas.