¿Cuál es el problema del doble gasto?

El problema del doble gasto es un problema potencial en los sistemas de efectivo digital donde se pagan los mismos fondos a dos beneficiarios al mismo tiempo. Sin las contramedidas adecuadas, el protocolo por sí solo no puede resolver completamente este problema. Después de todo, los usuarios no tienen forma de verificar si los fondos que reciben han sido pagados a otros.

En el mundo del efectivo digital, es necesario garantizar que una unidad monetaria específica no pueda copiarse. Si Alice pudiera recibir 10 unidades monetarias, copiarlas y pegarlas 10 veces y luego tener 100 unidades monetarias, todo el sistema se desmoronaría. Del mismo modo, si pudiera enviar las mismas 10 unidades monetarias a Bob y Carol al mismo tiempo, el sistema tampoco funcionaría. Por lo tanto, deben existir mecanismos para evitar que esto suceda y garantizar el correcto funcionamiento de las monedas digitales.


¿Cómo prevenir el problema del doble gasto?

Enfoque centralizado

Los enfoques centralizados son más fáciles de implementar que las soluciones descentralizadas, que generalmente requieren un supervisor para administrar el sistema y controlar la emisión y emisión de unidades monetarias. El eCash de David Chaum resuelve el problema del doble gasto mediante un enfoque centralizado.​

Los bancos pueden utilizar firmas ciegas para emitir activos digitales similares a efectivo para los usuarios (lo que puede permitir transacciones anónimas entre pares). Esto se detalla en el artículo de 1982 "Técnicas de firma ciega para pagos imposibles de rastrear" del criptógrafo David Chaum.

En este caso, si el usuario Dan quiere recibir $100 en efectivo digital, primero debe notificarlo al banco. Si hay saldo en su cuenta, se generará un número aleatorio (más si la denominación es menor). Supongamos que se generan cinco números aleatorios, cada uno con un valor de 20 dólares. Para evitar que los bancos rastreen unidades monetarias específicas, Dan confunde la situación agregando un factor de cegamiento a cada número aleatorio.

Luego le dio estos datos al banco, que dedujo el saldo de $100 de su cuenta y firmó el mensaje, demostrando que cada uno de los cinco mensajes era canjeable por $20. En este momento, Dan puede utilizar efectivo digital emitido por el banco. Fue al restaurante de Erin a comer y gastó $40.​

Dan elimina el factor cegador y expone el nonce asociado con cada “billete” de efectivo digital, que es un identificador único para cada unidad monetaria (aproximadamente equivalente a un número de serie). Le revela dos de los números aleatorios a Erin, quien debe intercambiar inmediatamente los fondos con el banco para evitar que Dan pague a otros comerciantes. El banco verificará si la firma es válida y, si es correcta, depositará $40 en la cuenta de Erin.

Luego, los "billetes" usados ​​se destruyen y, si Erin desea utilizar el saldo de su cuenta de la misma manera, se deben emitir más billetes.

El mecanismo Chaumian eCash es extremadamente valioso para transferencias privadas. Sin embargo, el mecanismo eCash en sí no tiene resistencia. Dado que los bancos son nodos centralizados, una vez que el sistema falla, todos sufrirán. Los billetes emitidos por bancos no tienen valor en sí mismos; su valor proviene enteramente de la voluntad del banco de cambiarlos por dólares estadounidenses. Los clientes están sujetos al banco y deben confiar en la reputación del banco para operar los fondos. Este es exactamente el problema que las criptomonedas pretenden resolver.


Enfoque descentralizado

Evitar el problema del doble gasto en un ecosistema sin mecanismos de supervisión es aún más desafiante. Los participantes con igual poder deben coordinarse entre sí de acuerdo con el mismo conjunto de reglas para prevenir el fraude e incentivar a todos los usuarios a actuar con integridad.

La mayor innovación presentada en el libro blanco de Bitcoin es la solución al problema del doble gasto. Satoshi Nakamoto propuso una estructura de datos sin precedentes ahora conocida como blockchain.

Blockchain es en realidad solo una base de datos con algunas propiedades únicas. Los participantes de la red (llamados nodos) ejecutan software especializado que les permite sincronizar sus propias copias de la base de datos entre sí. De esta manera, toda la red puede auditar el historial de transacciones que se remonta al bloque génesis. Dado que la cadena de bloques es visible públicamente, será más fácil detectar y prevenir fraudes, como identificar intentos de transacciones de doble gasto.

Cuando un usuario publica una transacción, no se agrega inmediatamente a la cadena de bloques y primero debe extraerse antes de que se pueda cargar el bloque. Por lo tanto, sólo cuando el bloque se ingresa en la cadena el beneficiario puede confirmar que la transacción es válida. De lo contrario, el destinatario correrá el riesgo de perder fondos si el remitente paga el mismo token en otro lugar.​

