GNU/Linux >> Belajar Linux >  >> Linux

Kapan Menggunakan /dev/random Vs /dev/urandom?

Haruskah saya menggunakan /dev/random atau /dev/urandom ?

Dalam situasi apa saya lebih memilih satu daripada yang lain?

Jawaban yang Diterima:

TL;DR

Gunakan /dev/urandom untuk sebagian besar tujuan praktis.

Jawaban yang lebih panjang tergantung pada rasa Unix yang Anda jalankan.

Linux

Secara historis, /dev/random dan /dev/urandom diperkenalkan pada saat yang sama.

Seperti yang ditunjukkan @DavidSchwartz dalam komentar, menggunakan /dev/urandom lebih disukai dalam sebagian besar kasus. Dia dan yang lainnya juga menyediakan tautan ke Mitos luar biasa tentang /dev/urandom artikel yang saya rekomendasikan untuk dibaca lebih lanjut.

Singkatnya:

  • Halaman manualnya menyesatkan.
  • Keduanya diberi makan oleh sama CSPRNG untuk menghasilkan keacakan (diagram 2 dan 3)
  • /dev/random blok ketika kehabisan entropi,
    jadi baca dari /dev/random dapat menghentikan eksekusi proses.
  • Jumlah entropi diperkirakan secara konservatif, tetapi tidak dihitung
  • /dev/urandom tidak akan pernah memblokir.
  • Dalam kasus yang jarang terjadi, tak lama setelah boot, CSPRNG mungkin tidak memiliki cukup entropi untuk diunggulkan dengan benar dan /dev/urandom mungkin tidak menghasilkan keacakan berkualitas tinggi.
  • Entropi yang hampir habis tidak menjadi masalah jika CSPRNG awalnya diunggulkan dengan benar.
  • CSPRNG terus-menerus diunggulkan kembali.
  • Di Linux 4.8 dan seterusnya, /dev/urandom tidak menghabiskan kumpulan entropi (digunakan oleh /dev/random ) tetapi menggunakan keluaran CSPRNG dari hulu.
  • Gunakan /dev/urandom .

Pengecualian terhadap aturan

Di Cryptography Stack Exchange Kapan harus menggunakan /dev/random lebih dari /dev/urandom di Linux @otus memberikan dua kasus penggunaan:

  1. Tak lama setelah boot pada perangkat dengan entropi rendah, jika entropi yang cukup belum dihasilkan untuk menyemai /dev/urandom dengan benar .

  2. Menghasilkan pad satu kali dengan keamanan teoretis informasi

Jika Anda khawatir tentang (1), Anda dapat memeriksa entropi yang tersedia di /dev/random .

Jika Anda melakukannya (2) Anda akan mengetahuinya

Catatan:Anda dapat memeriksa apakah pembacaan dari /dev/random akan memblokir, tetapi waspadalah terhadap kemungkinan kondisi balapan.

Alternatif:jangan gunakan keduanya!

@otus juga menunjukkan bahwa getrandom() sistem akan membaca dari /dev/urandom dan hanya memblokir jika entropi benih awal tidak tersedia.

Ada masalah dengan mengubah /dev/urandom untuk menggunakan getrandom() , tetapi dapat dibayangkan bahwa /dev/xrandom new baru perangkat dibuat berdasarkan getrandom() .

macOS

Tidak masalah, seperti yang dikatakan Wikipedia:

macOS menggunakan Yarrow 160-bit berdasarkan SHA1. Tidak ada perbedaan antara /dev/random dan /dev/urandom; keduanya berperilaku identik. iOS Apple juga menggunakan Yarrow.

FreeBSD

Tidak masalah, seperti yang dikatakan Wikipedia:

/dev/urandom hanyalah tautan ke /dev/random dan hanya memblokir sampai diunggulkan dengan benar.

Ini berarti bahwa setelah boot, FreeBSD cukup pintar untuk menunggu sampai entropi benih yang cukup telah dikumpulkan sebelum memberikan aliran kebaikan acak yang tidak pernah berakhir.

Terkait:Linux – Bagaimana cara membuat Oracle Java 7 bekerja dengan setcap cap_net_bind_service+ep?

NetBSD

Gunakan /dev/urandom , dengan asumsi sistem Anda telah membaca setidaknya sekali dari /dev/random untuk memastikan penyemaian awal yang tepat.

Halaman manual rnd(4) mengatakan:

/dev/urandom tidak pernah memblokir.

/dev/random terkadang blok. Akan memblokir lebih awal saat boot jika
status sistem diketahui dapat diprediksi.

Aplikasi harus dibaca dari /dev/urandom ketika mereka membutuhkan
data yang dihasilkan secara acak, mis. kunci kriptografi atau seed untuk simulasi.

Sistem harus direkayasa untuk secara bijaksana membaca setidaknya sekali dari /dev/random saat boot sebelum menjalankan layanan apa pun yang berbicara dengan
internet atau memerlukan kriptografi, untuk menghindari
menghasilkan kunci yang dapat diduga.


Linux
  1. Linux:Perbedaan Antara /dev/console , /dev/tty Dan /dev/tty0?

  2. Linux – Apa Arti Huruf 'u' Di /dev/urandom?

  3. Cara memetakan perangkat /dev/sdX dan /dev/mapper/mpathY dari perangkat /dev/dm-Z

  1. Bagaimana cara menyandikan base64 /dev/random atau /dev/urandom?

  2. DD dari /dev/zero ke /dev/null...apa yang sebenarnya terjadi

  3. Linux:Perbedaan antara /dev/console , /dev/tty dan /dev/tty0

  1. kernel:menonaktifkan /dev/kmem dan /dev/mem

  2. Bagaimana Linux menggunakan /dev/tty dan /dev/tty0

  3. Apakah salah menautkan /dev/random ke /dev/urandom di Linux?