¿Cómo se pone al día la 'cadena secreta' con la cadena real en el ataque de largo alcance?

Estoy tratando de profundizar en Casper y una de las cosas que siguen surgiendo es el ataque de largo alcance en PoS. Entiendo el ataque a un alto nivel: básicamente, retrocedería una gran cantidad de bloques donde tenía una gran participación en la red y comenzaría a forjar bloques de tal manera que cuando llegara a la altura de la cadena principal, tendría una gran cantidad de la moneda y hacerse cargo de la cadena.

Vi una pregunta similar aquí con respecto al ataque cuya respuesta citó el siguiente extracto del blog de Ethereum:

En una prueba de participación implementada de manera ingenua, suponga que hay un atacante con el 1% de todas las monedas en el bloque de génesis o poco después. Ese atacante luego inicia su propia cadena y comienza a minarla. Aunque el atacante se encontrará seleccionado por producir un bloque solo el 1% de las veces, puede producir fácilmente 100 veces más bloques y simplemente crear una cadena de bloques más larga de esa manera.

La pregunta que tengo con respecto a esta cita es ¿cómo exactamente la cadena secreta superaría a la cadena principal ? Según tengo entendido, la forma general de minar un bloque en PoS 3 es resolver esta ecuación:

hash(kernel) ≤ target × balance of UTXO

Donde el kernel se deriva de lo siguiente:

  • nTimeTx: marca de tiempo actual (incrementada cada segundo)
  • nTxPrevTime: Marca de tiempo de la UTXO
  • nPrevoutNum: Número de salida de la UTXO
  • nTxPrevOffset: Desplazamiento de la UTXO dentro del bloque
  • nTimeBlockFrom: marca de tiempo del bloque que proporcionó el UTXO
  • nStakeModifier: una cadena de 64 bits sembrada de la cadena de bloques

¿Cómo puedes manipular esto para extraer bloques más rápido que la cadena principal? ¿Serán las marcas de tiempo?

¡Gracias!

EDITAR: Después de pensar un poco más en esto, no estoy seguro de si este ataque es realmente factible... parece puramente teórico. Mi lógica es la siguiente: supongamos que el atacante creó su propia cadena con incluso el 50% del total de monedas de la 'cadena principal'. Como está en su propia cadena, tendrá el 100 % del total de monedas apostadas en su propia cadena. Con el 100% del total de monedas en su propia cadena, sin duda será el único acuñador en la cadena secreta y será seleccionado para la mitad del total de "oportunidades de acuñación" posibles en la cadena.

De hecho, debido a que es el único participante en línea en su propia cadena, acuñará cada bloque, pero el problema es que el atacante todavía está sujeto a 1 transacción por UTXO por segundo, por lo que no puede producir bloques más rápido. Ciertamente, puede producir una cadena de bloques masiva mucho más grande que la cadena principal porque el tiempo para que él acelere durante un par de años es solo un par de segundos en la simulación, pero el problema será que la marca de tiempo principal podría ser el doble de larga que la cadena principal. (quizás un año), y los clientes simplemente no aceptarán una cadena cuya cabeza está en el futuro.

Si alguien tiene alguna idea adicional o tiene otro enfoque para pensar sobre el problema, ¡lo agradecería! Encontré que esta fuente es bastante buena.

Respuestas (2)

Como señaló el propio autor del artículo citado :

Originalmente, pensé que este problema era fundamental, pero en realidad es un problema que se puede solucionar. Una solución, por ejemplo, es tener en cuenta que cada bloque debe tener una marca de tiempo, y los usuarios rechazan las cadenas con marcas de tiempo que están muy por delante de las suyas. Por lo tanto, un ataque de largo alcance tendrá que encajar en el mismo período de tiempo, pero debido a que involucra una cantidad mucho menor de unidades monetarias, su puntaje será mucho más bajo.

Entonces, su conclusión sobre la imposibilidad de la 'cadena secreta' con solo el 1% de participación superando a la cadena principal es correcta, dado que los clientes validan las marcas de tiempo del bloque (no pueden ir demasiado lejos en el futuro).


El término ataque de largo alcance puede referirse a diferentes cosas según la criptomoneda y el algoritmo elegido. La fórmula que incluiste en tu pregunta.

hash(kernel) ≤ target × balance of UTXO

