Apa perbedaan antara fungsi rand () dan perangkat RNG (Random number generator)?


9

Saya heran untuk perangkat RNG (Random number generator) di MCU STM32F4XXXX. lihat di Manual Referensi ini (halaman 748). Di sisi lain, kita memiliki fungsi rand () di perpustakaan stdlib yang melakukan tugas yang sama. Sekarang saya punya dua pertanyaan:

  1. Apa perbedaan (keuntungan dan kerugian) antara fungsi rand () dan perangkat RNG (Random number generator)?
  2. Lihatlah bagian ini:

fitur

Tolong jelaskan tentang kedua opsi ini (terutama opsi kedua).

Jawaban:


12

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.


7

Perbedaan utama adalah bahwa rand()fungsi perpustakaan adalah generator nomor pseudorandom - mengingat nilai awal (seed) tertentu, ia akan selalu menghasilkan urutan angka yang sama.

Di sisi lain, perangkat RNG adalah generator nomor acak yang benar, dan itu akan menghasilkan urutan angka yang tidak dapat diulang.


Terima kasih. dan kedua opsi itu ..?
Roh

2
Apa artinya "dan kedua pilihan itu ..?" berarti? Apakah ini sebuah pertanyaan?
John U

2

Dua topik yang Anda uraikan dapat dengan relatif mudah dijelaskan:

  • 1: Anda tidak dapat menghasilkan angka acak lebih cepat dari sekali setiap siklus 40 jam, jadi ini menghasilkan 48MHz / 40 = ~ 1M Sampel / s
  • 2: Perangkat keras berisi monitor yang akan memeriksa setiap nomor yang dihasilkan untuk perilaku aneh. Misalnya jika Anda menggunakan suhu sebagai sumber dan memiliki lingkungan suhu yang sangat stabil, itu bisa terjadi bahwa RNG akan menghasilkan urutan nomor yang sama lagi dan lagi (seperti generator nomor pseudo-acak akan dilakukan jika Anda mulai dengan nilai seed yang sama) . Komponen akan memonitor ini dan memberi Anda sinyal jika RNG bekerja seperti yang diharapkan. Jika Anda ingin nomor Anda menjadi "benar-benar" acak, Anda mungkin ingin memantau bendera ini untuk melihat apakah mereka benar-benar. Seberapa tepat ini dilakukan dan bagaimana RNG sebenarnya bekerja mungkin diberikan dalam teks yang tersisa.

1

Misalkan seseorang mendesain pemintal roda roulette mekanis yang memberi energi pada motor untuk jangka waktu tertentu, menunggu roda dan bola untuk beristirahat, dan mengamati di mana kantong bola berada. Biasanya setelah setiap putaran bola dan roda akan berakhir di tempat yang sedikit berbeda, dan variasi kecil di lokasi bola setelah satu putaran dapat membuat perbedaan besar di mana ia berakhir pada putaran berikutnya. Dengan demikian, bahkan jika motor selalu diberi energi untuk jangka waktu yang sama, kantong tempat bola mendarat pada satu putaran akan terlepas dari tempat mendaratnya putaran sebelumnya.

Namun, sekarang anggaplah bahwa beberapa angka memiliki atau mengembangkan sedikit depresi di dalamnya, dan bantalan motor mengembangkan bintik-bintik datar. Kemudian beberapa putaran akan acak, tetapi setelah putaran yang menghasilkan bola mendarat di depresi dan bantalan di tempat datar, putaran berikutnya mungkin sangat bias terhadap memiliki hasil yang sama dengan putaran terakhir di mana itu terjadi. Jika kebanyakan spin tidak secara bersamaan mengenai divot dan flat spot, keberadaan mereka mungkin tidak akan terlalu memengaruhi banyak hal. Di sisi lain, jika satu divot / flat combo kebetulan ditempatkan tepat sehingga bola di sana akan secara konsisten mendarat pada detik, dan yang kebetulan ditempatkan sehingga mengirim bola kembali ke yang pertama, maka satu berakhir dengan beberapa perilaku yang sangat miring.

Jika, setelah mendarat pada 4 dan 23, putaran berikutnya adalah 4, itu tidak selalu menunjukkan masalah. Angka 4 akan muncul sekitar 1/38 dari waktu dalam situasi itu. Lebih lanjut, perolehan data acak seharusnya hanya menangkap nomor saku, karena tidak ada yang berguna diketahui tentang seberapa sering bola harus beristirahat di berbagai bagian saku. Meskipun demikian, mungkin berguna untuk apa pun yang merekam angka-angka untuk juga "mengamati" di mana di dalam bola berhenti dan memperhatikan pola-pola yang tidak biasa. Distribusi lokasi dapat condong ke arah depan atau belakang tanpa menunjukkan masalah, tetapi jika ada lonjakan sempit dalam distribusi yang dapat menimbulkan kekhawatiran.

Jika pembacaan berturut-turut dari generator acak secara statistik independen , kompensasi untuk bias tidak sulit (meskipun waktu yang dibutuhkan tidak bersifat deterministik). Namun, jika generator jatuh ke keadaan di mana pembacaan tidak independen (misalnya keadaan siklik dari roda di atas), kompensasi pada dasarnya menjadi tidak mungkin - sehingga kebutuhan untuk perangkat keras RNG untuk menyertakan sirkuit untuk mendeteksi perilaku tersebut.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.