¿Qué es el doble gasto?
El doble gasto es un problema potencial en un sistema de dinero digital donde los mismos fondos se envían a dos destinatarios al mismo tiempo. En ausencia de contramedidas adecuadas, un protocolo que no aborde el problema está fundamentalmente condenado al fracaso. Los usuarios no tienen forma de verificar que los fondos que recibieron no se hayan gastado ya en otra parte.
Cuando se trata de dinero digital, es fundamental garantizar que no se puedan duplicar unidades específicas. Todo el sistema se vería comprometido si Alice pudiera recibir 10 unidades, copiarlas y pegarlas 10 veces y terminar con 100 unidades. Asimismo, un sistema así no puede funcionar si puede enviar las mismas 10 unidades a Bob y Carol simultáneamente. Para que el dinero digital funcione, deben existir mecanismos para prevenir este comportamiento.
¿Cómo evitar el doble gasto?
El enfoque centralizado
El enfoque centralizado es considerablemente más fácil de implementar que las alternativas descentralizadas. Esto suele implicar un supervisor que gestiona el sistema y controla la emisión y distribución de 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 dinero (utilizable para realizar intercambios anónimos entre pares), un banco puede utilizar firmas ciegas, como detalla el criptógrafo David Chaum en su artículo de 1982 Blind Signatures for Untraceable Payments.
En tal contexto, si un usuario (llamémoslo Dan) quiere recibir 100 dólares en dinero digital, primero debe informar al banco. Si tienen saldo en su cuenta, generarán un número aleatorio (o varios, para denominaciones pequeñas). Supongamos que produce cinco números, a cada uno de los cuales se le asigna un valor de 20 dólares. Para evitar que el banco detecte unidades específicas, Dan codifica los números aleatorios agregando un factor de cegamiento a cada uno.
Luego entrega estos datos al banco, que carga en su cuenta 100 dólares y firma mensajes certificando que cada una de las cinco monedas es canjeable por 20 dólares. Dan ahora puede gastar los fondos emitidos por el banco. Va al restaurante de Erin y compra una comida que le cuesta 40 dólares.
Dan puede eliminar el factor ciego para exponer el número aleatorio asociado con cada “billete” de dinero digital, que sirve como identificador único para cada unidad (muy parecido a un número de serie). Le revela dos a Erin, quien ahora debe cambiarlos inmediatamente con el banco para evitar que Dan los gaste en otro comerciante. El banco verificará que las firmas sean válidas y, si todo parece estar bien, acreditará 40 dólares en la cuenta de Erin.
Los boletos usados ahora son esencialmente inútiles y se deben emitir más si Erin desea gastar su nuevo saldo de la misma manera.
El sistema eCash de Chaumian podría resultar útil para transferencias privadas. Pero fracasa en cuanto a resiliencia porque el banco es un punto central de fracaso. Un billete emitido no vale nada en sí mismo, porque su valor proviene únicamente de la voluntad del banco de cambiarlo por dólares. Los clientes están a merced del banco y deben confiar en su buena voluntad para que el dinero funcione. Este es precisamente el problema que quieren solucionar las criptomonedas.
El enfoque descentralizado
Es más difícil garantizar que los fondos no se puedan gastar dos veces en un ecosistema sin un supervisor. Participantes igualmente poderosos deben coordinarse en torno a un conjunto de reglas que prevengan el fraude e incentiven a todos los usuarios a actuar con honestidad.
La mayor innovación presentada en el libro blanco de Bitcoin fue una solución al problema del doble gasto. Aunque no se menciona como tal, Satoshi propuso la estructura de datos que ahora se conoce como blockchain.
Una cadena de bloques es en realidad sólo una base de datos con ciertas propiedades únicas. Los participantes de la red (llamados nodos) ejecutan software especializado que les permite sincronizar su copia de la base de datos con sus pares. El resultado es que toda la red puede verificar el historial de transacciones y rastrearlo hasta el bloque génesis. Debido a que blockchain está disponible públicamente, es fácil detectar y prevenir actividades fraudulentas, como transacciones que intentan duplicar el gasto.
Cuando un usuario transmite una transacción, no se agrega inmediatamente a la cadena de bloques, primero debe incluirse en un bloque mediante minería. Por lo tanto, el destinatario solo debe considerar válida la transacción después de que su bloque se agregue a la cadena. De lo contrario, corren el riesgo de perder los fondos, ya que el remitente podría gastar las mismas unidades en otro lugar.
Una vez confirmada la transacción, las unidades no se pueden gastar dos veces, porque la propiedad se asigna a un nuevo usuario y toda la red puede verificarlo. Es por ello que muchos recomiendan esperar varias confirmaciones antes de considerar válido un pago. Cada bloque posterior aumenta significativamente el esfuerzo necesario para modificar o reescribir la cadena (lo que puede ocurrir en un ataque del 51%).
Volvamos al escenario del restaurante. Dan regresa al restaurante y, esta vez, hay una pegatina de Bitcoin aceptado en la ventana. Disfrutó la comida que comió la última vez, así que la pide nuevamente. Le cuesta 0,005 BTC.
Erin le muestra una dirección pública a la que debe enviar los fondos. Dan transmite la transacción, que es esencialmente un mensaje firmado que indica que los 0,005 BTC que estaban en posesión de Dan ahora son de Erin. Sin muchos detalles, cualquiera a quien se le presente la transacción firmada por Dan puede verificar que él, de hecho, estaba en posesión de los fondos y, por lo tanto, tenía la autoridad para enviarlos.
Sin embargo, como se mencionó, la transacción solo es válida si está incluida en un bloque confirmado. Aceptar transacciones no confirmadas es un poco como aceptar los $40 en eCash del ejemplo anterior, sin retirarlos inmediatamente del banco, lo que permite al remitente gastarlos en otro lugar mientras tanto. Por lo tanto, se recomienda que Erin espere al menos 6 bloques de confirmación (aproximadamente una hora) antes de aceptar el pago de Dan.
Doble gasto y Bitcoin
Bitcoin está cuidadosamente diseñado para evitar ataques de doble gasto, al menos cuando el protocolo se utiliza según lo previsto. Es decir, si las personas están esperando que se confirmen las transacciones en un bloque, no hay una manera fácil para que el remitente las cancele. Para hacer esto, tendrían que "invertir" la cadena de bloques, lo que requiere una cantidad irreal de poder de hashing.
Sin embargo, un puñado de ataques de doble gasto se dirigen a partes que aceptan transacciones no confirmadas. Para compras de bajo valor, por ejemplo, es posible que un comerciante no quiera esperar a que las transacciones se incluyan en un bloque. Un restaurante de comida rápida concurrido probablemente no pueda darse el lujo de esperar a que la red procese cada compra. Entonces, si una empresa permite pagos “instantáneos”, se abre al doble gasto. Alguien puede pedir una hamburguesa, pagarla y luego enviar inmediatamente los mismos fondos a su propia dirección. Con tarifas más altas, esta nueva transacción corre el riesgo de confirmarse primero y, por lo tanto, invalidar la anterior.
Hay tres métodos populares para duplicar el gasto:
Ataques del 51%: cuando una sola entidad u organización obtiene el control de más del 50% de la tasa de hash, lo que les permite excluir o cambiar el orden de las transacciones. Un ataque de este tipo es muy poco probable en Bitcoin, pero ha ocurrido en otras redes.
Ataques raciales: dos transacciones conflictivas se transmiten sucesivamente, utilizando los mismos fondos, pero solo se confirma una transacción. El objetivo del atacante es invalidar el pago validando solo la transacción que lo beneficia (por ejemplo, enviar los mismos fondos a una dirección que controla). Los ataques raciales obligan al destinatario a aceptar una transacción no confirmada como pago.
Ataques de Finney: un atacante premina una transacción en un bloque sin transmitirla inmediatamente a la red. En cambio, gasta las mismas monedas en otra transacción y transmite solo su bloque previamente minado, lo que puede invalidar el pago. Los ataques de Finney requieren una secuencia específica de eventos y también están sujetos a que el destinatario acepte transacciones no confirmadas.
Como podemos ver, un comerciante que espera confirmaciones de bloque reducirá significativamente las posibilidades de convertirse en víctima del doble gasto.
Para concluir
El doble gasto permite a un usuario manipular un sistema de dinero electrónico para sus propios fines, utilizando los mismos fondos más de una vez. Tradicionalmente, la falta de soluciones adecuadas al problema ha impedido seguir avanzando.
Afortunadamente, sin embargo, el uso de firmas ciegas ofrece una solución atractiva para los sistemas financieros centralizados. Posteriormente, la creación de mecanismos de prueba de trabajo y la tecnología blockchain dieron origen al Bitcoin, una forma de moneda descentralizada que, a su vez, inspiró miles de otros proyectos de criptomonedas.

