GPG tidak memiliki cukup entropi

86

Saya punya banyak proses yang berjalan di latar belakang untuk mencoba dan mendapatkan cukup entropi, tetapi saya masih gagal.

**We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
Not enough random bytes available.  Please do some other work to give
the OS a chance to collect more entropy! (Need 210 more bytes)**

Saya memerlukan metode untuk menghasilkan kunci yang berfungsi, karena apa yang saya coba lakukan ternyata gagal.

Joey BagODonuts
sumber

Jawaban:

112

Sudahkah Anda melihat RNG?

Jenis Fedora / Rh / Centos: sudo yum install rng-tools

Jenis deb: sudo apt-get install rng-toolsuntuk mengaturnya.

Kemudian jalankan sudo rngd -r /dev/urandomsebelum membuat kunci.

Referensi: http://it.toolbox.com/blogs/lim/how-to-generate-enough-entropy-for-gpg-key-generation-process-on-fedora-linux-38022

Danny Staple
sumber
4
Juga, pada catatan yang lebih serius, Anda dapat menggunakan sudo apt-get install rng-toolsjika Anda menggunakan Ubuntu dan bukan sudo yum install rng-utilsseperti yang mereka miliki untuk Fedora, karena tidak rng-utilsada paket untuk Ubuntu.
Jason Swett
4
Paket ini dinamai rng-toolspada Fedora dan EL6, jadi saya curiga kesalahan ketik pada artikel yang ditautkan. BTW, itu ide yang baik untuk memberikan bagian-bagian penting dari jawaban di sini, dan tautan untuk referensi, jika tautannya mati di masa mendatang.
Michael Hampton
11
Tidak ada "entropi berkualitas rendah" atau "entropi palsu" di urandom. urandom memanggil kode yang sama dengan / dev / random. Tidak perlu memasukkan keacakan tambahan ke CSPRNG (kecuali saat boottime, dan di sana distribusi Anda harus mengatasinya). Ini adalah mitos dan tidak boleh disebarkan. Lihat misalnya sockpuppet.org/blog/2014/02/25/safely-generate-random-number atau video ini: media.ccc.de/v/32c3-7441-the_plain_simple_reality_of_entropy
Sebastian Wiesinger
2
Komentar yang paling banyak dipilih adalah omong kosong; sayangnya saya sering melihat ini di SO. Peringatan (bahkan ketika sepenuhnya salah) akan mendapatkan banyak suara dan tidak ada cara untuk memperbaikinya (tidak ada pilihan komentar downvote) berarti kita tidak dapat menyingkirkan mitos.
Stijn de Witt
28

Saya dapat menghasilkan kunci dengan

apt-get install rng-tools

Di jendela SSH lain terbuka

 gpg --gen-key

Kembali ke sesi SSH pertama Anda dan jalankan

sudo rngd -r /dev/urandom

Biarkan ini berjalan sampai gpg menghasilkan kunci Anda!

Joey BagODonuts
sumber
9
Saya pasti akan merekomendasikan agar tidak pernah menggunakan /dev/urandomuntuk menghasilkan kunci yang penting.
Andrew Barber
12
@AndrewBarber Nonsense. Ini adalah metode yang direkomendasikan.
David Schwartz
3
@AndrewBarber Ini secara eksplisit dirancang untuk tujuan itu. Pada dasarnya, /dev/randomini adalah kesalahan desain. Seharusnya hanya akan memblokir pada pemanggilan pertama (pernah) (saat boot pertama) ketika belum ada entropi yang dikumpulkan. Seperti yang dilakukannya pada OS lain. Sebaliknya, kita punya dua kolam sekarang. Tidak pernah menggunakannya /dev/randomtidak memiliki kelebihan.
Stijn de Witt
@AndrewBarber apa yang akan Anda rekomendasikan?
qodeninja
13

Untuk memeriksa jumlah byte entropi yang tersedia saat ini, gunakan

cat /proc/sys/kernel/random/entropy_avail

Ember entropi berukuran 4096 byte, yang dapat dengan cepat habis.

