Ataque de Doble Gasto o Double Spend en Bitcoin: ¿Mito o realidad?

Introducción

En el mundo de las criptomonedas, la seguridad siempre ha sido algo muy prioritario, pero eso no ha impedido que existan ciertos puntos débiles, como el que describiremos ahora, los ataques de Doble Gasto o Double Spend. Los ataques de doble gasto, son uno de los ataques más estudiados en el mundo de las monedas digitales, incluidas las criptomonedas como Bitcoin. Pero gracias a eso, se han podido crear mecanismos para protegernos de estos ataques.

Ahora bien ¿Qué es en realidad un Ataque de Doble Gasto o Double Spend? ¿Quien descubrió estos ataques? ¿Cómo la tecnología blockchain se protege de los mismos? Pues bien, esto lo estudiaremos a continuación.

¿Qué es un Ataque de Doble Gasto o Double Spend?

Cuando hablamos de un ataque de doble gasto nos referimos a la posibilidad de que un usuario pueda usar unas mismas monedas dos o más veces para realizar pagos. Un problema sumamente grave que tiene una fuerte incidencia en las monedas digitales. Este problema fue descrito en el año de 1983 por David Chaum, un reconocido criptográfo que había estado trabajando por mucho tiempo en la creación de un sistema de monedas digitales llamado e-Cash. Chaum siguió trabajando sobre este sistema hasta su presentación pública en 1990, cuando Chaum creó la compañía DigiCash. En ese entonces, comenzó a comercializar e-Cash como un sistema de pago online seguro y anónimo. Uno que los bancos y otras empresas se mostraron muy interesados en utilizar.

El protocolo desarrollado por Chaum para e-Cash garantiza que un ataque de estas características no pudiera realizarse. Y es que básicamente, el protocolo diseñado por Chaum consideraba un ataque de doble gasto como la utilización completa o incluso la creación de transacciones falsas con el objetivo de atribuirse el uso legítimo de unas monedas para dos o más gastos distintos. Partiendo de esto podemos simplificar el concepto de doble gasto de la siguiente manera:

Un ataque de doble gasto o double spend, es todo aquel ataque a un sistema de moneda digital en el que un usuario haga uso de unas mismas monedas para realizar dos operaciones de pago distintas, sin que esto excluya, operaciones falsas que intenten violar las reglas del protocolo y de consenso de la red para habilitar con éxito este tipo de gastos ilegales.

Pese al avance de e-Cash este sistema cayó en decadencia, algo que aseguran fue debido a las malas prácticas comerciales y de marketing que DigiCash y Chaum aplicaron para masificar este sistema.

¿Qué es un Ataque de Doble Gasto o Double Spend?

Sabiendo lo que es un ataque de doble gasto y que las monedas digitales son mayormente susceptibles a este, es bueno preguntarse ¿Es Bitcoin susceptible a este tipo de ataques? La realidad es que si, Bitcoin es susceptible a este tipo de ataques. Pero en Bitcoin este tipo de ataques por lo general sólo pueden llevarse a cabo con éxito en una etapa muy temprana de las transacciones.

Recordemos que cuando realizamos una transacción en Bitcoin, esta no es confirmada de forma inmediata. En su lugar, la transacción se guarda en la mempool o pool de memoria de la red. Allí espera a que los mineros la seleccionen y la incluyan en un bloque. En ese momento la transacción recibe su primera confirmación y forma ya parte de la blockchain.

Pero durante ese periodo de tiempo antes de la confirmación, un hacker puede manipular el sistema a su favor para crear transacciones ilegales, que usen las mismas monedas para hacerlas pasar como pagos auténticos. En momentos como estos, si un vendedor o usuario de criptomonedas acepta transacciones sin confirmación, se arriesga a ser víctima de un ataque de doble gasto. De allí que la recomendación no solo de los desarrolladores de Bitcoin sino también de la comunidad, es que esperen a que una transacción tenga al menos 3 confirmaciones antes de tomarse como irreversible.

Muchas personas en la comunidad no consideran que el esquema de ataque mostrado anteriormente sea un ataque de doble gasto real. La razón que esgrimen es que "una transacción en mempool no es una transacción gastada". Es decir, una transacción en mempool no está confirmada y por lo tanto no hay un gasto real en la misma. Esto es cierto, pero lejos de posiciones u opiniones personales, David Chaum preparó a e-Cash (la primera moneda digital) contra este tipo de manipulaciones y las clasificó todas como un doble gasto.

