Keduanya /dev/random
dan /dev/urandom
menggunakan "kolam entropi". Ketika pool habis, /dev/random
tunggu sampai diisi ulang, yang membutuhkan perilaku sistem pemantauan (input keyboard, pergerakan mouse, dll.), Sedangkan /dev/urandom
akan terus memberi Anda data pseudo-acak. /dev/random
secara teori kualitasnya lebih tinggi, tetapi /dev/urandom
hampir pasti cukup bagus untuk keperluan Anda. (Tetapi bahkan /dev/urandom
mungkin lebih lambat dari beberapa metode lain. Generator yang lebih cepat, tetapi lebih rendah, kualitasnya mungkin cukup baik untuk menghapus hard drive. Tidak jelas bahwa penyerang akan mendapatkan keuntungan dari mengetahui urutan yang akan dihasilkan, atau bahwa angka acak lebih baik untuk tujuan ini daripada urutan seperti 0, 1, 2, 3, 4, ....)
Mengutip random(4)
halaman manual:
Jika Anda tidak yakin tentang apakah Anda harus menggunakan /dev/random
atau
/dev/urandom
, maka mungkin Anda ingin menggunakan yang terakhir. Sebagai aturan umum, /dev/urandom
harus digunakan untuk semuanya kecuali kunci GPG / SSL / SSH yang berumur panjang.
UPDATE : Halaman manual `acak (4) telah diperbarui sejak saya menulis itu. Sekarang tertulis:
The /dev/random
antarmuka dianggap sebagai antarmuka warisan, dan
/dev/urandom
lebih disukai dan memadai dalam semua kasus penggunaan, dengan pengecualian dari aplikasi yang memerlukan keacakan selama waktu boot awal; untuk aplikasi ini, getrandom(2)
harus digunakan sebagai gantinya, karena akan memblokir sampai kumpulan entropi diinisialisasi.
Lihat juga " Mitos tentang / dev / urandom " oleh Thomas Hühn.
Tetapi /dev/urandom
, meskipun itu tidak akan diblokir, kemungkinan akan terlalu lambat jika Anda ingin menghasilkan data dalam jumlah besar. Lakukan beberapa pengukuran pada sistem Anda sebelum mencobanya.
EDIT: Berikut ini adalah penyimpangan pada nomor acak "benar" vs nomor pseudo-acak. Jika semua yang Anda minati adalah jawaban praktis untuk pertanyaan itu, Anda bisa berhenti membaca sekarang.
Sepertinya saya telah mengklaim (termasuk dalam jawaban lain di sini) yang /dev/random
mengimplementasikan generator nomor acak "benar", sebagai lawan dari generator nomor acak semu (PRNG). Sebagai contoh, artikel Wikipedia membuat klaim seperti itu. Saya tidak percaya itu benar. Ada beberapa diskusi tentang hal ini di sini yang mengacu pada generator nomor acak perangkat keras, tetapi saya tidak melihat bukti yang /dev/random
biasanya menggunakan perangkat seperti itu, atau bahwa komputer biasa bahkan memiliki perangkat seperti itu. Mereka berbeda dari PRNG seperti rand()
fungsi C karena mereka tidak deterministik, karena mereka mengambil entropi dari sumber yang secara praktis tidak dapat diprediksi.
Saya akan mengatakan ada tiga kelas generator nomor "acak":
PRNG deterministik, seperti rand()
fungsi C , yang menggunakan algoritma untuk menghasilkan urutan berulang yang memiliki (kurang lebih) sifat statistik dari urutan yang benar-benar acak. Ini bisa cukup baik untuk gim (diberikan cara yang baik untuk menaburnya), dan diperlukan untuk aplikasi yang membutuhkan pengulangan, tetapi tidak cocok untuk kriptografi.
Generator menyukai /dev/random
dan mengambil /dev/urandom
entropi dari sumber yang praktis tidak dapat diprediksi seperti aktivitas I / O (inilah sebabnya menggedor keyboard atau menggerakkan mouse dapat menyebabkan /dev/random
menghasilkan lebih banyak data). Tidak jelas (bagi saya) apakah ini memenuhi definisi PRNG (Saya telah melihat definisi yang mengatakan PRNG adalah deterministik), tetapi mereka juga tidak benar - benar menghasilkan bilangan acak.
Generator nomor acak perangkat keras yang secara fisik tidak dapat diprediksi bahkan dengan pengetahuan lengkap tentang keadaan awal mereka, dan yang tambahan menggunakan teknik matematika untuk memastikan sifat statistik yang tepat.