Hasilkan entropi untuk kunci PGP

12

Saya masuk ke VM dari jarak jauh dan mencoba menghasilkan kunci PGP 4096bit, itu hanya hang selamanya karena tidak ada entropi dan karena saya bekerja melalui remote desktop mungkin tidak mendeteksi gerakan mouse sebagai entropi.

Bagaimana saya bisa menghasilkan beberapa?

Saya mencoba cat /dev/urandom > /dev/nulltetapi itu tidak membantu.

redic
sumber

Jawaban:

13

Mendapatkan data keluar dari /dev/randomatau /dev/urandompasti tidak akan membantu, semua itu akan melakukan yaitu menguras kolam renang entropi Anda, membuat masalah lebih buruk. Perbedaan utama antara kedua file ini adalah bahwa bahkan ketika kernel kehabisan entropi urandomakan tetap menghasilkan data acak dengan kualitas yang lebih rendah, sementara randomakan memblokir sampai dapat mengumpulkan data acak berkualitas tinggi yang baru. PGP membutuhkan data acak setinggi mungkin untuk menghasilkan kunci aman, sehingga akan selalu digunakan /dev/random.

Jika Anda memiliki data acak yang baik, atau mengekspor beberapa dari server lain /dev/random, Anda dapat catmemasukkannya ke server Anda /dev/randomuntuk mendapatkan lebih banyak entropi. Anda seharusnya tidak pernah catmemiliki file yang sama dua kali /dev/random.

Jika Anda sering menemukan diri Anda kehabisan entropi, Anda juga dapat mempertimbangkan untuk menginstal sesuatu seperti hasged , daemon yang menghasilkan kembali entropi di latar belakang dan mengisi ulang /dev/randomsesuai kebutuhan.

Juga dapat tergoda untuk symlink /dev/randomke /dev/urandom, tapi ini harus dianggap sebagai risiko keamanan karena setiap kunci yang dihasilkan menggunakannya mungkin kurang mengamankan dari yang seharusnya. Meskipun mungkin membantu untuk satu aplikasi yang kurang penting, Anda harus mempertimbangkan setiap kemungkinan penggunaan lainnya /dev/random, termasuk pengguna lain yang membuat kunci sendiri, CSR, dll.

Thomas Guyot-Sionnest
sumber
Perhatikan bahwa pada FreeBSD, /dev/randomadalah PRNG berkualitas tinggi , dan seharusnya tidak diblokir.
Kevin
@Kevin /dev/randomadalah PRNG berkualitas tinggi di BSD dan Linux modern, tentu saja. Tetapi akan memblokir jika tidak tersedia cukup entropi. Di sisi lain, /dev/urandomtidak akan memblokir jika tidak tersedia cukup tetapi kualitas keacakannya mungkin menderita dalam kasus ini. Dalam perinciannya ada banyak seluk-beluk antara implementasi acak dan urandom antara Linux dan berbagai BSD, tetapi hal di atas harus benar pada semua AFAIK.
Huygens
Di Linux Anda dapat menghasilkan lebih banyak entropi dengan hanya melakukan ping host (mis. ping 8.8.8.8) Jika Anda memiliki host jaringan lain mencoba memiliki ping setiap 100ms (jika RTT Anda <100ms tentu saja). Dan / atau gunakan finduntuk mencari file di hard disk Anda dan siram cache RAM antara setiap pencarian file.
Huygens
@Huygens: Buka halaman manual yang saya tautkan dan Ctrl + F "kern.random.sys.seeded"; secara default, /dev/randomtidak memblokir FreeBSD.
Kevin
1
@Kevin ya Anda benar, pengumpulan atau panen entropi mungkin adalah dua cara berbeda untuk "menyemai" PRNG. Dan setelah beberapa pengujian pada kotak BSD saya, saya menemukan bahwa acak dan urandom berperilaku yang sama, mereka memblokir ketika mereka tidak dapat menghasilkan PRNG yang cukup baik. Coba jalankan dd if=/dev/random of=/tmp/rndtest bs=64M count=1setelah boot baru, butuh 2 kali berturut-turut untuk melihat waktu untuk menghasilkan peningkatan file 64MB. Saya pikir saya tidak akan melihat efek ini dengan urandom sebagai input, tetapi FreeBSD tampaknya juga memblokirnya, tidak seperti Linux.
Huygens
9

Anda bisa menggunakannya haveged.

haveged adalah daemon yang menghasilkan entropi saat dibutuhkan.

Sylvain Firmery
sumber
Ya apt-get install hasged
Uwe Burger
2
Berhati-hatilah dengan yang ada di lingkungan virtual. Ini bisa menjadi suboptimal tergantung pada konfigurasi hypervisor. Periksa halaman ini: wiki.archlinux.org/index.php/Haveged#Virtual_machines
Huygens
4

Saya akan merekomendasikan untuk membuat kunci gpg Anda di mesin lokal Anda yang akan memiliki keacakan jauh lebih baik daripada yang jauh. Dan kemudian migrasi tombol menggunakan SSH ke mesin jarak jauh Anda.

Menghasilkan secara lokal akan lebih cepat (lebih banyak sumber untuk entropi), lebih aman (tidak ada yang bisa memata-matai proses jika mesin Anda tidak terinfeksi, keacakan yang lebih baik).

Jika Anda masih ingin membuat itu dari jarak jauh: Di Linux Anda dapat menghasilkan lebih banyak entropi dengan hanya melakukan ping host (misalnya ping 8.8.8.8) jika Anda memiliki host jaringan lain mencoba untuk memiliki ping setiap 100 ms (jika RTT Anda <100ms tentu saja). Dan / atau gunakan finduntuk mencari file di hard disk Anda dan siram cache RAM antara setiap pencarian file.

Anda juga dapat menginstal havegedtetapi membaca batasannya jika Anda menjalankannya di lingkungan virtual: https://wiki.archlinux.org/index.php/Haveged#Virtual_machines

Huygens
sumber
Menurut saya, ini adalah solusi yang tepat - +1 dari saya.
MadHatter
3

Pada sistem berbasis Debian, Anda dapat menginstal rng-toolspaket menggunakan atp-get, dan kemudian mulai daemon untuk menghasilkan entropi:

echo HRNGDEVICE=/dev/urandom >> /etc/default/rng-tools && service rng-tools restart

Pada server CentOS-6, rngdaemon diinstal sebagai salah satu alat dasar (setidaknya pada sebagian besar sistem yang saya kerjakan), dan Anda dapat menjalankan perintah berikut untuk memulainya, untuk menghasilkan entropi:

sed -i \'s|EXTRAOPTIONS=\"\"|EXTRAOPTIONS=\"-r /dev/urandom\"|g\' /etc/sysconfig/rngd && service rngd restart
Andrew
sumber
Saya tidak berpikir bahwa menggunakan urandom sebagai sumber untuk rngd itu pintar. Ini akan membantu menguras entropi yang tersedia lebih cepat dan setelah terkuras akan menjadi sumber bias untuk entropi. Jadi saya akan menghindari solusi ini.
Huygens
1
sudo yum install haveged && sudo systemctl start haveged

pasti bekerja pada VM CentOS 7.2. Kadang-kadang Anda ingin membuat kunci GPG pada vm jika Anda membuat banyak dan ingin kunci Anda utuh.

init0
sumber