Nonce adalah singkatan dari “Number used once”. Dalam kriptografi dan protokol komunikasi, istilah ini merujuk pada angka acak atau semu-acak yang dihasilkan untuk memastikan keunikan komunikasi. Karakteristik utama nonce meliputi:
• Keunikan: Sesuai namanya, angka ini hanya digunakan sekali dalam satu komunikasi terenkripsi dan tidak pernah dipakai ulang.
• Ketidakpastian: Dalam konteks kriptografi, nonce harus bersifat acak agar penyerang tidak bisa menebak nilainya.
Pada mekanisme Proof of Work (PoW) Bitcoin, nonce adalah satu-satunya variabel yang dapat diubah secara manual oleh penambang saat menghitung hash. Penambang tidak dapat mengubah data transaksi; mereka harus terus mencoba nilai nonce berbeda dan menghitung ulang hash setiap kali. Ketika penambang menemukan nonce yang menghasilkan hash blok sesuai tingkat kesulitan, nonce tersebut menjadi bukti kerja.
Proses ini mirip dengan membeli tiket lotere. Data blok adalah nama Anda, dan nonce adalah angka acak yang Anda pilih. Anda terus mengganti angka (nonce) hingga Anda menang (memenuhi tingkat kesulitan hash).
Di Ethereum, nonce memiliki dua fungsi utama, dengan account nonce sebagai yang paling umum:
Tujuan utama nonce adalah memperkuat keamanan dan integritas sistem:
• Pencegahan Replay Attack: Ini adalah fungsi paling mendasar dari nonce. Penyerang dapat mencegat komunikasi yang valid dan mencoba mengirim ulang untuk memperoleh akses tidak sah. Nonce memastikan bahwa, meski dicegat, server akan menolak permintaan karena nomor tersebut sudah kadaluarsa.
Hal ini serupa dengan nomor seri pada cek. Jika seseorang mencairkan cek nomor #001, bank akan membatalkan nomor tersebut. Walaupun cek tersebut disalin, tetap tidak dapat dicairkan kembali.
• Jaminan Keaslian Data: Dengan menyertakan nonce, penerima dapat memverifikasi bahwa data dihasilkan secara real-time, bukan hasil pengulangan informasi lama. Ini mencegah penyerang menggunakan rekaman sesi sebelumnya untuk memalsukan identitas.
• Peningkatan Ketidakpastian: Nonce menambahkan variabel dalam proses enkripsi, sehingga jauh lebih sulit bagi penyerang untuk menganalisis pola dan menembus sistem.
Berdasarkan metode pembuatan dan kebutuhan aplikasi, nonce umumnya diklasifikasikan menjadi dua kategori:
• Random Nonce: Dihasilkan menggunakan cryptographically secure pseudo-random number generator (CSPRNG), memberikan entropi dan ketidakpastian tinggi. Sering digunakan pada tanda tangan digital dan skema enkripsi tingkat lanjut.
• Sequential Nonce: Dibuat dengan menaikkan penghitung. Walaupun kurang tidak pasti, tetap menjamin keunikan mutlak dan cocok untuk mekanisme otentikasi.
Penggunaan nonce mencakup berbagai skenario—dari aktivitas web harian hingga transaksi mata uang digital, serta beragam protokol keamanan dan teknologi baru. Logika utamanya selalu berfokus pada keunikan dan ketidakpastian.
• Manajemen Identitas dan Otentikasi: Pada HTTP Digest Authentication, Single Sign-On (SSO), dan Two-Factor Authentication (2FA), nonce digunakan untuk memvalidasi identitas pengguna dan memastikan keaslian permintaan.
• Protokol Kriptografi dan Tanda Tangan Digital:
◦ Selama SSL/TLS handshake, klien dan server saling bertukar nonce untuk memverifikasi identitas.
◦ Pada algoritma seperti AES-GCM, nonce berfungsi sebagai Initialization Vector (IV), memastikan plaintext yang sama tidak menghasilkan ciphertext yang identik.
• Blockchain dan Distributed Ledger
Ini merupakan aplikasi nonce yang paling menonjol saat ini, mencakup “siapa yang berhak mencatat transaksi” dan “urutan transaksi.”
Contohnya, pada penambangan Proof of Work (PoW): Di Bitcoin, nonce adalah field 32-bit. Penambang terus mengubah angka ini hingga hash header blok lebih kecil dari tingkat kesulitan target.
Pada manajemen akun Ethereum: Setiap akun Ethereum memiliki nonce yang terus bertambah. Selain mencegah replay attack (pengiriman transaksi yang sama dua kali), hal ini juga memungkinkan pengguna untuk “mengganti” atau “membatalkan” transaksi yang tertahan dengan mengirim transaksi baru dengan nonce yang sama dan biaya lebih tinggi.
Walaupun nonce dan nilai hash sering muncul bersama dalam konteks blockchain, keduanya pada dasarnya berbeda:
Nilai hash adalah “sidik jari digital” dari data, ditentukan oleh input dan ukurannya tetap. Sementara nonce adalah variabel sementara yang digunakan untuk mengubah hasil hash.
Dari perspektif waktu, nilai hash berfungsi sebagai identitas tetap untuk satu set data, sedangkan nonce biasanya dibuang setelah satu kali penggunaan.
Jika proses pembuatan atau manajemen nonce bermasalah, sistem menghadapi risiko besar. Serangan umum meliputi:
◦ Nonce Reuse Attack: Penyerang memanfaatkan nonce yang digunakan ulang untuk menembus proteksi kriptografi. Contohnya, pada Juli 2021, protokol lintas-rantai Anyswap Multichain Router V3 menandatangani dua transaksi dengan nilai yang sama (komponen tanda tangan), sehingga penyerang dapat menebak private key dan menyebabkan kerugian hampir $8 juta.
◦ Nonce Prediction Attack: Jika pola pembuatan nonce dapat diprediksi, penyerang dapat memanipulasi proses penambangan atau otentikasi.
◦ Brute-Force Attack: Penyerang mencoba berbagai nilai nonce secara ekstensif untuk menemukan hash yang sesuai. Contohnya, pada 2018, Bitcoin Gold (BTG) mengalami beberapa serangan 51%. Penyerang menyewa daya komputasi besar untuk brute-force nonce, sehingga berhasil mencuri 388.200 BTG dan menyebabkan kerugian sekitar $18 juta.

Sumber screenshot: Bitcoin Gold Explorer
Untuk mencegah serangan tersebut, pengembang dan proyek harus menggunakan algoritma pembuatan acak tingkat tinggi (seperti CSPRNG), menerapkan pemeriksaan keunikan yang ketat, dan secara berkala memperbarui pustaka kriptografi.
Sebagai elemen dasar teknologi kriptografi, sifat “sekali pakai” pada nonce memberikan keamanan yang kuat bagi komunikasi internet kompleks dan distributed ledger. Memahami serta mengimplementasikan mekanisme nonce secara tepat sangat penting untuk menjaga keamanan, transparansi, dan integritas dunia digital.
Bacaan lebih lanjut:





