¿Qué es un ataque de Finney?

¿Qué es un ataque de Finney? Puntos extra por explicar su propósito, los requisitos previos para que sea posible, cómo se puede realizar el ataque y el origen del nombre "Finney attack".

Respuestas (2)

El ataque de Finney lleva el nombre de Hal Finney , quien lo sugirió en este comentario . (Hal resulta ser el primer destinatario de una transacción de Bitcoin y la primera persona en comentar sobre el lanzamiento del código fuente de Bitcoin).

Es un ataque de doble gasto con las siguientes características:

  • Solo funciona si el comerciante acepta transacciones no confirmadas.

  • Sin embargo, aún funciona si el comerciante espera unos segundos para verificar que todos en la red estén de acuerdo en que se le pagó.

  • Requiere que el atacante extraiga y controle el contenido de sus bloques; sin embargo, en teoría puede hacer esto con cualquier hashrate, en particular significativamente menos del 50% del hashrate de la red.

Se procede de la siguiente manera:

  1. El atacante mina bloques normalmente; en el bloque que está tratando de encontrar, incluye una transacción que le devuelve algunas de sus monedas, sin transmitir esta transacción.

  2. Cuando encuentra un bloque, no lo transmite; en cambio, envía las mismas monedas a un comerciante por algún bien o servicio.

  3. Después de que los comerciantes aceptan el pago y brindan el servicio de manera irreversible, el atacante transmite su bloqueo; la transacción que se envía las monedas a sí mismo, incluidas en este bloque, anulará el pago no confirmado al comerciante.

Si el tiempo desde que encuentra el bloque hasta que el atacante envía el pago y el comerciante lo acepta es t, y el tiempo promedio para encontrar un bloque es T, existe una probabilidad de t/T de que se encuentre otro bloque en la red en este tiempo; en este caso, el ataque fallará y el atacante perderá la recompensa en bloque de B.

Esto significa que el coste medio de intentar el ataque es de (t/T) * B; como regla general, el comerciante debe esperar al menos t=V*T/B (V es el valor de la transacción), para asegurarse de que intentar llevar a cabo este ataque contra él no sea rentable; Sin embargo, esto puede no ser suficiente, ya que un atacante ágil puede usar el mismo bloque para múltiples ataques, ganando potencialmente el total de su valor.

Claramente, cuanto menor es el hashrate del atacante, menos oportunidades tiene para realizar el ataque. Si el ataque es para obtener algún bien ilíquido, es difícil hacer coincidir la necesidad de ese bien con la búsqueda de un bloque. Si el ataque es para obtener algo líquido (por ejemplo, intercambiar bitcoins por otro dinero), la oportunidad está siempre presente, pero es probable que el comerciante requiera algunas confirmaciones. Esto hace que el ataque sea difícil de usar en la práctica.

El ataque Finney es una variación de un ataque de doble gasto. El atacante crea dos transacciones: una que acredita a la víctima y otra que se acredita a sí mismo. Mantienen la primera transacción por ahora y proceden a intentar extraer la segunda en un bloque. Cuando tienen éxito (esto puede tomar un tiempo), rápidamente hacen una compra con la primera transacción, obtienen los bienes que compraron y luego liberan el bloque preminado. De esta forma, la primera transacción quedará invalidada, incluso si se propaga por toda la red.

Esta variante del ataque de doble gasto es más difícil de ejecutar (minar un bloque por uno mismo no ha sido fácil durante mucho tiempo), pero es indetectable hasta que se ha ejecutado por completo. La única forma de protegerse contra un ataque de este tipo es exigir al menos una confirmación de la transacción antes de entregar los bienes comprados y exigir más confirmaciones para las transacciones que valen más.

Teniendo en cuenta que la red bitcoin ahora es tan enorme, ¿el ataque de Finney es puramente teórico? ¿Hay algún registro anterior del ataque de Finney que se sospeche o esté ocurriendo?
@Pacerier Por lo que recuerdo, escuché que un grupo de minería usaba esto regularmente contra sitios web de juegos como SatoshiDice. Esencialmente, creas un bloque con una transacción que te acredita a ti mismo. Envía una transacción conflictiva a SD que puede generarle más que la recompensa del bloque. Si pierde, libera el bloqueo y recupera su dinero. Si ganas, descartas el bloque y te quedas con las ganancias.
Wow, ¿entonces SatoshiDice podría estar en bancarrota por actos repetidos de esto?
@Pacerier Sí, a menos que cambien a solo procesar apuestas con 1+ confirmaciones.
Parece extraño que nadie haya atacado a SatoshiDice todavía. Parece ser un objetivo realmente sabroso .
@Pacerier tal vez alguien lo haya hecho, pero tal vez esté ganando suficiente dinero como para que no le importe. me gana
¿Puede explicarme por qué se invalidará la primera transacción? Por ejemplo, tienes 10 monedas. te mueves 3 monedas, y compras otras 3 monedas. No veo ningún conflicto aquí. Gracias.
@hqt Si se envía 3 monedas a sí mismo y vende exactamente las mismas 3 monedas a otra persona, solo se realizará una de esas transacciones. Su objetivo es crear un conflicto y convertirlo en un bloque.
@ThePiachu, por lo que el punto clave es exactly that same 3 coins(parece que cada moneda tiene algo similar como id). ¿Podemos controlar esta acción? Gracias
@hqt Lea sobre transacciones de Bitcoin, TxID, etc. Primero debe comprender cómo funcionan para comprender por qué funciona Finney Attack.
@ThePiachu "Si ganas, descartas el bloque y te quedas con las ganancias". ¿Por qué incluso descartar no podemos quedarnos con ambos, a menos que solo obtengamos dinero ganado después de que se haya confirmado la transacción? Pero el sitio web que ni siquiera ve si la transacción está confirmada y le permite realizar la apuesta, ni siquiera intentará confirmar otra cosa también, ¿verdad?
@SurajJain el bloque que está extrayendo no tiene la transacción. Está destinado a revertir lo que hiciste en caso de que pierdas. De lo contrario, no es un ataque de Finney.
@ThePiachu Quise decir que si gano y me han acreditado dinero, ¿por qué descartar el bloque que contiene la transacción para mí? De esa manera también recuperaré mi dinero que usé en la apuesta, quiero decir, ¿por qué no tirar incluso después de que gane? se quedará con los dos
@SurajJain Está creando un bloque SIN la transacción. Si PIERDE, libera su bloque, cancelando así la apuesta. Si GANA, descarta el bloque y se queda con las ganancias.
¿Después de ganar, verificarían la transacción para confirmarla antes de dar el precio?
Pensé que obtendríamos el precio ganador al instante y luego liberaríamos ese bloque para que también podamos quedarnos con el dinero que gastamos en la apuesta.