
Replay attack adalah serangan yang terjadi ketika transaksi atau otorisasi yang sebelumnya valid dikirim ulang ke sistem sehingga dieksekusi kembali. Bayangkan Anda menyalin dokumen yang sudah ditandatangani lalu menyerahkannya di berbagai loket untuk memperoleh cap berkali-kali.
Di blockchain, tanda tangan dibuat menggunakan private key—berfungsi sebagai stempel digital yang menegaskan, “Saya menyetujui tindakan ini.” Jika transaksi yang telah ditandatangani dapat dikenali di konteks lain, maka transaksi tersebut menjadi rentan terhadap replay.
Untuk mencegah duplikasi, blockchain menggunakan pengenal unik yang disebut nonce. Nonce dapat diibaratkan sebagai nomor seri untuk setiap operasi—tidak pernah digunakan dua kali. Sistem hanya menerima nonce yang belum pernah dipakai.
Pada lingkungan lintas rantai atau setelah fork, chainId juga diperlukan. ChainId berfungsi sebagai pengenal jaringan, mengikat transaksi ke rantai tertentu dan mencegah eksekusi ulang di rantai lain.
Replay attack biasanya terjadi ketika sistem tidak menetapkan “konteks” tindakan secara jelas. Konteks meliputi blockchain asal, keberadaan pengenal unik, waktu kedaluwarsa, atau keterkaitan dengan domain atau smart contract tertentu.
Jika tanda tangan hanya membuktikan persetujuan sebuah tindakan—tanpa menyebutkan rantai, aplikasi, atau jangka waktu—siapa pun yang memiliki akses ke tanda tangan tersebut dapat menggunakannya kembali di tempat lain.
Jika aplikasi hanya melacak status “sudah digunakan atau belum” secara lokal atau di cache, bukan secara on-chain, replay attack menjadi lebih mudah terjadi. Setelah fork, jika kedua rantai memakai format transaksi dan nonce yang sama, replay lintas rantai juga dapat terjadi.
Pada replay di rantai yang sama, penyerang mencegat pesan otorisasi atau transaksi khusus dan mengirim ulang di rantai yang sama. Ini sering terjadi ketika “otorisasi tanda tangan offline” tidak memiliki nonce unik atau timestamp kedaluwarsa.
Pada replay lintas rantai, transaksi atau pesan tidak terikat chainId, atau setelah fork, kedua rantai menerima format tanda tangan yang sama. Penyerang dapat menjalankan transaksi valid dari rantai A kembali di rantai B.
Pada lapisan smart contract, jika kontrak tidak melacak ID pesan yang telah diproses atau tidak idempoten (sehingga pemanggilan berulang menghasilkan efek kumulatif), penyerang dapat memicu operasi berkali-kali meskipun hanya satu eksekusi yang diinginkan.
Pada tahun 2016, Ethereum mengalami pemisahan rantai, menghasilkan ETH dan ETC. Karena transaksi awal tidak membedakan antara rantai, risiko replay lintas rantai muncul. EIP-155 diperkenalkan pada 2016 untuk menambahkan chainId pada transaksi, sehingga serangan semacam ini berkurang drastis (referensi: sejarah Ethereum Improvement Proposal).
Pada skenario otorisasi, jika persetujuan berbasis tanda tangan untuk transfer atau batas pengeluaran tidak memiliki waktu kedaluwarsa dan nonce unik, tanda tangan dapat dikirim ulang. EIP-2612 diperkenalkan pada 2020 untuk menstandarkan otorisasi berbasis tanda tangan pada token ERC-20, mewajibkan nonce dan expiry (referensi: Ethereum Improvement Proposal).
Jika bridge lintas rantai dan protokol pesan gagal memberikan pengenal unik dan melacak pesan yang sudah digunakan, replay attack dapat menyebabkan pencetakan atau pelepasan aset berulang. Industri kini mengurangi risiko ini dengan menggunakan ID pesan dan pelacakan status on-chain.
Pertama, periksa isi permintaan tanda tangan. Jika wallet Anda meminta “blind signature” (tanpa detail transaksi, domain, atau informasi rantai yang jelas), risiko replay lebih tinggi.
Kedua, pastikan otorisasi memuat tanggal kedaluwarsa dan nonce unik. Jika salah satu tidak ada, risiko Anda bertambah.
Periksa konteks rantai secara eksplisit. Ketiadaan chainId atau pemisahan domain (seperti pada domain EIP-712) meningkatkan risiko replay di lingkungan berbeda.
Terakhir, waspadai tanda eksekusi berulang yang tidak biasa—seperti otorisasi yang sama digunakan berkali-kali, aset ditransfer berulang dalam waktu singkat, atau pesan identik berdampak di beberapa rantai.
Langkah 1: Ikat transaksi pada konteks rantainya. Gunakan chainId dari EIP-155 untuk membatasi setiap transaksi hanya pada rantai tujuannya dan mencegah replay lintas rantai.
Langkah 2: Berikan setiap otorisasi nonce unik dan waktu kedaluwarsa. Standar seperti EIP-2612 dan Permit2 mewajibkan setiap tanda tangan memuat nonce dan deadline; otorisasi yang telah kedaluwarsa menjadi tidak valid.
Langkah 3: Catat pesan atau nonce “yang sudah digunakan” di smart contract. Setiap pesan harus memiliki ID yang tidak dapat digunakan ulang dan status konsumsinya disimpan on-chain untuk pemrosesan idempoten.
Langkah 4: Gunakan tanda tangan terstruktur sesuai EIP-712. Tanda tangan harus memuat nama domain (verifyingContract, name, version), chainId, dan konten yang mudah dibaca manusia untuk meminimalkan penyalahgunaan dan risiko replay.
Langkah 5: Terapkan validasi dua arah di bridge lintas rantai dan kanal pesan. Verifikasi tidak hanya rantai sumber dan tujuan, tetapi juga keunikan pesan, nomor batch, dan status pemrosesan untuk mencegah eksekusi ulang lewat jalur berbeda.
Langkah 1: Hanya tanda tangan di antarmuka yang menampilkan detail teks yang jelas. Tolak blind signature—pastikan prompt memuat domain, informasi rantai, dan deskripsi tujuan.
Langkah 2: Tetapkan batas otorisasi. Utamakan persetujuan yang dibatasi waktu dan jumlah; cabut izin yang tidak terpakai secara berkala melalui blockchain explorer atau alat manajemen. Saat menarik dana dari exchange seperti Gate, selalu pastikan Anda memilih jaringan dan alamat yang benar agar tidak terjadi kesalahan lintas lingkungan.
Langkah 3: Pisahkan dana dari wallet operasional. Simpan aset utama di hardware wallet atau wallet watch-only; berinteraksilah dengan DApps menggunakan hot wallet dengan dana kecil untuk meminimalkan kerugian akibat otorisasi berulang.
Langkah 4: Gunakan address book dan whitelist. Simpan alamat penerima yang sering digunakan beserta catatan di address book Gate dan aktifkan whitelist penarikan untuk mengurangi risiko kesalahan atau tanda tangan phishing yang menyebabkan pengiriman berulang.
Langkah 5: Pantau aktivitas tidak normal. Jika Anda menemukan transaksi ganda atau otorisasi yang dipicu berulang dalam waktu singkat, segera hentikan operasi, cabut otorisasi, dan periksa keamanan perangkat serta ekstensi.
Replay attack melibatkan pengiriman ulang transaksi atau otorisasi valid—masalah utamanya adalah eksekusi berulang. Double-spending menargetkan pengeluaran aset yang sama dua kali, biasanya melibatkan mekanisme konsensus dan reorganisasi blok—secara fundamental berbeda di tingkat protokol.
Sybil attack menggunakan banyak identitas untuk menyamar sebagai banyak pengguna demi manipulasi voting atau distribusi; ini tidak terkait dengan pengulangan transaksi dan lebih pada penipuan di lapisan identitas. Replay attack terjadi di lapisan transaksi/pesan.
Selain itu, man-in-the-middle attack biasanya memodifikasi data atau rute; replay attack tidak mengubah konten tetapi hanya mengirim ulang data yang identik.
Sejak EIP-155 memperkenalkan chainId pada 2016, replay attack lintas rantai menurun tajam; EIP-2612 (2020) dan Permit2 semakin menstandarkan mekanisme nonce dan expiry untuk persetujuan berbasis tanda tangan. Pada 2025, seiring berkembangnya jaringan multi-chain dan Layer 2, kanal pesan, anti-replay ID, dan desain idempoten menjadi infrastruktur utama.
Account abstraction (misal ERC-4337) mendorong manajemen nonce berbasis domain dan strategi—menggunakan nonce berbeda untuk tiap operasi mengurangi risiko replay dalam satu domain. Bridge lintas rantai kini menekankan verifikasi sumber dan pelacakan pesan unik untuk membatasi peluang eksekusi berulang.
Inti dari replay attack adalah “konten valid dieksekusi ulang di konteks yang salah.” Solusinya adalah memperjelas konteks: pengenal rantai, nonce unik, waktu kedaluwarsa, binding domain—dan selalu mencatat status konsumsi di on-chain. Untuk developer: terapkan standar EIP-155, EIP-712, EIP-2612/Permit2 serta desain idempoten. Untuk pengguna umum: hindari blind signature, gunakan otorisasi terbatas waktu, pisahkan wallet sesuai fungsi, dan aktifkan whitelist di exchange untuk mengurangi risiko. Jika Anda melihat pengulangan abnormal terkait dana, segera hentikan operasi dan cabut otorisasi.
Replay attack tidak langsung mencuri aset Anda, tetapi dapat menyebabkan transaksi berulang yang merugikan. Misalnya, jika Anda mentransfer 100 token di rantai A dan penyerang mengirim ulang transaksi tersebut di rantai B, Anda bisa kehilangan dana di kedua rantai. Pertahanan utama adalah menggunakan wallet yang mendukung verifikasi chain ID dan ekstra hati-hati saat melakukan operasi lintas rantai.
Exchange terpusat seperti Gate memiliki banyak lapisan keamanan bawaan; pengguna reguler menghadapi risiko replay attack yang sangat minim saat trading di platform. Risiko utama muncul saat transfer lintas rantai menggunakan wallet self-custody. Untuk trading spot atau derivatif di Gate, kontrol risiko platform melindungi akun Anda.
Perubahan ekosistem besar (seperti merger rantai atau fork) memang meningkatkan risiko replay attack. Namun, proyek biasanya menerapkan langkah perlindungan seperti memperbarui chain ID lebih awal. Sebagai pengguna, selalu tunggu pengumuman resmi sebelum melakukan operasi lintas rantai saat masa transisi agar tidak menjadi target.
Kebocoran private key sudah merupakan insiden keamanan yang parah. Replay attack memperburuknya dengan memungkinkan penyerang tidak hanya memindahkan aset di satu rantai, tetapi juga mengirim ulang transaksi di banyak rantai—berpotensi menguras semua aset serupa di mana pun. Segera transfer dana Anda ke wallet baru sebagai satu-satunya solusi.
EIP-155 memperkenalkan mekanisme chain ID sehingga setiap transaksi membawa pengenal jaringan unik—mencegah eksekusi di rantai lain. Jaringan Ethereum modern dan rantai kompatibel telah mengadopsi standar ini, membuat sebagian besar replay attack tidak mungkin dilakukan. Memilih wallet yang mendukung EIP-155 adalah cara termudah untuk melindungi diri.


