
Um replay attack consiste em submeter novamente uma transação ou autorização previamente válida ao sistema, levando à sua execução repetida. Imagine copiar um documento assinado e apresentá-lo em diferentes balcões para obter múltiplos carimbos.
No universo blockchain, as assinaturas são geradas por chaves privadas—atuando como selos digitais que confirmam: “Aprovo esta ação.” Se uma transação assinada for reconhecida noutros contextos, fica exposta ao risco de replay.
Para evitar duplicações, as blockchains recorrem a um identificador único denominado nonce. O nonce atua como um número de série exclusivo para cada operação—nunca se repete. O sistema apenas aceita nonces que ainda não tenham sido utilizados.
Em ambientes cross-chain ou resultantes de forks, é também indispensável um chainId. O chainId funciona como identificador de rede, associando a transação a uma cadeia específica e impedindo a sua repetição noutra cadeia.
Os replay attacks surgem, tipicamente, quando o sistema não define claramente o “contexto” de uma ação. Esse contexto inclui a que blockchain pertence a ação, se possui um identificador único, se tem data de expiração ou se está associada a um domínio ou smart contract específico.
Se uma assinatura apenas atestar consentimento para uma ação—sem identificar a cadeia, aplicação ou período de validade—qualquer pessoa que tenha acesso a essa assinatura pode reutilizá-la noutro local.
Se uma aplicação regista o estado “usado ou não usado” apenas localmente ou em cache, em vez de o fazer on-chain, os replay attacks tornam-se mais fáceis de executar. De igual modo, após um fork, se ambas as cadeias partilharem formatos de transação e nonces, o replay cross-chain é possível.
Nos replays na mesma cadeia, os atacantes intercetam uma mensagem de autorização ou uma transação especial e submetem-na novamente na mesma cadeia. Isto ocorre frequentemente quando “autorizações de assinatura offline” não incluem nonces exclusivos ou timestamps de expiração.
No caso dos replays cross-chain, as transações ou mensagens não estão vinculadas ao chainId, ou, após um fork, ambas as cadeias aceitam o mesmo formato de assinatura. Um atacante pode executar uma transação válida da cadeia A novamente na cadeia B.
Ao nível dos smart contracts, se estes não registarem os IDs das mensagens processadas ou não forem idempotentes (permitindo que chamadas repetidas tenham efeitos acumulativos), um atacante pode invocar operações múltiplas vezes quando apenas uma execução era pretendida.
Em 2016, o Ethereum sofreu uma divisão de cadeia, originando ETH e ETC. Como as transações iniciais não distinguiam entre cadeias, surgiram riscos de replay cross-chain. O EIP-155 foi introduzido em 2016 para adicionar o chainId às transações, reduzindo drasticamente este tipo de ataques (referência: histórico do Ethereum Improvement Proposal).
Em cenários de autorização, se as aprovações por assinatura para transferências ou limites de gastos não tiverem expiração e nonces únicos, as assinaturas podem ser reapresentadas. O EIP-2612 foi introduzido em 2020 para padronizar a autorização baseada em assinaturas para ERC-20 tokens, exigindo nonce e expiração (referência: Ethereum Improvement Proposal).
Se pontes cross-chain e protocolos de mensagens não atribuírem identificadores únicos nem registarem mensagens consumidas, os replay attacks podem provocar emissões ou libertações repetidas de ativos. Atualmente, o setor mitiga estes riscos recorrendo a IDs de mensagem e registo de estados on-chain.
Em primeiro lugar, analise o conteúdo de qualquer pedido de assinatura. Se a sua wallet apresentar uma “assinatura cega” (sem detalhes claros de transação, domínio ou cadeia), o risco de replay é superior.
Depois, confirme se a autorização inclui data de expiração e nonce único. A ausência de qualquer destes elementos aumenta a exposição ao risco.
Verifique se existe contexto explícito de cadeia. A ausência de chainId ou separação de domínio (como nos domínios EIP-712) eleva o risco de replay em diferentes ambientes.
Por fim, esteja atento a sinais de execuções repetidas anómalas—como a mesma autorização a ser usada múltiplas vezes, ativos transferidos repetidamente num curto espaço de tempo ou mensagens idênticas a produzirem efeitos em várias cadeias.
Passo 1: Vincule as transações ao contexto da respetiva cadeia. Utilize o chainId do EIP-155 para restringir cada transação à cadeia pretendida e evitar replays cross-chain.
Passo 2: Atribua a cada autorização um nonce exclusivo e um tempo de expiração. Normas como o EIP-2612 e Permit2 exigem que cada assinatura inclua nonce e prazo; autorizações expiradas tornam-se inválidas.
Passo 3: Registe mensagens ou nonces “usados” em smart contracts. Cada mensagem deverá ter um ID não reutilizável e o respetivo estado de consumo guardado on-chain para garantir processamento idempotente.
Passo 4: Utilize assinaturas estruturadas de acordo com o EIP-712. As assinaturas devem incluir nome de domínio (verifyingContract, nome, versão), chainId e conteúdo claro e legível, minimizando potenciais usos indevidos e vetores de replay.
Passo 5: Implemente validação bidirecional em pontes cross-chain e canais de mensagens. Valide não só as cadeias de origem e destino, mas também a unicidade das mensagens, números de lote e estado de processamento, prevenindo execuções repetidas por rotas diferentes.
Passo 1: Assine apenas em interfaces que apresentem detalhes textuais claros. Rejeite assinaturas cegas—confirme que o pedido inclui domínio, informação da cadeia e descrição do propósito.
Passo 2: Defina limites para as autorizações. Prefira aprovações com prazo e valor limitado; revogue regularmente permissões não utilizadas através de exploradores de blockchain ou ferramentas de gestão. Ao levantar fundos em plataformas como a Gate, confirme sempre que selecionou a rede e o endereço corretos para evitar incidentes cross-environment.
Passo 3: Separe fundos de wallets operacionais. Guarde os ativos principais em hardware wallets ou wallets apenas de leitura; interaja com DApps utilizando hot wallets de menor valor para minimizar perdas resultantes de autorizações repetidas.
Passo 4: Utilize livros de endereços e whitelists. Guarde endereços de destinatários frequentes com notas no livro de endereços da Gate e ative whitelists de levantamentos para reduzir riscos de operações incorretas ou assinaturas de phishing que conduzam a submissões repetidas.
Passo 5: Monitorize atividade anómala. Se detetar transações duplicadas ou autorizações repetidas num curto espaço de tempo, interrompa imediatamente as operações, revogue autorizações e verifique a segurança do dispositivo e das extensões.
Um replay attack consiste em submeter novamente a mesma transação ou autorização válida—o problema central é a repetição da execução. O double-spending visa gastar o mesmo ativo duas vezes, envolvendo geralmente mecanismos de consenso e reorganização de blocos—são situações distintas ao nível do protocolo.
Um Sybil attack recorre a múltiplas identidades para simular vários utilizadores e manipular votações ou distribuições; não está relacionado com a repetição de transações e incide sobre a camada de identidade. Os replay attacks ocorrem ao nível da transação ou mensagem.
Adicionalmente, os ataques man-in-the-middle costumam alterar dados ou o encaminhamento; já os replay attacks podem não modificar o conteúdo, limitando-se a reenviar dados idênticos.
Desde que o EIP-155 introduziu o chainId em 2016, os replay attacks cross-chain diminuíram drasticamente; o EIP-2612 (2020) e o Permit2 padronizaram ainda mais os mecanismos de nonce e expiração para aprovações por assinatura. Em 2025, com a proliferação de redes multi-chain e Layer 2, canais de mensagens, IDs anti-replay e design idempotente tornam-se infraestruturas essenciais.
A account abstraction (por exemplo, ERC-4337) incentiva a gestão de nonces por domínio e estratégias—usar nonces distintos para operações diferentes reduz o risco de replay dentro do mesmo domínio. As pontes cross-chain dão agora prioridade à verificação da origem e ao rastreio único de mensagens para limitar oportunidades de execução repetida.
A essência de um replay attack é “conteúdo válido ser reexecutado no contexto errado.” A solução passa por clarificar o contexto: chain IDs, nonces exclusivos, datas de expiração, vinculação a domínios—e registar sempre estados consumidos on-chain. Para developers: adotar os standards EIP-155, EIP-712, EIP-2612/Permit2 e design idempotente. Para utilizadores: evitar assinaturas cegas, usar autorizações limitadas no tempo, separar wallets por função e ativar whitelists nas exchanges para mitigar riscos. Se detetar qualquer repetição anómala envolvendo fundos, interrompa imediatamente as operações e revogue autorizações.
Os replay attacks não roubam diretamente os seus ativos, mas podem originar transações repetidas de forma maliciosa. Por exemplo, se transferir 100 tokens na cadeia A e um atacante repetir essa transação na cadeia B, pode perder fundos em ambas as cadeias. A principal defesa é utilizar wallets que suportem verificação de chain ID e ter especial atenção em operações cross-chain.
Exchanges centralizadas como a Gate dispõem de múltiplas camadas de segurança; os utilizadores regulares enfrentam risco mínimo de replay attacks ao negociar na plataforma. O principal risco surge em transferências cross-chain com wallets de autocustódia. Para trading spot ou de derivados na Gate, os controlos de risco da plataforma salvaguardam a sua conta.
Mudanças significativas no ecossistema (como fusões ou forks de cadeias) aumentam efetivamente o risco de replay attacks. Contudo, os projetos implementam normalmente medidas de proteção, como a atualização prévia dos chain IDs. Como utilizador, aguarde sempre os anúncios oficiais antes de realizar operações cross-chain durante períodos de transição para evitar ser alvo de ataques.
Uma private key comprometida já é um incidente de segurança grave. Os replay attacks agravam o cenário, permitindo ao atacante não só movimentar ativos numa cadeia, mas também repetir transações em várias cadeias—podendo esgotar todos os ativos semelhantes em qualquer lado. Transfira imediatamente os seus fundos para uma nova wallet, pois é a única solução.
O EIP-155 introduziu o mecanismo de chain ID, fazendo com que cada transação transporte um identificador de rede único—impedindo a sua execução noutras cadeias. As redes Ethereum modernas e cadeias compatíveis adotaram este standard, tornando a maioria dos replay attacks inviáveis. Escolher uma wallet compatível com EIP-155 é a forma mais simples de proteção para os utilizadores.


