Ada banyak kebenaran dalam hal ini, pada kenyataannya lebih banyak kebenaran daripada mitos, tetapi meskipun demikian pernyataan tersebut mencerminkan kesalahpahaman mendasar tentang apa yang terjadi. Ya, menggerakkan mouse sambil membuat kunci dengan GPG bisa menjadi ide yang bagus. Ya, menggerakkan mouse memberikan kontribusi beberapa entropi yang membuat angka acak menjadi acak. Tidak, menggerakkan mouse tidak membuat kunci lebih aman.
Semua generator acak yang bagus cocok untuk kriptografi, dan Linux dalam kategori itu, memiliki dua komponen:
- Sebuah entropi sumber, yang non-deterministik. Tujuan dari entropi adalah untuk bootstrap generator angka acak dengan data yang tidak dapat diprediksi. Sumber entropi harus non-deterministik: jika tidak, musuh dapat mereproduksi perhitungan yang sama.
- Sebuah jumlah pseudorandom generator yang , yang menghasilkan angka acak tak terduga dalam mode deterministik dari keadaan internal berubah.
Entropi harus berasal dari sumber yang eksternal ke komputer. Pengguna adalah salah satu sumber entropi. Apa yang dilakukan pengguna sebagian besar tidak acak, tetapi waktu penekanan tombol dan gerakan mouse yang baik sangat tidak terduga sehingga sedikit acak - tidak terlalu acak, tetapi sedikit demi sedikit, itu menumpuk. Sumber potensial entropi lainnya termasuk waktu paket jaringan dan noise putih kamera atau mikrofon. Versi dan konfigurasi kernel yang berbeda dapat menggunakan serangkaian sumber yang berbeda. Beberapa komputer memiliki sirkuit perangkat keras RNG khusus berdasarkan peluruhan radioaktif atau, yang kurang mengesankan, sirkuit elektronik yang tidak stabil. Sumber khusus ini sangat berguna dalam perangkat dan server tertanam yang dapat memiliki perilaku yang cukup dapat diprediksi pada boot pertama mereka, tanpa pengguna melakukan hal-hal aneh.
Linux menyediakan nomor acak untuk program melalui dua perangkat: /dev/random
dan/dev/urandom
. Membaca dari kedua perangkat menghasilkan kualitas kriptografis. Kedua perangkat menggunakan keadaan RNG internal yang sama dan algoritma yang sama untuk mengubah keadaan dan menghasilkan byte acak. Mereka memiliki keterbatasan khusus yang membuat keduanya tidak benar:
/dev/urandom
dapat mengembalikan data yang dapat diprediksi jika sistem belum mengakumulasi cukup entropi.
/dev/random
menghitung jumlah entropi dan blok yang tersedia jika tidak cukup. Ini kedengarannya bagus, kecuali bahwa perhitungan didasarkan pada pertimbangan teoritis yang membuat jumlah entropi yang tersedia berkurang secara linier dengan setiap bit keluaran. Jadi /dev/random
cenderung untuk memblokir dengan sangat cepat.
Sistem Linux menyimpan status RNG internal ke disk dan mengembalikannya saat boot. Karenanya entropi dijalankan dari satu boot ke boot berikutnya. Satu-satunya waktu ketika sistem Linux mungkin kurang entropi adalah ketika itu baru diinstal. Setelah ada cukup entropi dalam sistem, entropi tidak berkurang; hanya perhitungan cacat Linux yang berkurang. Untuk penjelasan lebih lanjut tentang pertimbangan ini, baca /dev/urandom
cocok untuk menghasilkan kunci kriptografi , oleh seorang kriptografi profesional. Lihat aso Bisakah Anda menjelaskan estimasi entropi yang digunakan dalam random.c .
Memindahkan mouse menambah lebih banyak entropi ke sistem. Tapi gpg hanya bisa membaca /dev/random
, bukan/dev/urandom
(cara untuk menyelesaikan masalah ini adalah dengan membuat /dev/random
perangkat 1: 9 yang sama /dev/urandom
), jadi tidak pernah berisiko menerima nomor acak yang tidak cukup acak. Jika Anda tidak menggerakkan mouse, kuncinya adalah acak; tetapi apa yang bisa terjadi adalah gpg itu bisa diblokir dalam baca dari /dev/random
, menunggu penghitung entropi kernel naik.