Adicionalmente existen otros elementos que chocan directamente con ese pensar. El primero es la demostración que hizo Satoshi Nakamoto, el creador de Bitcoin, en su whitepaper. Nakamoto describió la posibilidad de realizar ataques de doble gasto usando la fuerza bruta al obtener el 51% de toda la potencia de la red de Bitcoin. El temido Ataque de 51% habilita a quien lo alcance a reescribir las transacciones de la red prácticamente sin límites. Y entre esas posibilidades está la capacidad de hacer ataques de doble gasto, con una o más confirmaciones.

Otra posibilidad fue descrita por alguien muy cercano al mundo del Bitcoin desde un principio, el informático Hal Finney. En una de sus intervenciones en el foro Bitcointalk, Finney relataba como realizar una nueva forma de doble gasto. El proceso podía ser aplicado sobre transacciones sin confirmación y sin necesidad de tener más de la mitad del poder de cómputo de la red. Aunque complejo de realizar, el ataque Finney era el primer ataque de doble gasto factible que hacía vulnerable a Bitcoin.

Esto demuestra que los ataques de doble gasto o double spend en Bitcoin son posible. Difíciles de ejecutar, sí, pero posibles. Incluso transacciones con una confirmación en Bitcoin también puede manipularse bajo ciertos criterios muy específicos. Pero para saber más sobre estos ataques, estudiemos un poco sobre los mismos.

Esquemas de Doble Gasto en Bitcoin

Ataque de 51%

Un ataque de 51% es un ataque donde un actor malicioso o conjunto de actores, logran hacerse con el 51% del poder de cómputo de una red que funcione usando la Prueba de Trabajo. Con ese poder a disposición, los actores estarían en la capacidad de afectar de forma significativamente negativa el funcionamiento de la red.

Por ejemplo, podrían modificar el funcionamiento de la red haciendo que esta respete otra reglas de consenso y llevando a un hard fork, donde el resto de nodos y usuarios se verían afectados al no poder usar de forma correcta la red. También abre la posibilidad de modificar las transacciones y bloques ya confirmados de la red, habilitando el doble gasto, e incluso, pueden aprobar transacciones falsas que les permitan obtener fondos de forma ilegal dentro de la red.

Este tipo de ataque fue descrito por Satoshi Nakamoto en el whitepaper de Bitcoin, y desde entonces ha sido una de las principales preocupaciones de la comunidad que apoya a Bitcoin. La forma de evitar el mismo es aumentar la descentralización del poder de cómputo. Esto haciendo que más y más actores distintos participen en la red. Así se evita que uno (o unos pocos) pueda tener tanto poder de cómputo dentro de la red. La mayor diversificación también lleva a que el poder total de la red aumente, haciendo con esto más difícil alcanzar ese 51% necesaria para llevar con éxito este tipo de ataques.

Relacionado: Promover un ataque del 51% a la red de Bitcoin cuesta 93 BTCs por hora

Ataque Finney

Hal Finney es uno de los personajes conocidos del mundo Bitcoin, y la razón es que él fue la primera persona después de Satoshi Nakamoto en ejecutar un nodo de Bitcoin. Es más, Hal Finney recibió la primera transacción de Bitcoin, por un total de 10 BTC, directamente de Nakamoto. Durante todo su tiempo en la comunidad Bitcoin, Finney fue ampliamente entusiasta de la tecnología de Bitcoin y colaboró en la medida de sus posibilidades con el desarrollo del mismo.

Pero Finney llamaría poderosamente la atención de la comunidad, cuando el 13 de Febrero de 2011, en el foro de Bitcointalk, hablaba sobre la posibilidad de un ataque de doble gasto sobre Bitcoin. Las palabras exactas de Finney fueron:

Supongamos que el atacante está generando bloques ocasionalmente. En cada bloque que genera, incluye una transferencia de la dirección A a la dirección B, las cuales controla.

Para engañarte, cuando genera un bloque, no lo transmite. En cambio, corre a tu tienda y realiza un pago a tu dirección C con su dirección A. Espera unos segundos, no escucha nada y toma los productos. Entonces transmite su bloque ahora, y su transacción tendrá prioridad sobre la tuya.