no se aplica a Ethereum y Casper ya que no hay UTXO allí.

El ataque de largo alcance preprogramado descrito en el documento técnico de NeuCoin que se deriva del hecho de que el modificador de apuesta de una apuesta dada es estático y debido al uso de la edad de la moneda en la ecuación minera, tampoco se aplica a Ethereum.


De ninguna manera soy un experto en PoS, pero intentaré esbozar la lógica detrás del ataque de largo alcance descrito en On Stake por V. Buterin que funcionará incluso con menos del 50% de participación en la cadena 'no secreta':

  1. Si nos dan el algoritmo PoS más simple donde cada cuenta tiene una cierta posibilidad por segundo de generar un bloque válido. Esta posibilidad se describe con la fórmula:

SHA256 (prevhash + dirección + marca de tiempo) <= 2^256 * saldo / diferencia

  1. Problema "No hay nada en juego": un minero racional elegirá minar en 2 cadenas o más siempre que haya una oportunidad, para maximizar su valor esperado.

    • Los mineros que extraen solo en una sola cadena se llaman altruistas. Los mineros que extraen tantas cadenas como pueden (racionales) se denominan no altruistas.
    • Un atacante solo necesita superar a los mineros altruistas para realizar un ataque, por lo que es posible realizar este ataque incluso con menos del 50 % de participación (siempre que las participaciones de los mineros no altruistas y del atacante sumen el 51 %).
  2. Para superar este problema , se puede utilizar el algoritmo Slasher . Si un minero crea un bloque en 2 cadenas, será castigado. Para eso, cualquiera puede enviar el bloque de la otra cadena a la cadena original para robar la recompensa minera y penalizar al votante doble.

    • Los mineros tendrán que hacer depósitos de seguridad por lo que hay forma de penalizar en caso de doble votación
    • El minero tiene que tener el derecho de retirar el depósito de seguridad eventualmente, y una vez que se retira el depósito, ya no hay ningún incentivo para no votar en una bifurcación de largo alcance que comience muy atrás en el tiempo usando esas monedas ( referencia ). Por ejemplo, después de 1000 bloques, el minero tendrá derecho a retirar su depósito.
  3. El ataque de largo alcance es cuando un minero comienza a extraer una cadena lateral 1000 o más bloques hacia atrás.

    • Otros mineros no altruistas también extraerán en esa cadena, ya que no hay castigo y el valor esperado es mayor.
    • De hecho, incluso se espera ver un mercado negro de personas que venden sus antiguas claves privadas, que culmina con un atacante que obtiene acceso sin ayuda a las claves que controlaron más del 50% del suministro de moneda en algún momento de la historia y realiza el ataque ( referencia ).

La solución, como señaló el autor, es introducir una regla en cada cliente para no aceptar bifurcaciones que se remontan a más de 1000 bloques. El problema es, sin embargo, qué sucede cuando un nuevo usuario entra en escena. Luego, considera los sistemas de gráficos sociales y PoW/PoS híbridos como una posible solución.


Con el artilugio de finalidad descrito en el Papel Malva :

incluso las colusiones mayoritarias no pueden realizar ataques del 51% de mediano o largo alcance sin destruir todo su éter.

Gracias por su respuesta. Sé que esta pregunta no es muy particular de Ethereum, ya que no sufre este problema, pero fue difícil encontrar muchos recursos técnicos autorizados sobre este tema. Te recompensaré por tu esfuerzo, pero como la respuesta carece de detalles técnicos sobre el ataque, no puedo aceptarla. Escribiré mi propia respuesta con los detalles técnicos.

Después de un largo camino de investigación, ahora entiendo más claramente este ataque. En primer lugar, me gustaría señalar que este ataque no se aplica a Ethereum, ya que Ethereum es una prueba de trabajo, ni se aplica a Ethereum con Casper FFG superpuesto en la parte superior, ya que en realidad sigue siendo una prueba de trabajo como mecanismo de propuesta. .

Primero, para que quede más claro, el ataque de largo alcance descrito en la pregunta es un tipo específico de ataque de largo alcance. Probablemente sea mejor llamarlo el ataque de "revisión del historial con claves privadas antiguas". Hay otros ataques que involucran 'largo alcance', como el ataque de largo alcance preprogramado descrito en el documento técnico de NeuCoin, pero ese es un largo alcance en el futuro real : este es en el pasado.

Los pasos reales del ataque son los siguientes:

  1. El atacante obtiene el control de las claves privadas antiguas en la cadena de bloques a cierta altura N-1000000en el pasado y el valor total de las monedas en poder del atacante es una fracción qde la cantidad total de monedas que actualmente se están apostando en la cadena principal . Nes la altura actual de la cadena principal.
  2. El atacante modifica a su cliente para cambiar a su propia cadena de bloques secreta que comienza N-1000000en el pasado. Deshabilita cualquier conexión de cliente entrante o saliente.
  3. El atacante comienza a acuñar bloques, copiando las transacciones de cada bloque de la cadena principal en orden. La idea es que el historial sea exactamente el mismo porque cada bloque tendrá exactamente las mismas transacciones, pero ella habrá extraído todos los bloques ya que no hay nadie más en la cadena. Tenga en cuenta que ella podría incluir sus propias transacciones nuevas, pero en realidad esto no tiene ningún propósito ya que de todos modos no puede ganar más que qel total de monedas. Entonces, lo que hará es tomar todas las transacciones del bloque N-1000000+1en la cadena principal, ponerlas en su bloque N-1000000+1en la cadena secreta e intentar acuñarla probando una hora t+1, donde testá la marca de tiempo en UNIX ticks de bloque N-1000000. Si el tiempo t+1no funciona, ella lo intentará.t+2y así. Vea la ecuación en la pregunta para saber qué está tratando de resolver.
  4. Eventualmente, encontrará un tiempo t+sen segundos donde bloqueará las N-1000000+1mentas en la cadena secreta. Obtendrá la recompensa de la apuesta de monedas de eso.
  5. Repita el paso 3 para cada bloque hasta la altura N+ndonde nhay una cantidad de bloques más allá de la cabeza de la cadena principal (esto es posible porque ella solo puede tomar transacciones pendientes en el mempool de la cadena principal y ponerlas en su cadena secreta). En este punto, habrá obtenido todas las recompensas de monedas por acuñar los 1000000 bloques. Ahora puede enviar su cadena de bloques secreta a la red y, siempre que los clientes la acepten, la cadena será válida y habrá "reescrito el historial" de manera efectiva.

La ejecución real de los pasos 3 a 5 puede llevar solo un par de minutos en un script y, sinceramente, probablemente menos. Sin embargo, el problema es que este ataque no es factible debido a que el atacante todavía está sujeto a la regla de un hash por UTXO por segundo. A pesar de que puede simular todo en un par de minutos, una vez que bloquee N+n, probablemente estará en un momento t+Ten el que Tes muy grande y t+Testá significativamente más lejos que el momento actual. Podría estar dos años por delante en términos de marcas de tiempo para el jefe de su cadena y la regla de deriva temporal de los clientes que no aceptan bloques de más de 2 horas en el futuro rechazará la cadena.

Para obtener un poco más de intuición sobre esto, considere si q=1/3, es decir, tiene un tercio de todas las monedas que actualmente se están apostando en la cadena principal. En este caso, acuñará cada bloque de la cadena secreta, pero a una tasa de solo un tercio de la tasa de la cadena principal . Entonces ella 1/3aprovechará las oportunidades para apostar en su cadena secreta y nada más. Efectivamente, se perderá 2/3la oportunidad de apostar en su cadena secreta por la regla de un hash por UTXO por segundo. Probabilísticamente, para ella ponerse al día con la cadena principal en un tiempo t+Tmenor Ta 2 horas es efectivamente cero, y se aproxima a cero a medida que aumenta el lapso de tiempo, es decir, es mucho más imposible con un lapso de tiempo de 2000000.

Entonces, siempre que q > 0.5, se puede realizar el ataque. Dado que el costo de obtener el control de las claves privadas antiguas en el paso 1 es relativamente bajo, el ataque es muy posible, ¿verdad?
No, no es posible. Incluso si q = 0,75, la red principal sigue moviéndose a una velocidad del 100 % si eso tiene sentido, por lo que se mueve un 130 % más rápido que su cadena secreta. Piense en dos cadenas compitiendo en lugar de la configuración de ataque del 51%. Tener más de la mitad del poder de las cadenas principales no es suficiente, debe tener MÁS que TODO el poder de las cadenas principales si eso tiene sentido.