Apakah mungkin untuk memberi makan jaringan saraf output dari generator angka acak dan mengharapkannya mempelajari fungsi hashing (atau generator), sehingga dapat memprediksi apa yang akan menjadi nomor pseudo-acak berikutnya yang dihasilkan ?
Apakah sesuatu seperti ini sudah ada? Jika penelitian sudah dilakukan terkait hal ini atau sesuatu (dengan prediksi angka pseudo-acak), adakah yang bisa mengarahkan saya ke sumber daya yang tepat?
Saat ini, saya melihat perpustakaan ini dan tautan terkaitnya. https://github.com/Vict0rSch/deep_learning/tree/master/keras/recurrent
Jawaban:
Jika kita berbicara tentang RNG yang sempurna, jawabannya adalah tidak . Tidak mungkin untuk memprediksi angka yang benar-benar acak, jika tidak maka tidak akan benar-benar acak.
Ketika kita berbicara tentang pseudo RNG, segalanya berubah sedikit. Bergantung pada kualitas PRNG, masalahnya berkisar dari yang mudah hingga yang hampir mustahil. PRNG yang sangat lemah seperti XKCD yang diterbitkan tentu saja dapat dengan mudah diprediksi oleh jaringan saraf dengan sedikit pelatihan. Tetapi di dunia nyata segalanya terlihat berbeda.
Jaringan saraf dapat dilatih untuk menemukan pola tertentu dalam sejarah bilangan acak yang dihasilkan oleh PRNG untuk memprediksi bit berikutnya. Semakin kuat PRNG, semakin banyak input neuron yang diperlukan, dengan asumsi Anda menggunakan satu neuron untuk setiap bit keacakan sebelumnya yang dihasilkan oleh PRNG. Semakin tidak dapat diprediksi PRNG, semakin banyak data yang diperlukan untuk menemukan semacam pola. Untuk PRNG yang kuat, ini tidak layak.
Pada catatan positif, akan sangat membantu jika Anda dapat menghasilkan jumlah pola pelatihan yang sewenang-wenang untuk jaringan saraf, dengan asumsi bahwa Anda memiliki kendali atas PRNG dan dapat menghasilkan angka acak sebanyak yang Anda inginkan.
Karena PRNG modern adalah komponen kunci untuk kriptografi, penelitian ekstensif telah dilakukan untuk memverifikasi bahwa mereka "cukup acak" untuk menahan serangan prediksi seperti itu. Oleh karena itu saya cukup yakin bahwa tidak mungkin dengan sumber daya komputasi yang tersedia saat ini untuk membangun jaringan saraf untuk berhasil menyerang PRNG yang dianggap aman untuk kriptografi.
Penting juga dicatat bahwa tidak perlu memprediksi dengan tepat keluaran PRNG untuk memecahkan kriptografi - mungkin cukup untuk memprediksi bit berikutnya dengan kepastian lebih dari 50% untuk melemahkan implementasi secara signifikan. Jadi jika Anda dapat membangun jaringan saraf yang memprediksi bit PRNG berikutnya (dianggap aman untuk kriptografi) dengan tingkat keberhasilan 55%, Anda mungkin akan membuat berita utama berita keamanan cukup lama.
sumber
Menjadi pemula yang lengkap dalam pembelajaran mesin, saya melakukan percobaan ini (menggunakan Scikit-belajar):
Menghasilkan sejumlah besar (N) ekstraksi pseudo-acak, menggunakan fungsi python random.choices untuk memilih angka N dari 90.
Melatih classifier MLP dengan data pelatihan yang disusun sebagai berikut:
Dalam praktiknya, saya mengarahkan ke suatu fungsi yang diberi angka N, dapat memprediksi yang berikutnya.
Meminta classifikator terlatih untuk memprediksi angka yang tersisa.
Hasil:
tentu saja, pengklasifikasi memperoleh skor kemenangan yang sebanding dengan salah satu tebakan acak atau teknik lain yang tidak didasarkan pada jaringan saraf (saya membandingkan hasil dengan beberapa pengklasifikasi yang tersedia di perpustakaan scikit-learning)
namun, jika saya menghasilkan ekstraksi lotre pseudo-acak dengan fungsi distribusi tertentu, maka angka yang diprediksi oleh jaringan saraf secara kasar dihasilkan dengan kurva distribusi yang sama (jika Anda memetakan kejadian angka acak dan prediksi jaringan saraf, Anda dapat melihat bahwa keduanya memiliki tren yang sama, bahkan jika dalam kurva prediseksi ada banyak lonjakan, jadi mungkin jaringan saraf dapat belajar tentang distribusi angka pseudo-acak?
Jika saya mengurangi ukuran pelatihan yang ditetapkan di bawah batas tertentu, saya melihat bahwa classifier mulai memprediksi selalu beberapa angka yang sama, yang merupakan yang paling sering dalam generasi pseudo-acak. Anehnya (atau mungkin tidak) perilaku ini tampaknya sedikit meningkatkan skor kemenangan.
sumber
Pertanyaan lama, tapi saya pikir itu layak untuk satu jawaban praktis. Saya kebetulan menemukannya tepat setelah melihat panduan bagaimana membangun jaringan saraf seperti itu, menunjukkan gema randint python sebagai contoh . Ini adalah kode terakhir tanpa penjelasan terperinci, masih cukup sederhana dan bermanfaat jika tautannya offline:
Saya baru saja mencoba dan itu memang bekerja dengan cukup baik! Butuh hanya beberapa menit di netbook lama saya yang lambat. Ini hasil saya sendiri, berbeda dari tautan di atas dan Anda dapat melihat kecocokan tidak sempurna, jadi saya kira kriteria keluar agak terlalu permisif:
sumber
Jika generator angka acak psuedo mengeluarkan angka maka dalam analisis angka-angka ini Anda akan dapat menentukan algoritma yang menghasilkannya karena angka-angka tidak acak mereka ditentukan oleh algoritma itu dan bukan kebetulan. Jika dunia terdiri dari hukum-hukum fisik yang dapat dipahami dan direplikasi daripada keacakan yang kita amati dalam peristiwa-peristiwa itu tergantung pada hukum-hukum fisik itu. dan generator psuedo tidak lagi, dan merupakan keacakan aktual yang dari definisinya tidak dapat ditentukan, dan menyajikan sebuah paradoks. Bagaimana aturan dapat menciptakan keacakan berdasarkan definisi tentu persepsi kita tentang keacakan peristiwa yang kita amati adalah kiasan dan sebenarnya kepastian yang tidak dapat kita prediksi.
sumber
Menambah apa yang dikatakan Demento, tingkat keacakan dalam Algoritma Generasi Angka Acak adalah masalah utama. Berikut ini adalah beberapa desain yang dapat membuat RNG lemah:
Urutan Tersembunyi
Misalkan ini adalah beberapa urutan karakter yang dihasilkan sebelumnya: (Sebagai contoh, untuk penggunaan praktis rentang yang lebih besar, digunakan)
Awalnya, Anda tidak dapat mengamati pola apa pun di dalam generasi tetapi mengubahnya menjadi pengkodean Base64 dan kemudian ke hex, kami mendapatkan yang berikut ini:
Sekarang jika kita kurangi setiap angka dari yang sebelumnya, kita dapatkan ini:
Ini menunjukkan bahwa algoritma hanya menambahkan 0x97C4EB6A ke nilai sebelumnya, memotong hasilnya ke angka 32-bit, dan Base64-mengkodekan data.
Di atas adalah contoh dasar. Algoritma dan sistem ML saat ini cukup mampu untuk mempelajari dan memprediksi pola yang lebih kompleks.
Ketergantungan Waktu
Beberapa algoritma RNG menggunakan waktu sebagai input utama untuk menghasilkan angka acak, terutama yang dibuat oleh pengembang sendiri untuk digunakan dalam aplikasi mereka.
Setiap kali algoritma RNG yang lemah diimplementasikan yang tampaknya bersifat stokastik, mereka dapat diekstrapolasi ke depan atau ke belakang dengan akurasi sempurna jika tersedia data yang memadai.
sumber