Dengan menggunakan alat 'readspeed' kecil ini ( http://1wt.eu/tools/readspeed/ ), Anda dapat mengukur seberapa cepat ember entropi diisi dengan metode yang berbeda.

Misalnya, luncurkan:

$ ./readspeed < /dev/random

dan gerakkan mouse Anda. Anda akan melihat bahwa 'readspeed' mengosongkan ember entropi segera setelah diisi, dan ketika Anda menggerakkan mouse, isinya sedikit terisi.

Mencoba metode yang berbeda, tampaknya input keyboard dan gerakan mouse adalah yang paling efisien untuk mengisi kembali bucket tersebut. Transfer jaringan dan salinan hard drive tidak memiliki banyak pengaruh.

Akhirnya, ada perangkat generasi entropi yang tersedia, seperti ini: http://www.entropykey.co.uk/ .

Julien Vehent
sumber
4
Tidak ada "entropi berkualitas rendah" di urandom. urandom memanggil kode yang sama dengan / dev / random. Ini adalah mitos dan tidak boleh disebarkan. Lihat misalnya sockpuppet.org/blog/2014/02/25/safely-generate-random-number atau video ini: media.ccc.de/v/32c3-7441-the_plain_simple_reality_of_entropy
Sebastian Wiesinger
Jawaban ini berumur 5 tahun. Kami pikir urandom tidak seaman acak waktu itu, tetapi banyak hal telah berubah sejak saat itu dan urandom dianggap aman.
Julien Vehent
1
Faktanya sudah aman dari awal. Peringatan itu salah 7 tahun yang lalu juga.
Stijn de Witt
8

+1 untuk rng-tools

Jika Anda terjebak dalam situasi seperti saya - tidak memiliki izin untuk menginstal perangkat lunak baru (rng-tools) pada server tanpa kepala dengan hampir tidak ada perangkat keras input (kartu suara, keyboard, mouse) terpasang. Anda dapat menjalankan kode sederhana ini dari terminal lain yang terhubung ke server yang sama, untuk menambah entropi. Tidak masalah jika Anda mulai menjalankan ini sebelum atau setelah memulaigpg --gen-key

$ nice -n 19 bash
$ until [ $COUNT -lt 1 ]; do
  let COUNT=`cat /proc/sys/kernel/random/entropy_avail`
  echo "`date` COUNTER $COUNT"
done

Baris pertama adalah memulai shell bash baru, dengan prioritas lebih rendah (saya harus bersikap baik pada server yang dibagikan oleh banyak pengguna). Sampai loop tak terbatas, jadi ingatlah untuk memecahnya setelah kunci dibuat. Yang dilakukannya hanyalah menyebabkan lalu lintas jaringan meningkatkan entropi. Itu juga memonitor penghitung entropy_avail untuk menunjukkan bagaimana itu diisi dan dikosongkan di sisi lain oleh gpg. Dalam kasus saya, penghitung diisi dengan cepat ke 64 dan dikosongkan kembali ke 0 (tebak gpg mengambil dalam potongan 64). Saya sedang menunggu generasi kunci 4096 bit selama lebih dari 3 jam di server. Setelah mulai menjalankan skrip ini, skrip selesai dalam waktu kurang dari 5 menit.

Raj
sumber
Saya juga tidak memiliki akses root pada server jarak jauh dan ini bekerja dalam menciptakan beberapa entropi. Saya pikir kondisinya harus diubah menjadi [ $COUNT -lt 0 ]. Karena untuk sistem dengan entropi yang sangat sedikit, kadang-kadang mencapai 0 dan berhenti. GPG benar-benar lapar lapar.
Ajay Brahmakshatriya
Terima kasih, ini seharusnya cukup bagi saya untuk membuat beberapa generasi entropi pada kotak udara. Kecuali saya tidak akan menggunakan tanggal karena itu dapat diprediksi
grepsedawk
7

Saya terikat dan bertekad untuk menghasilkan entropi pada server Ubuntu 14.04 tanpa kepala saya untuk menghasilkan kunci 4.096 gpg --gen-key

Ada paket untuk menghasilkan entropi yang disebut hasged. Contoh pemasangan:

sudo apt-get install haveged

Saya harus sudo apt-get install rng-toolskarena itu adalah ketergantungan dalam tes berikut.

Contoh tes untuk melihat apakah entropi dihasilkan oleh hasged:

cat /dev/random | rngtest -c 1000

Sejumlah kecil kegagalan dapat diterima di sembarang pembangkit bilangan acak, tetapi Anda bisa berharap melihat 998-1000 keberhasilan sangat sering saat menggunakan melayang.

Saya mengetahuinya dalam tutorial di sini:

https://www.digitalocean.com/community/tutorials/how-to-setup-additional-entropy-for-cloud-servers-using-haveged

Saya sekarang memiliki kunci setelah berjalan gpg --gen-key

DMfll
sumber
0

Saya mengalami masalah ini saat berjalan pacman-key --initdi lengkungan. Solusi lain di sini tidak bekerja dengan baik untuk saya, tetapi saya menemukan bahwa hanya membanjiri router saya berfungsi dengan baik:ping -f ip.of.my.router

Yona Appletree
sumber
0

havegedadalah cara terbaik, tetapi jika Anda tidak dapat menginstal apa pun, maka Anda dapat secara manual menghasilkan entropi. Metode ini diizinkan gpg --gen-kenuntuk selesai dalam 1-2 menit pada mesin saya (dibandingkan dengan 10-an dengan haveged). Jadi sekitar 10x lebih lambat.

Jalankan ini di terminal lain ketika gpg --gen-keysedang berjalan:

while true; do
    # print entropy available
    cat /proc/sys/kernel/random/entropy_avail
    # write a 1 MB stream of zeros to /tmp/foo
    # "conv=fdatasync" flushes the disk cache
    dd bs=1M count=1 if=/dev/zero of=/tmp/foo conv=fdatasync
done

Satu liner:

while true; do cat /proc/sys/kernel/random/entropy_avail; dd bs=1M count=1 if=/dev/zero of=/tmp/foo conv=fdatasync; done
Wisbucky
sumber