Lo descrito llamó poderosamente la atención de la comunidad, en especial de Gavin Andresen, quien comentó:

Creo que el verdadero peligro es que un gran operador minero cree un negocio secundario que venda espacio en sus bloques para este tipo de doble gasto intencional. Cuando generan un bloque, pueden enviar un mensaje de texto a un grupo de personas diciendo "Pruebe gastar AHORA".

Me pregunto si hay alguna forma de desalentar ese tipo de comportamiento antisocial; ¿Podría la red detectar lo que se estaba haciendo y "evitar" los bloques de ese minero?

Claramente, Gavin reconocía el problema y de hecho el problema en la actualidad aún existe. El ataque Finney ciertamente es complejo y necesita de la participación de un minero con gran poder de cómputo. Pero es factible de ser realizado y lo peor, no puede ser mitigado de forma correcta sin alterar el protocolo de consenso y validación de transacciones de la red Bitcoin.

Ataque de Carrera

El Ataque de Carrera o Race Attack, es un tipo de doble gasto que afecta a los comerciantes o usuarios de Bitcoin que aceptan pagos sin confirmaciones. Básicamente este ataque consiste en que el atacante realiza un pago a un comerciante usando unas monedas, y al mismo tiempo, realiza otra transacción usando dichas monedas para enviárselas a otra dirección bajo su control. Manipulando las comisiones de ambas transacciones (bajando la comisión de la primera y subiendo la de la segunda) este tipo de ataques pueden tener mayor oportunidad de éxito. Especialmente si la mempool se encuentra congestionada y los mineros sólo dan prioridad a las transacciones con mayores comisiones.

Este es otro ejemplo de porqué se recomienda a los usuarios de criptomonedas como Bitcoin esperar al menos 3 o más confirmaciones para dar por realizada una transacción.

Ataque de Vector76

El Ataque de Vector76, fue un ataque ideado por el usuario de Bitcointalk, vector76. El 17 de agosto de 2011, vector76 usuario de Bitcointalk, comentó lo siguiente en el foro:

No necesitas extraer 2 bloques seguidos. Minar un solo bloque es suficiente si la red resuelve la bifurcación de la manera que deseas, y podría ser posible configurar las cosas para que esto sea probable.

Digamos que observó el momento en que los nodos transmiten transacciones y cómo se propagan a través de la red. Al observar qué nodos son los primeros en transmitir las transacciones desde mi objetivo, logró establecer una conexión directa con mi objetivo.

Utilizó un método similar para ver transmisiones en bloque para establecer conexiones con la mayoría de los grupos de minería.

Ahora creo una transacción haciendo un depósito válido y grande en mi objetivo. No transmito esta transacción, pero la agrego a un bloque que estoy intentando extraer. Solo mío, como de costumbre, excepto que tengo un TX extra no emitida que estoy incluyendo.

Finalmente, logró crear un bloque válido. No lo transmito de inmediato, sino que esperó hasta que alguien extrae un bloque, y cuando eso sucede, inmediatamente transmito mi bloque a mi objetivo. Si mi objetivo ve mi bloque antes que el otro bloque, lo aceptarán y mi transacción tendrá una confirmación. La cadena de bloques se ha bifurcado, y mi objetivo (y posiblemente otros nodos, si mi objetivo se retransmite lo suficientemente rápido) creerán que mi bloque es el correcto, mientras que otros nodos creerán que el otro fork es el correcto.

Solicito inmediatamente un retiro, y mi objetivo genera una transacción que envía la gran cantidad de monedas a una dirección que controlo. También gastó dos veces algunas de las entradas, enviándome las monedas. La parte de la red que no recibió mi bloque primero (que con suerte es la mayoría de los mineros) aceptará esto como válido y trabajará para incluirlo en el siguiente bloque.

Si mi bloque finalmente "gana" porque suficientes mineros vieron mi bloque primero y lo agregaron primero, entonces acabo de hacer un depósito y retiro, y no pierdo nada.

Pero si mi bloque finalmente "pierde", el depósito se invalida. Si el depósito TX no fue una de las entradas a la transacción de retiro, entonces el retiro aún es válido.

