Glosario cripto

Ataque de repetición (replay attack)

Definición

Un ataque de repetición reenvía una transacción firmada a otra cadena o bifurcación donde la firma también es válida y mueve fondos sin permiso.

Tras una división de la cadena, ambas redes comparten direcciones, claves y formato de transacción. Si nada las distingue, una transacción firmada para una cadena también es válida en la otra y cualquiera puede copiarla. La víctima quiere enviar monedas en la cadena A y descubre que la misma transferencia se ha ejecutado también en la cadena B.

Esto ocurrió a gran escala tras la división entre Ethereum y Ethereum Classic en 2016, antes de que ninguna de las dos tuviera protección integrada, y algunos usuarios y exchanges perdieron fondos. La solución es la protección contra repetición: Bitcoin Cash añadió un nuevo indicador en el cálculo de las firmas y el EIP-155 hizo que las transacciones de Ethereum incluyan un chain ID para que la firma solo sirva en una red.

El riesgo también aparece en las aplicaciones. Las firmas fuera de la cadena para permisos, órdenes o inicios de sesión necesitan un nonce, una caducidad y un separador de dominio, o pueden reutilizarse en otro contrato u otra cadena. Las auditorías de contratos inteligentes buscan sistemáticamente comprobaciones de repetición ausentes en las funciones basadas en firmas.

Ejemplo

En 2016 un usuario vendió ETH en un exchange tras la bifurcación, pero su envío al exchange se repitió en Ethereum Classic y también mandó sus ETC a la dirección de depósito.

Términos relacionados