Ataques de Replay e EIP-155: Segurança de Transações em Redes EVM e Hard Forks
A Ilusão Entre Redes: Quando uma Assinatura Vale Duas Vezes
No ecossistema de ativos digitais, as assinaturas criptográficas são sinónimo de certeza absoluta. Quando o teu administrador financeiro assina uma transferência de 100.000 € através de uma carteira de hardware, o algoritmo matemático prova à rede que a tua empresa aprovou expressamente aquele movimento.
No entanto, há uma armadilha estrutural grave sempre que duas redes diferentes partilham o mesmo histórico de contas, as mesmas moradas e as mesmas regras matemáticas: o Ataque de Replay (Repetição de Transações).
Imagina o que aconteceria na tua empresa: a tua tesouraria tem saldos na rede principal Ethereum. No seguimento de uma cisão da rede (um hard fork) ou do lançamento de uma nova rede compatível, a tua conta passa a existir de forma idêntica nessa cadeia secundária, com o mesmo saldo e o mesmo número sequencial de transação (nonce). Fazes um pagamento legítimo de 100.000 € a um fornecedor na rede principal. Um hacker que esteja a vigiar o tráfego da rede copia o código da transação e reenvia-o exatamente igual para a rede bifurcada.
Como a tua assinatura digital é autêntica e válida, a rede secundária aceita a operação e transfere outros 100.000 € dos teus fundos para o endereço de destino—sem que ninguém na tua empresa tenha tocado numa tecla.
ANATOMIA DE UM ATAQUE DE REPLAY ENTRE REDES BIFURCADAS
- A TUA EMPRESA ASSINA UMA TRANSAÇÃO LEGÍTIMA: Ordem: “Pagar 1.000 Tokens da Tesouraria ao Fornecedor X”
- TRANSAÇÃO PROCESSADA NA REDE ETHEREUM ORIGINAL (REDE A):
- A rede valida a assinatura digital
- O fornecedor recebe os 1.000 Tokens com sucesso
- UM ATACANTE COPIA OS BYTES DA TRANSAÇÃO NO AR
- A MESMA TRANSAÇÃO É REPETIDA NA REDE SECUNDÁRIA (REDE B):
- A Rede B tem as mesmas carteiras, saldos e histórico!
- A assinatura matemática é considerada 100% autêntica!
- A Rede B transfere mais 1.000 Tokens sem a tua autorização!
- RESULTADO: Pagamento duplicado e prejuízo direto para a empresa!
Na WebXtek e nas revisões de código de tesouraria que desenvolvemos com a Luso Digital Assets, garantimos que todos os fluxos de pagamento da tua empresa estão vinculados a identificadores de rede únicos, eliminando este risco.
O Precedente Histórico: O Caso Ethereum Classic e The DAO
Para compreenderes como este problema foi resolvido, tens de recordar o momento marcante de 2016: o hard fork do Ethereum na sequência do ataque ao projeto The DAO.
Quando a comunidade decidiu bifurcar a cadeia para devolver os fundos aos lesados, nasceram duas redes paralelas: o Ethereum (ETH) e o Ethereum Classic (ETC). No bloco exato da divisão, cada carteira no Ethereum passou a ter uma cópia perfeita no Ethereum Classic, com a mesma chave e exatamente o mesmo número de transação (nonce).
No desenho original do protocolo, uma transação era composta por apenas seis variáveis:
$$\text{Tx} = [\text{nonce}, \text{gasPrice}, \text{gasLimit}, \text{to}, \text{value}, \text{data}]$$
Repara na ausência fatal: não existia nenhum campo a indicar a que rede aquela ordem pertencia.
Grandes corretoras mundiais começaram a processar levantamentos normais de clientes na rede nova (ETH). Minutos depois, utilizadores maliciosos pegavam no código desse levantamento e publicavam-no na rede antiga (ETC). As corretoras acabaram a pagar duas vezes pelo mesmo pedido, sofrendo perdas de milhões de euros decorrentes de ataques de repetição pura.
A Solução Técnica: EIP-155 e a Introdução do ChainID
Para erradicar definitivamente este perigo, a comunidade de desenvolvimento aprovou a proposta EIP-155 (Simple Replay Protection).
A inovação foi simples e genial: introduzir um número identificador exclusivo para cada rede, o chamado ChainID (por exemplo, 1 para a rede Ethereum, 61 para o Ethereum Classic, 137 para a Polygon, 8453 para a Base).
COMO A EIP-155 PRENDE A ASSINATURA A UMA SÓ REDE
- DADOS DA TRANSAÇÃO ANTES DE SEREM ASSINADOS (NORMA EIP-155): [nonce, gasPrice, gasLimit, to, value, data, CHAIN_ID, 0, 0]
- CÁLCULO DA ASSINATURA ECDSA: PAR
(r, s, v) - FÓRMULA MATEMÁTICA PARA CALCULAR O PARÂMETRO
v: v = {0, 1} + (CHAIN_ID * 2) + 35 - EXEMPLO NA REDE ETHEREUM PRINCIPAL (CHAIN_ID = 1): v = 0 + (1 * 2) + 35 = 37 (ou 38)
- EXEMPLO NA REDE ETHEREUM CLASSIC (CHAIN_ID = 61): v = 0 + (61 * 2) + 35 = 157 (ou 158)
- O QUE ACONTECE QUANDO ALGUÉM TENTA REPETIR A TRANSAÇÃO?
- Se o atacante reenviar uma transação com v=37 na rede Classic:
- Os validadores calculam a chave pública usando o ChainID 61
- A matemática não bate certo e a assinatura dá erro!
- A TRANSAÇÃO É REJEITADA IMEDIATAMENTE PELOS NÓS DA REDE!
Como o ChainID passa a fazer parte dos dados antes do cálculo do hash da assinatura, o parâmetro matemático v fica intimamente ligado àquela rede específica. Se alguém tentar repetir a ordem noutra blockchain, a verificação da assinatura falha e a rede rejeita o bloco de imediato, tal como documentado nas especificações técnicas em Ethereum.org.
O Perigo Moderno: Mensagens EIP-712 e Autorizações Off-Chain
Apesar de as transações nativas estarem blindadas pela EIP-155, hoje em dia as finanças descentralizadas utilizam muitas autorizações assinadas fora da cadeia (mensagens sem gás e licenças de movimentação de tokens como o padrão EIP-2612 Permit).
Se a tua empresa assinar uma autorização digital e o contrato inteligente não tiver sido bem programado, o ataque de replay pode voltar a acontecer!
Para resolver isto, deves garantir que todos os contratos utilizam o padrão EIP-712, que exige a definição de um separador de domínio criptográfico:
bytes32 SEPARADOR_DOMINIO = keccak256(
abi.encode(
keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
keccak256(bytes("CofreTesourariaEmpresa")),
keccak256(bytes("1")),
block.chainid, // Vincula a assinatura à rede atual!
address(this) // Vincula a assinatura a este contrato exato!
)
);
Se o programador se esquecer de incluir o block.chainid ou o endereço do contrato (address(this)), uma assinatura feita na rede de testes ou numa rede secundária de baixas taxas pode ser copiada e executada na rede principal, esvaziando as permissões da tua empresa. A Autoridade Europeia dos Valores Mobiliários e dos Mercados (ESMA) recomenda atenção acrescida a este tipo de autorizações em auditorias de conformidade.
Como Blindares as Operações da Tua Empresa Contra Ataques de Replay
Para que a tua organização transacione com total tranquilidade em ambientes multi-rede:
- Exige Bibliotecas com Suporte EIP-155: Garante que todos os softwares, scripts de automatização e sistemas ERP utilizam bibliotecas modernas que incluem o
ChainIDem cada envio. - Audita Mensagens EIP-712: Nos smart contracts desenvolvidos para a tua empresa, certifica-te através da nossa arquitetura web3 blockchain de que todos os separadores de domínio incluem o identificador da rede e o endereço do contrato.
- Cuidado com Hard Forks Inesperados: Se uma rede onde tens ativos sofrer uma cisão polémica, suspende os pagamentos automáticos durante as primeiras 24 horas até confirmares que as duas cadeias têm identificadores diferentes.
- Separa os Cofres em Redes Diferentes: Não uses a mesma chave ou morada para gerir operações críticas em redes Layer 1 e Layer 2; utiliza carteiras distintas configuradas através da nossa plataforma segura.
- Agenda Revisões de Segurança Periódicas: Recorre à nossa consultoria técnica para testares as tuas rotinas de assinatura e impedires surpresas desagradáveis entre redes.
Com estas precauções técnicas, a tua empresa assegura que cada aprovação de fundos tem efeito exclusivamente onde e quando a administração assim o determinou.
Na prática, aplicas exatamente estes padrões operacionais em setores exigentes como plataformas de corretagem cripto e web3 e wallets web3 e gateways de pagamento. Quando alinhas a tua estrutura através de desenvolvimento web3 & blockchain e consultoria técnica antes de construir, transformas boas práticas técnicas numa vantagem competitiva real e mensurável para o teu negócio.
[+] [ INDEX_DIRECTORY ] 13 tópicos ▼
- A Ilusão Entre Redes: Quando uma Assinatura Vale Duas Vezes
- O Precedente Histórico: O Caso Ethereum Classic e The DAO
- A Solução Técnica: EIP-155 e a Introdução do ChainID
- O Perigo Moderno: Mensagens EIP-712 e Autorizações Off-Chain
- Como Blindares as Operações da Tua Empresa Contra Ataques de Replay
- Autor
- Perguntas Frequentes
- O que é um ataque de replay em redes blockchain?
- Como é que a divisão histórica entre Ethereum e Ethereum Classic causou prejuízos?
- Como é que a norma EIP-155 eliminou os ataques de repetição?
- Ainda podem ocorrer ataques de replay em 2026 nas redes EVM modernas?
- Nós Relacionados
- Sequência do Caminho
Perguntas Frequentes
O que é um ataque de replay em redes blockchain?
É um golpe onde uma transação legítima assinada para uma rede é copiada por um atacante e reenviada para outra cadeia bifurcada ou rede Layer 2 sem o teu consentimento.
Como é que a divisão histórica entre Ethereum e Ethereum Classic causou prejuízos?
Como as transações antigas não identificavam a rede de destino, uma assinatura enviada na cadeia ETH era igualmente válida na rede ETC, permitindo duplicar levantamentos.
Como é que a norma EIP-155 eliminou os ataques de repetição?
A EIP-155 introduziu o identificador numérico `ChainID` nos dados da transação antes de serem assinados, tornando a assinatura matematicamente inválida noutra rede.
Ainda podem ocorrer ataques de replay em 2026 nas redes EVM modernas?
Sim, especialmente em mensagens de autorização fora da cadeia (como autorizações EIP-712/EIP-2612) se os programadores se esquecerem de incluir o `chainId` no contrato.
[ RELATED_NODES ]
> INICIAR_PROJETO
Precisa de um website que transmita confiança, apareça na pesquisa e dê mais força à sua presença digital? Comece a conversa aqui.