Lo descrito acá por vector76 es un ataque de doble gasto, en donde se manipula la red para hacer ganar validez a una transacción claramente ilegal. Básicamente lo que hace este ataque es hacer creer a un comerciante e incluso un exchange, que una transacción enviada a su dirección es válida.

Pero la verdad, es que esa transacción ha sido incluida y enviada a la red en un bloque prefabricado. Un bloque preparado única y exclusivamente para hacer válido el ataque de doble gasto. Como consecuencia, el bloque prefabricado del atacante y el bloque real de la red buscan llegar a la mayoría de nodos posible. El que alcance ese objetivo (replicar en la copia blockchain de la mayoría de nodos) es el bloque que ganará. Pero si el atacante logra hacerse de la mayor cantidad de conexiones relevantes dentro de la red desde un principio, logrará ese objetivo (replicar su bloque) con suma facilidad.

Este tipo de ataques es posible porque se alimenta de dos puntos estructurales de Bitcoin. En primer lugar, los nodos de Bitcoin en su mayoría tienen conexiones con direcciones IP públicas. Para un hacker resulta sencillo observar el tránsito de información dentro de la red y saber cuáles son los nodos relevantes (que tienen mayor cantidad de conexiones). Ubicados estos nodos, el atacante puede conectar nodos bajo su control y enviar información a los nodos relevantes para usarlos a favor. Al conectar estos nodos maliciosos con sus víctimas, les hace "ver" una versión de la cadena ajustada a lo que necesita para realizar su ataque con éxito.

El segundo fallo, viene dado por el protocolo de funcionamiento de la red Bitcoin. Bitcoin usa un protocolo de red propio construido usando lo mejor del protocolo Kademlia y el protocolo Gossip. Esto hace que la red Bitcoin sea muy segura y rápida.  Esto es usado a favor por el atacante para hacer que su bloque prefabricado se extienda rápidamente por la red. Al lograrlo, el protocolo de Bitcoin actúa: la blockchain válida será aquella que más nodos acepten y que sea la más larga. Así tiene garantizado el éxito de su ataque.

Ataque Eclipse

El Ataque Eclipse, por su parte es un ataque donde un hacker interfiere la conexión de un objetivo y la redirige a un grupo de nodos y mineros que el manipula. Si el atacante tiene éxito en realizar el ataque, puede manipular a su gusto el objetivo. Con ello, por ejemplo, puede hacer creer a un comerciante que una determinada transacción ha sido confirmada un número X de veces. Cuando la verdad es que todo ese tiempo ha estado recibiendo información falsa de un nodo manipulado.

Este tipo de ataques son posible en Bitcoin, debido a la apertura de la red. De hecho, un sistema parecido al Ataque Eclipse es usado por el Ataque Vector76.  Más allá de esto, el Ataque Eclipse también puede hacer algo peligroso. Puede manipular a los mineros dividiendo su poder y haciéndolos minar para una versión alterna y manipulada de la blockchain.

Este tipo de ataques fue descrito por un equipo de especialistas en el USENIX Security Symposium, en 2015.

Relacionado: El doble gasto en Bitcoin es difícil, una mirada hacia el supuesto problema

Doble gasto en otras criptomonedas

Ahora bien ¿Qué hay de ataques de doble gasto en otras criptomonedas? Pues también son posible, en menor o mayor medida, con estos u otros mecanismos de ataques. Esto nos deja claro una cosa: los ataques de doble gasto son algo estructural en las monedas digitales. Es un problema que puede ser mitigado o corregido hasta cierto punto, pero nunca puede ser solucionado del todo. De hecho, en este punto entra perfectamente un principio de ciberseguridad:

La seguridad absoluta, no existe.

Teniendo en cuenta esto podemos mencionar por ejemplo que Ethereum es vulnerable a ataques de 51%, Eclipse Attack e incluso Ataque Sybil. Redes como Bitcoin Cash, DASH, EOS, NANO, todas tienen vulnerabilidades del tipo doble gasto, que solucionan o mitigan de una u otra forma.

Pero pese a esto, de algo puedes estar seguro, las criptomonedas son la forma de dinero más segura que existe. Esto gracias a que se conocen los problemas, se sabe cómo evitarlos o reducirlos al mínimo peligro, y la comunidad activamente trabaja para mejorar sus defensas contra los mismos.