Jawaban Dave melanjutkannya dengan sangat baik, tetapi untuk menjelaskan sedikit lebih banyak pada opsi kedua:
generator nomor acak perangkat keras yang nyata menggunakan sumber entropi fisik. Sumber entropi semacam itu dapat berupa radiasi kosmik, kebisingan listrik, efek avanlanche dari dioda bias-balik (atau transistor BJT), sirkuit chua, dll. Semakin sedikit deterministik sumber entropi, semakin baik kualitas output acak. Sumber entropi yang ideal adalah menggunakan efek fisika kuantum, atau sesuatu yang tidak mungkin dimodelkan dengan persamaan deterministik.
Faktor penting lainnya dengan generator bilangan acak adalah bahwa sumber entropi hanya dapat menghasilkan jumlah entropi yang terbatas per unit waktu. Contoh yang baik adalah sirkuit chua: meskipun cukup acak, ia memiliki kecepatan yang sangat buruk dan tidak dapat digunakan untuk aplikasi kehidupan nyata.
Dalam banyak prosesor / mikrokontroler dengan built-in RNGs, jam melayang dari 2 hingga 4 jam yang sengaja disinkronkan dengan salah digunakan. Kemudian, mereka menggunakan filter analog dan digital untuk lebih mengacak pola dan pergeseran dalam hasil register. Melakukan penyaringan semacam itu membutuhkan beberapa siklus, yang menjelaskan jumlah minimum siklus yang diperlukan pada jam tertentu sebelum nilai yang lebih baru tersedia.
Jam terbang tidak cukup efek kuantum, sehingga bisa dimodelkan, tetapi cukup acak, karena tergantung pada banyak parameter, seperti suhu, proses silikon, frekuensi operasi, kebisingan listrik, radiasi latar belakang, dll .
Dalam aplikasi di mana perangkat keras RNG tidak memiliki throughtput yang cukup (seperti dalam aplikasi kriptografi yang sangat menuntut), sangat umum untuk menggunakan perangkat keras RNG sebagai seed untuk generator angka acak semu seperti fungsi rand () di sdtlib. Namun, aplikasi tersebut biasanya memberikan implementasi rand () yang lebih baik yang dirancang khusus untuk dijalankan dari sebuah seed yang dapat dibuang sangat sering dengan nilai acak yang sebenarnya . Dalam prosesor Intel yang lebih baru dengan RNG perangkat keras terintegrasi, bagian algoritma pseudo-acak langsung terintegrasi dalam silikon, sehingga dilakukan oleh perangkat keras, menghasilkan throughtput acak yang sangat tinggi.
Jika Anda keberatan dengan metode rand () itu sendiri, itu hanya ekspresi methematical yang dirancang untuk menghasilkan jumlah entropi yang cukup besar. Cukup besar tergantung pada aplikasi: untuk generasi kunci kriptografis, keacakan diperlukan untuk kualitas yang lebih tinggi daripada keacakan yang diperlukan untuk acak acak sederhana di pemutar musik favorit Anda. Jelas bahwa semakin tinggi kualitas output acak, semakin tinggi biaya komputasi dari angka acak.
Operasi yang terlibat dalam angka acak sangat mirip dengan yang terlibat dalam menghitung hash MD5 file: mereka mencoba menggunakan semacam efek longsoran bit sehingga perubahan bit tunggal dalam nilai benih mengubah seluruh pola pembangkitan. Sebagai catatan, saya TIDAK merekomendasikan menggunakan MD5 sebagai generator angka pseudo-acak; itu hanya sebuah contoh. Ini akan menjadi tidak efisien dan tidak begitu acak, tetapi intinya ada: jika Anda memberi makan file yang sama ke algoritma hasing MD5, Anda akan selalu mendapatkan output deterministik yang sama, hampir sama dengan cara Anda selalu mendapatkan output yang sama dari rand () berfungsi jika Anda memasukkan seed yang sama kecuali implementasi Anda bergantung pada beberapa elemen arbitrer seperti waktu saat ini.