Una vez que se confirma una transacción, la propiedad del token se asigna al nuevo usuario y toda la red la verifica, por lo que los tokens ya no se pueden gastar dos veces. Por este motivo, muchas personas recomiendan esperar múltiples confirmaciones antes de aceptar un pago válido. Cada bloque posterior aumenta significativamente la cantidad de trabajo necesario para modificar o reescribir la cadena (como en el caso de un ataque del 51%).

Volvamos a la situación del restaurante. Dan regresó al restaurante y esta vez notó la pegatina en la ventana que decía "Esta tienda admite pagos con Bitcoin". No pudo olvidar su última comida y volvió a pedir la misma comida, que le costó 0,005 Bitcoins.​

Erin le muestra a Dan la dirección pública, que es la dirección de transferencia. El anuncio de Dan sobre la transacción es esencialmente un mensaje firmado que anuncia que los 0,005 Bitcoins que posee ahora son propiedad de Erin. Sin entrar en demasiados detalles, cualquiera que vea la transacción firmada por Dan puede confirmar que los tokens son suyos y, por lo tanto, Dan tiene la autoridad para enviarlos.

Sin embargo, como se mencionó anteriormente, la transacción solo es válida después de cargarse en el bloque y confirmarse. Recibir una transacción no confirmada es como recibir $40 en eCash previamente. Si no se cobra inmediatamente a través del banco, el remitente puede gastar los fondos en otra parte. Por lo tanto, Erin debe esperar al menos 6 bloques de confirmación (aproximadamente una hora) antes de aceptar el pago de Dan.


El problema del doble gasto de Bitcoin

Bitcoin está cuidadosamente diseñado para evitar ataques de doble gasto, al menos si el protocolo se utiliza según lo previsto. Es decir, si alguien está esperando que una transacción obtenga la confirmación del bloqueo, el remitente no podrá revertir la transacción fácilmente. Sólo "revirtiendo" la cadena de bloques se puede revertir una transacción, lo que requiere enormes cantidades de poder de hash.

Sin embargo, algunos ataques de doble gasto se dirigen específicamente a usuarios que aceptan transacciones no confirmadas. Por ejemplo, con compras pequeñas, los comerciantes no quieren esperar hasta que la transacción se incluya en el bloque. Es posible que los restaurantes de comida rápida concurridos no puedan esperar tanto tiempo como tarda la red en procesar cada transacción. Por lo tanto, si un comerciante tiene habilitados los pagos "instantáneos", puede enfrentar un problema de doble gasto. Alguien puede pedir una hamburguesa y pagarla, luego enviar inmediatamente los mismos fondos a su propia dirección. Siempre que la tarifa de gestión de la transacción posterior sea mayor, es posible que se confirme primero, lo que provocará que la transacción anterior deje de ser válida.

Actualmente existen tres ataques comunes de doble gasto:

  • Ataque del 51%: Una sola entidad u organización logra controlar más del 50% de la tasa de hash para poder eliminar o modificar el orden de las transacciones. Es extremadamente improbable que este tipo de ataque ocurra en la red Bitcoin, pero ha ocurrido en otras redes.

  • Ataque racial: se publican sucesivamente dos transacciones conflictivas utilizando los mismos fondos, pero solo se confirma una transacción. El objetivo del atacante es invalidar otro pago validando una transacción a su favor. Por ejemplo, enviar fondos a una dirección que él controla. Un ataque racial normalmente implica que el destinatario acepte una transacción no confirmada como pago.

  • Ataques de Finney: un atacante extrae previamente una transacción y la coloca en un bloque, pero no la publica inmediatamente en la red. En cambio, pagó el mismo token en otra transacción antes de publicar un bloque previamente minado, invalidando así el pago. Las condiciones necesarias para un ataque Fenney son que los eventos ocurran en un orden específico, y el éxito también depende de si el destinatario acepta la transacción no confirmada.

Como podemos ver, los comerciantes pueden reducir en gran medida su riesgo y evitar ser víctimas del doble gasto simplemente esperando pacientemente las confirmaciones de los bloques.


Resumir

Los usuarios pueden utilizar ataques de doble gasto para alterar los sistemas de efectivo electrónico peer-to-peer y utilizar los mismos fondos varias veces para buscar ganancias injustas. En el pasado, debido a que este problema tenía que resolverse bien, el desarrollo de este campo se ha estancado.

Afortunadamente, el uso de firmas ciegas se ha convertido en una solución llamativa en las soluciones financieras centralizadas. Posteriormente, el desarrollo del mecanismo de prueba de trabajo y la tecnología blockchain dieron origen a Bitcoin, una poderosa forma de moneda descentralizada, que a su vez sirvió de inspiración para miles de proyectos de criptomonedas.