¿Cómo realizar un ataque de doble gasto en sitios web que aceptan transacciones con 0 confirmaciones?

Para realizar un ataque Finney o un ataque 51% necesito tener mucha potencia computacional, pero en este caso (un sitio web que acepta transacciones con 0 confirmaciones) me parece que solo necesito emitir dos transacciones casi simultáneamente. Dependiendo de lo que el minero decida incluir en el siguiente bloque, podría tener suerte.

¿Es tan fácil o me estoy olvidando de algo?

Respuestas (2)

Si está intentando un gasto doble de confirmación 0, entonces las transacciones (si las hay) que se incluyen en el siguiente bloque son irrelevantes. Su objetivo es simplemente completar ambas transacciones antes de que cualquiera de los comerciantes reciba una notificación del otro.

El "problema" es que la red es bastante rápida para pasar transacciones de un nodo al siguiente. A menos que haya localizado una ineficiencia en la red, un cuello de botella o una degradación activa del rendimiento de la red, es poco probable que complete ambas transacciones antes de que el comerciante vea las dos mitades del gasto doble.

Una contramedida efectiva sería que el comerciante introdujera un breve retraso entre el momento en que detecta su transacción de confirmación 0 y el momento en que le da acceso al artículo o servicio comprado. Digamos que ejecuta un gasto doble perfectamente sincronizado. El comerciante ve su transacción y espera 60 segundos. 60 segundos es mucho tiempo para que las transacciones no se propaguen por la red. Si en algún momento de esos 60 segundos el comerciante ve la "otra" transacción, usted ha fallado. A diferencia de otras formas de fraude, perderá los fondos ya que su gasto doble es irrevocable. Solo será suerte en qué comerciante se le paga.

Además, muchas transacciones no son irreversibles. El software que tiene una clave de licencia puede tener la clave de licencia revocada. Muchas tarjetas de regalo pueden denunciarse como robadas para congelar los fondos. Cualquier sitio basado en suscripción le otorgaría como máximo unos segundos de servicio antes de interrumpirlo. Los productos que requieren entrega física nunca se enviarán lo suficientemente rápido como para ejecutar un gasto doble.

El riesgo de una doble velocidad de confirmación 0 es bajo, pero la seguridad se puede mejorar mediante el diseño de "supernodos" ultrarrápidos de baja latencia. Un proveedor de servicios podría configurar una red de nodos de Bitcoin en todo el mundo con enlaces de baja latencia entre ellos. Cada uno de estos nodos ejecutaría una versión modificada de bitcoind para maximizar la cantidad de conexiones, estableciendo miles o incluso decenas de miles de conexiones entre pares. No importa dónde se originen las dos mitades del gasto doble, serían solo unos pocos saltos hasta un súper nodo.

Si un comerciante solo acepta transacciones de la red de supernodos, no podrá completar el gasto doble. O bien la red ha visto ambas transacciones y se ha detectado el gasto doble o no lo han hecho, en cuyo caso uno de los comerciantes no dará acceso al artículo comprado.

Realmente no tomaría mucho trabajo solo demanda. Mapee la red Bitcoin existente y encuentre ubicaciones para servidores en diversas partes de la red (por ejemplo, servidor en Hong Kong, Reino Unido, costa este de EE. UU., costa oeste de EE. UU., Alemania, Brasil). Configure esos nodos para crear una gran cantidad de conexiones a pares en la red y luego transmita esas transacciones entre sí rápidamente. Actualmente no hay suficiente demanda para justificar el costo, pero algún día estos nodos podrían ser el equivalente a la red troncal de Internet para la red Bitcon.
Bueno, supongo que básicamente uno podría configurar todo en Amazon EC2 con un mínimo esfuerzo. Costoso, pero rápido de configurar.

Lo que está olvidando es que los comerciantes que aceptan transacciones con cero confirmaciones ya se defenderían contra este ataque utilizando métodos bien conocidos. La defensa principal es monitorear la red de Bitcoin en múltiples puntos, lo más cerca posible de los grupos de minería más grandes. El comerciante solo considera válida una transacción si la ve en la gran mayoría de sus puntos de sondeo. Y, por supuesto, si ven una transacción conflictiva en cualquier punto de sondeo, la rechazan (hasta que/a menos que obtenga confirmaciones).

Es por eso que el ataque de Finney fue tan impactante. En general, se creía que esto era suficiente defensa. En mi opinión, todavía es suficiente para transacciones de bajo valor, digamos menos de $250 o equivalente. Al menos, esa es mi opinión hasta que veamos un ataque exitoso de doble gasto contra un comerciante que usa defensas razonables.

¿Cómo llegas al número de $250? Iba a publicar una pregunta sobre cómo calcular esto y encontré tu respuesta.
Puede ser más alto ahora. El número se basa en el riesgo que corre un atacante: el riesgo de perder el bloque minado. Solo tenga cuidado, la defensa principal no es suficiente, también necesita otras. Por ejemplo, la tarifa de transacción debe ser adecuada.
Tengan paciencia conmigo. ¿Cómo se arriesga a perder un bloque un atacante de gasto doble, no un atacante del 51 %? No es necesariamente un minero. Puedo enviar las mismas monedas a 10 direcciones y tengo 9 de ellas, solo 1 es un comerciante al que estoy tratando de estafar. ¿No hay un 90 % de posibilidades de que siga teniendo las monedas? Si el comerciante vende un bien irreversible con 0 confirmaciones, está en problemas. ¿O es él? Iluminame :)
@AntonAnsgar Eso no funcionará porque tan pronto como el comerciante vea una transacción en conflicto, no emitirá los productos. No puede lograr que el 90% de los mineros vean la transacción y aun así se la oculten al comerciante. Entonces, el atacante tendrá que extraer su propio bloque con la transacción en conflicto, retenerlo hasta que el comerciante libere los bienes y luego liberar el bloque con la transacción en conflicto. (Suponemos que el comerciante usa todas las defensas razonables contra los gastos dobles, excepto esperar una confirmación).
Todas las defensas razonables incluyen conectarse a suficientes nodos y tener suficiente retraso antes de aceptar el pago para que la probabilidad de no ver las transferencias en conflicto se vuelva insignificante. Como se sugiere en la primera respuesta. Necesito aprender más sobre cómo mantener un bloque minado para comprender la parte de minería de bloques de su respuesta, pero creo que obtengo la parte de gasto doble de confirmación 0. Muchísimas gracias.
@AntonAnsgar Introduce " Finney attack " en tu motor de búsqueda favorito.