Apakah / dev / data acak merupakan sandi AES psuedo-acak, dan dari mana asal entropi?

8

Pemahaman saya saat ini tentang kumpulan entropi adalah bahwa ia mengumpulkan bit data yang benar-benar acak pada tingkat yang lambat. Saya ingin tahu bagaimana Unix & Linux mengumpulkan entropi, dan bagaimana entropi itu digunakan oleh / dev / random.

Saya pernah mendengar (secara umum) metode pengumpulan entropi seperti status cpu kartu video ketika paket jaringan yang dipilih "secara acak" tiba, cocok dengan faktor desis dalam konverter digital-analog, dan metode lain yang lebih bodoh.

Saya percaya bahwa entropi "kumpulan" disadap sebagaimana diperlukan, dan digunakan untuk menaburkan generator acak psuedo ....

Saya tidak mencari jawaban yang mendalam, tetapi saya tertarik untuk mengetahui apakah ini adalah pendekatan umum yang digunakan oleh Unix / Linux? .. dan mungkin beberapa petunjuk tentang apa yang sebenarnya terjadi pada pengumpulan batu bara pengumpulan-entropi. .. dan kemudian, apa yang dimasukkan entropi ke dalam .. Apakah itu cipher AES Rijndael?

Informasi latar belakang untuk teman saya di atas, berasal dari Steve Gibson's Security Now! podcast: Episode # 301 Going Acak, Bagian 2 dari 2 ... Dia hanya berbicara secara umum (tapi seperti gayanya, dengan detail dan kejelasan yang cukup sehingga bahkan aku bisa memahaminya. Setelah mendengarkan 300 episode sebelumnya membantu :), ... dan saya ingin tahu apakah ini yang dilakukan Unix / Linux ...

Peter.O
sumber

Jawaban:

14

Linux memiliki dua generator nomor acak yang tersedia untuk ruang pengguna, /dev/randomdan /dev/urandom.

/dev/randomadalah sumber dari keacakan "benar" - yaitu ia tidak dihasilkan oleh generator angka pseudo-acak. Entropi dimasukkan ke ini oleh driver input dan pengendali interupsi, melalui fungsi add_input_randomnessdan add_interrupt_randomness. Proses membaca perangkat ini akan diblokir jika entropi habis.

/dev/urandomadalah generator angka pseudo-acak. Itu diberi makan oleh kolam entropi yang sama seperti /dev/random, tetapi ketika itu habis, ia beralih ke generator yang kuat secara kriptografis.

Aplikasi Userspace dapat dimasukkan ke dalam kumpulan entropi dengan menulis /dev/{,u}random.

Bacalah halaman manual acak (4) , dan file drivers/char/random.cdi pohon sumber kernel. Itu dikomentari dengan baik dan sebagian besar dari apa yang Anda tanyakan dijelaskan di sana.


FreeBSD /dev/randomsecara default adalah generator nomor pseudo-acak menggunakan algoritma Yarrow (tetapi dapat menunjuk ke RNG perangkat keras jika ada yang terhubung). Generator perangkat lunak mengambil entropi dari Ethernet dan koneksi serial dan interupsi perangkat keras (dapat diubah melalui sysctl kern.random). Algoritma Yarrow diyakini aman selama kondisi internal tidak diketahui, oleh karena itu /dev/randomharus selalu menampilkan data berkualitas tinggi tanpa memblokir. Lihat acak (4) .

Di NetBSD, /dev/randommenyediakan data acak hanya berdasarkan pada entropi yang dikumpulkan (dari disk, jaringan, perangkat input, dan / atau tape drive; dapat disesuaikan menggunakan rndctl ), sementara /dev/urandomjatuh kembali ke PRNG ketika kumpulan entropi kosong, mirip dengan Linux. Lihat acak (4) , rndctl (8) , rnd (9) .

OpenBSD memiliki empat generator: /dev/randomadalah generator perangkat keras, /dev/srandomadalah generator data acak yang aman (menggunakan MD5 pada kumpulan entropi: "disk dan perangkat jaringan terputus dan semacamnya"), /dev/urandomserupa tetapi jatuh kembali ke PRNG ketika kumpulan entropi kosong. Yang keempat,, /dev/arandomjuga merupakan PRNG tetapi menggunakan RC4 . Lihat acak (4) , arc4random (3) .

Mac OS X juga menggunakan algoritma Yarrow untuk /dev/random, tetapi memiliki /dev/urandomkompatibilitas yang identik . "Entropi tambahan diumpankan ke generator secara teratur oleh daemon SecurityServer dari pengukuran jitter acak dari kernel." Lihat acak (4) .

camh
sumber
Terima kasih. Tinjauan yang baik, dan dari sumbernya, saya melihat kami aman di tangan Twisted Generalized Feedback Shift Register (hal-hal menakutkan :) ... Seiring dengan input "acak" yang tumpul ke kumpulan, tampaknya hash SHA adalah dihasilkan "di seberang kolam, 16 kata (512 bit) pada suatu waktu" dan dicampur kembali ke dalam kolam, dan kemudian beberapa putaran lain ditampilkan di kolam ... Steve Gibson berkomentar di podcastnya bahwa: SHA-256 menggunakan / adalah hash state-of-the-art terkuat yang kita miliki. ... Saya tidak menemukan apa yang menghasilkan / dev / urandom output, tetapi proses memimpin tentu saja signifikan
Peter.O
+1, jawaban yang bagus; Saya pernah mencoba menghasilkan data karakter acak dengan cat /dev/randomdan selalu bertanya-tanya mengapa aliran saya berhenti setelah begitu banyak karakter
Mike Pennington