CSPRNG adalah pembangkit bilangan pseudoacak yang aman secara kriptografis. Ia menghitung nilai baru dari keadaan internal rahasia melalui prosedur yang pasti. “Pseudoacak” bukan berarti berkualitas rendah: perhitungannya dapat diulang, tetapi tanpa mengetahui keadaan rahasia, hasilnya seharusnya tidak dapat diprediksi secara praktis. Ini membutuhkan entropi yang cukup—ketidakpastian mengenai masukan dari sudut pandang penyerang—serta penggunaan yang benar di dalam aplikasi.
Bayangkan program yang membuat nilai rahasia untuk dompet. Penyerang mengetahui beberapa keluaran sebelumnya. Pembangkit yang aman tidak boleh membiarkan pengetahuan itu mempermudah tebakan atas nilai lainnya. Syarat ini lebih berat daripada sebaran angka yang terlihat bagus pada grafik. Karena itu, RFC 4086 membedakan deret yang kuat secara kriptografis dari pembangkit biasa untuk simulasi. Hasil uji statistik yang baik pun tidak cukup jika seed, nilai awal yang memulai pembangkitan, dapat ditebak. [1]
Dokumentasi teknis juga memakai istilah DRBG, pembangkit bit acak deterministik. “Deterministik” berarti keadaan dan masukan yang sama menghasilkan keluaran yang sama; karena itu, keadaannya harus tetap rahasia. NIST SP 800-90A Rev. 1 menjelaskan mekanisme tertentu: Hash_DRBG, HMAC_DRBG dan CTR_DRBG. Ini adalah prosedur teknis, bukan tanda mutu bagi setiap program yang menyebut namanya. Penilaian juga harus mencakup konfigurasi, asal entropi dan penerapan sebenarnya di dalam kode. [2]
Kebocoran keadaan menimbulkan dua pertanyaan berbeda. Bisakah penyerang merekonstruksi keluaran rahasia terdahulu? Bisakah ia memprediksi keluaran berikutnya? Perlindungan keluaran lama disebut Backtracking resistance, sedangkan perlindungan keluaran mendatang disebut Prediction resistance. Untuk yang kedua, NIST SP 800-90A mensyaratkan pemasukan entropi baru secara efektif agar hasil baru terpisah dari keadaan yang sudah bocor. Menjalankan perhitungan sekali lagi belum tentu memulihkan keamanan. Memiliki satu perlindungan juga tidak otomatis membuktikan perlindungan lainnya. [2]
Pustaka adalah komponen perangkat lunak siap pakai yang dapat digunakan dompet, tetapi pemanggilannya bisa gagal. Pada OpenSSL 3.5, RAND_bytes() dan RAND_priv_bytes() mengembalikan 1 jika berhasil, 0 pada kegagalan lain dan -1 jika metode saat ini tidak didukung. Pembangkitan dapat ditolak ketika sumber entropi gagal. Program harus memeriksa nilai kembalian itu sebelum memakai area memori yang disediakan, disebut buffer. Jika tidak, program dapat menggunakan data yang sama sekali belum dihasilkan dengan aman. [3]
Pengulangan berguna dalam pengujian: pengembang ingin membandingkan hasil dengan nilai yang diharapkan. Karena itu, fungsi randombytes_buf_deterministic() milik libsodium menghasilkan deret yang sama dari seed yang sama. Namun, pengulangan tak sengaja menjadi masalah dalam penggunaan biasa. Snapshot mesin virtual menyimpan keadaan komputer, termasuk memorinya. Memulihkannya dapat mengulang keadaan pembangkit beserta keluarannya. Jadi, salinan lingkungan belum tentu menghasilkan rahasia yang saling independen. [4]
Pembangkit dapat menyediakan data acak yang baik, lalu aplikasi mengolahnya secara keliru. Memetakannya ke rentang yang lebih kecil hanya dengan sisa pembagian dapat membuat sebagian hasil muncul lebih sering daripada yang lain. Fungsi randombytes_uniform() milik libsodium menghindari bias ini melalui pemilihan merata di bawah batas atas yang ditentukan. Kunci juga harus memenuhi aturan algoritmenya. Keamanan tidak berakhir ketika byte acak diperoleh: penggunaan berikutnya sama pentingnya. [4]
Nonce adalah nilai untuk suatu penggunaan individual dalam prosedur kriptografis, tetapi protokollah yang menentukan aturannya. RFC 8439 mewajibkan nonce tidak berulang dengan kunci yang sama; tampilan acak saja tidak menjamin keunikan. Sebaliknya, RFC 6979 menjelaskan penghitungan deterministik nilai k yang diperlukan untuk tanda tangan digital dari kunci rahasia dan pesan yang ditandatangani. Ini perbedaan desain, bukan pertentangan. “Tambahkan keacakan di mana-mana” tidak menggantikan prosedur yang benar. [5] [6]
Label CSPRNG saja belum menunjukkan apakah dompet menggunakan keseluruhan sistem dengan benar. Tinjauan teknis memeriksa versi pustaka tertentu, proses awal pembangkit, penanganan galat dan perilaku setelah keadaan dipulihkan atau disalin. Dokumentasi OpenSSL dan libsodium membuktikan sifat fungsi mereka, bukan keamanan setiap aplikasi yang memanggilnya. Bagi pengguna, kelanjutannya juga penting: rahasia yang dihasilkan dengan sempurna tidak lagi melindungi dana jika cadangan yang dapat memulihkan akses kemudian bocor. [3] [4]
Untuk gambaran yang lebih utuh, baca entri ini bersama Cryptographic Entropy, Random Number Generator, Deterministic RNG, Seed Generation. Entri ini juga dirujuk dari Dice Roll Entropy, Cryptographic Entropy, Random Number Generator, Deterministic RNG.