¿Cómo prevenir un ataque de repetición entre dos cadenas competidoras?

Después de la reciente bifurcación , nos queda una cadena ganadora y una cadena perdedora mucho más corta . Sin embargo, si está a favor o en contra de la horquilla, aún puede minar y usar una cadena u otra.

Ahora, hay un problema. Supongamos que estoy en la cadena sin bifurcación y creo una transacción, la firmo y la transmito a la red sin bifurcación. Vitalik advirtió a los usuarios que estén atentos a los ataques de repetición:

Si algún usuario continúa interesado en seguir la cadena sin bifurcación, aún debe actualizar, pero ejecutar con la --oppose-dao-forkbandera habilitada, aunque debe tener cuidado con los ataques de reproducción de transacciones y tomar las medidas adecuadas para protegerse contra ellos; los usuarios sin interés en la cadena sin bifurcación no necesitan preocuparse por los problemas de ataques de reproducción de transacciones.

Ahora entiendo que la transacción sería válida en ambas cadenas. ¿Cómo evito que la transacción se transmita en la red pro-fork? ¿Y cómo evito que la transacción sea válida en la cadena pro-fork?

Respuestas (3)

Una guía específica para protegerse contra los ataques de repetición de la bifurcación dura TheDAO , de https://blog.ethereum.org/2016/07/26/onward_from_the_hard_fork

Se recomienda a los usuarios que estén interesados ​​​​en realizar cualquier acción con su ETC, incluida la creación y participación en aplicaciones, la conversión a otro activo, etc., que utilicen el contrato de división en la dirección 0xaa1a6e3e6ef20068f7f8d8c835d2d22fd5116444para mover su ETC a una cuenta separada recién creada para evitar ataques de repetición. ; También alentamos a la comunidad de ETC a considerar la adopción de una bifurcación dura secundaria para cambiar los formatos de las transacciones y hacer que más ataques de repetición sean imposibles. Hasta que eso suceda, una vez que ETH y ETC se "dividan", deben administrarse a través de billeteras separadas.

Para usar el contrato divisor desde el interior de la billetera Ethereum, haga clic en Contratos -> Ver contrato, copie la dirección y el ABI de la página etherscan vinculada anteriormente y haga clic en "Aceptar"; luego, haga clic en el contrato en la pestaña Contratos, seleccione "Escribir en el contrato" y seleccione la función "Dividir". Le pedirá dos direcciones; para el primero, coloque la dirección a la que desea que vaya su ETH (no dude en poner la misma dirección desde la que envía), para el segundo, coloque la dirección a la que desea que vaya el ETC. Asegúrese de probar esto primero con una cantidad muy pequeña de éter para verificar que funciona antes de aumentar la cantidad. Puede usar Ethereum Classic Explorer aquí para verificar que los saldos de ETC se hayan transferido. Puede encontrar una guía más detallada proporcionada por la comunidad aquí.

Una solución general es EIP 155 Protección contra ataques de repetición simple .

Comenzando con Geth 1.5.3 y Parity 1.4.4, implementan EIP 155 para que sus transacciones ETH estén a salvo de un ataque de repetición en ETC. Cree otra cuenta y mueva todos sus ETH a la nueva dirección. No olvide hacer una copia de seguridad de esta nueva cuenta (y no elimine la cuenta anterior ya que tiene su ETC).

Si está utilizando otra billetera, debe verificar si han implementado EIP 155.

La forma fácil y de baja tecnología de hacer esto para ETH mantenido en una cuenta de propiedad externa normal es crear dos direcciones nuevas, una para cada cadena, y enviar una transacción en cada cadena moviendo su ether a una dirección diferente. Una vez hecho esto, cualquier transacción reproducida posterior provendrá de una dirección sin ETH y, por lo tanto, no será válida.

En teoría, es posible que seas víctima de un ataque de repetición mientras intentas hacer esto, y terminarás con el ETH movido a la misma dirección en ambas cadenas. Pero como usted controla esta dirección, puede volver a intentarlo hasta que funcione.

reproducir acosadores. en principio, esto podría continuar hasta que agote todos sus fondos en tarifas.
En teoría podría. Pero solo tienes que tener suerte una vez, mientras que el acosador tendría que tener suerte todas las veces.
No solo teórico: casi todas las transacciones se repiten en ambas cadenas. Sospecho que esto se debe a algunos clientes que se conectan a pares en ambas cadenas y retransmiten transacciones. No son maliciosos, pero el efecto es el mismo.
@Nick, la lógica aquí (y la relacionada con los diversos contratos divididos) es que si puedo llegar a un estado en el que una cadena tiene éter en una cuenta determinada mientras que la otra cadena no, mientras que las transacciones se pueden reproducir, no importará ? - en la cadena donde la cuenta no tiene saldo, la(s) transacción(es) reproducida(s) fallarán. Si es así... En este punto, ¿existen otros riesgos ahora, o en el futuro, o es 100% seguro actuar de forma independiente en cada cadena?
@ThomasClowes Más o menos. Una transacción que intente usar más saldo del que está disponible no se ejecutará en absoluto.