Menambahkan "entropi angka acak" untuk kunci GPG?

10

Dalam video berikut: Linux HOWTO: Amankan Data Anda dengan PGP, Bagian 2 , Anda diperlihatkan cara membuat pasangan kunci gpg. Pada sekitar 1:50, instruktur mengatakan yang berikut:

Ketika kunci sedang dibuat, itu ide yang baik untuk menggerakkan mouse Anda sedikit untuk memberikannya sedikit lebih banyak entropi angka acak untuk pembuatan keypair.

Bagi saya ini seperti mitos, terutama karena alat baris perintah biasanya tidak terpengaruh oleh kursor. Di sisi lain, saya tidak tahu bagaimana penghasil angka acak Linux bekerja, apakah itu dibagikan oleh GUI atau independen darinya. Apakah ada stok dalam apa yang dia klaim, atau ini contoh pemrograman pemujaan kargo ?

IQAndreas
sumber
Sebagai pertanyaan sampingan, apakah ini penggunaan yang benar dari "mitos perkotaan" atau apakah ada ungkapan yang sama untuk "mitos dalam komputasi"?
IQAndreas
1
Saya pikir frasa itu adalah legenda urban ; Saya belum pernah mendengar tentang mitos urban . Lihat en.wikipedia.org/wiki/Urban_legend Dalam komputasi, frasa "kultus kargo" mungkin sesuai.
derobert

Jawaban:

8

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/randomdan/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/randommenghitung 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/randomcenderung 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/urandomcocok 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/randomperangkat 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.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Kecuali versi linux saat ini tidak, setidaknya dari pengujian saya, menggunakan perangkat input sebagai sumber entropi (atau setidaknya dari perkiraan entropi). Saya cukup yakin mereka mengubahnya karena secara teori mereka bisa berada di bawah kendali penyerang.
derobert
@derobert Pada jam 3.12 ada panggilan add_input_randomnessmasuk drivers/input/input.c, tapi saya tidak tahu dalam keadaan apa itu benar-benar akan menyuntikkan entropi.
Gilles 'SANGAT berhenti menjadi jahat'
Saya kira itu menambah entropi, tetapi dengan perkiraan 0 ... Saya mencoba kedua mouse USB dan keyboard PS / 2, sepertinya tidak ada untuk menaikkan perkiraan entropi. Tidak yakin mengapa, karena saya melihat panggilan ke credit_entropy_bits dalam kode.
derobert
3

GPG menggunakan generator nomor acak Linux (kernel). Generator kernel mendapat entropi (keacakan) dari semua jenis tempat, di antaranya adalah interupsi waktu, untuk interupsi tertentu. Memindahkan mouse (dan mengetik, aktivitas disk, dll.) Akan menghasilkan interupsi.

Jadi, menggerakkan mouse memang berpotensi memberi makan ke dalam generator angka acak. Tetapi apakah itu tergantung pada versi kernel yang digunakan; versi yang lebih baru tidak (setidaknya dalam pengujian saya) menggunakan interupsi keyboard atau mouse untuk entropi. Namun, aktivitas disk (jadi, misalnya, menjalankan syncakan menambah jumlah entropi yang berpotensi besar, tergantung pada seberapa banyak yang memerah).

Singkatnya: ini tidak benar pada versi Linux saat ini. Itu pada yang lebih tua.

Namun, jika generator kehabisan entropi, itu seharusnya berhenti — jadi generasi kunci Anda akan menggantung sampai beberapa entropi dihasilkan. Jadi itu akan menjadi masalah selamanya, bukan masalah keamanan.

Anda dapat melihat seberapa banyak entropi tersedia oleh cat /proc/sys/kernel/random/entropy_avail.

derobert
sumber
Juga perhatikan Anda dapat menggunakan alat-alat seperti rngdmemberi makan artifisial pada kolam entropi.
Patrick
@ Patrick memang, dan jika Anda memiliki chip baru dan percaya NSA (oh, tunggu, maksud saya, Intel) Anda bisa menggunakan RDRAND.
derobert
havegeditu adalah alat lain yang bagus untuk memberi makan artifisial entropi.
mavillan
Itu bukan cerita lengkap - RNG tidak kehabisan entropi, ia kehabisan ukuran internal entropi. Selain itu, bagian penting dari teka-teki adalah bahwa gpg tidak peduli dengan mouse, itu kernel yang tidak.
Gilles 'SANGAT berhenti menjadi jahat'
@Gilles Saya sudah mengklarifikasi bahwa gpg menggunakan Linux RNG. Dan bug di estimator entropi tampak di luar cakupan.
derobert
0

Ekor memiliki generasi kunci yang sangat cepat karena telah havegeddiinstal:

sudo apt-get install haveged
pengguna123456
sumber