RSA 2048 generasi keypair: via openssl 0.5s via gpg 30s, mengapa bedanya Ada beberapa program yang dapat meningkatkan RSA public / private keypairs
GnuPG / OpenPGP misalnya memiliki wizzard yang diikutsertakan
gpg --gen-key
OpenSSL dapat menghasilkan keypair menggunakan baris perintah tesis ini
openssl genrsa -out testkey.private 2048 openssl rsa -in testkey.private -pubout -out testkey.public
untuk hal yang sama, yaitu menghasilkan bit RSA 2048 keypair yang saya dapat rasakan - pada mesin yang sama - waktu yang sangat berbeda.
openssl
menghasilkan keypair di sekitar 0,5s
gpg
membutuhkan waktu sekitar 30 dan bahkan iklan "gerakkan mouse untuk menghasilkan keacakan / entropi"
Bisakah perbedaannya dijelaskan? Saya tahu bahwa gpg melakukan beberapa littel lebih dari sekadar pembuatan kunci RSA, namun saya secara khusus memilih opsi (4)
Silakan pilih jenis kunci yang Anda inginkan: (1) RSA dan RSA (default) (2) DSA dan Elgamal (3) DSA (hanya masuk) (4) RSA (hanya masuk) Pilihan Anda?
Oleh karena itu satu-satunya hal yang dihasilkan adalah keypair RSA 2048bit. Namun perbedaan waktu adalah 30 detik?
Bagi saya tampaknya gpg membuang-buang waktu atau OpenSSL tidak menunggu cukup waktu dan karenanya membuat kunci tidak aman.
Pertanyaan saya adalah apa yang bisa menjelaskan perbedaannya?
Memperbarui
Pembuatan RSA harus sebagai input keacakan. Oleh karena itu untuk memastikan bahwa openssl yang cepat bukan hanya hasil dari menggunakan beberapa keacakan disimpan saya batchrun beberapa kali
time bash -c "for i in {1..50}; do openssl genrsa -out / dev / null 2048; selesai;"
yang menghasilkan
0m16.577s asli pengguna 0m16.309s sys 0m0.092s
yaitu bahwa untuk 50 2048bits kunci RSA (saya berasumsi perlu banyak entropi / keacakan) openssl masih hanya diperlukan 16 detik. Asumsi saya di sini karenanya akan menjadi "jawaban" yang openssl harus dilanggar. Bagaimanapun saya tidak percaya Linux saya (kernel 3.2.0-59) telah menjadi sangat hebat dalam menghasilkan keacakan.
Mungkin perbedaannya hanyalah penggunaan openssl /dev/urandom
dan penggunaan gpg /dev/random
yang jika benar dapat menjelaskan perbedaan waktu masalah saya adalah bahwa saya tidak tahu bagaimana saya akan mencari tahu tentang hal ini, untuk memverifikasi ini.
pembaruan2
Untuk menguji sumber acak openssl saya gunakan
strace -xe trace = file, baca, tulis, tutup openssl genrsa -out testkey5.private 2048 2> & 1 | grep acak -A1
yang menghasilkan
open ("/ dev / urandom", O_RDONLY | O_NOCTTY | O_NONBLOCK) = 4 baca (4, "\ x21 \ xd8 \ xaa \ xf1 \ x2b \ x5f \ x4a \ x89 \ x5d \ x6c \ x58 \ x82 \ xc1 \ x88 \ x21 \ x04 \ xfa \ x5b \ x18 \ x8a \ x8 \ \ x2b \ xe3 \ xf3 \ xc0 \ xb1 \ xef \ xfb \ x44 \ x15 \ x09 ", 32) = 32
sehingga tampaknya 32 byte dari /dev/urandom
(bukan yang "lebih baik" /dev/random
) sudah cukup untuk keypair RSA 2048bit di openssl. Karena itu sangat cepat!
Pengukuran
RS48 menghasilkan generasi 2048bit berarti
- Hanya 32 byte
/dev/urandom
(menggunakan openssl) - 300 byte
/dev/random
(menggunakan openPGP GNU Privacy Guard)
ini tentu saja menjelaskan perbedaan waktu!
/dev/urandom
gpg berkualitas kurang bahkan mengatakan "1 byte/dev/random
tidak cukup baik untuk 1 byte acak". Apakah ini tidak berarti bahwa kunci openssl lebih rentan terhadap "terlalu sedikit keacakan" dibandingkan dengan gpg?/dev/urandom
cukup baik untuk keperluan crypto. Di milis GnuPG dia mungkin akan ditertawakan untuk itu. AFAIK tidak mungkin untuk membuktikan bahwa data tertentu adalah murni acak. Anda dapat menemukan non-keacakan tetapi hanya di mana Anda mencari pola itu./dev/random
sementara openssl hanya menggunakan 32bytes/dev/urandom
tampaknya menunjukkan potensi risiko keamanan bagi pengguna yang berhati-hati bagaimana menginginkan keypair RSA 2048bit. Karenanya saya akan memilih gpg. 32bytes tampaknya sangat kecil/dev/urandom
adalah bahwa (di linux) tidak memblokir sebelum diunggulkan langsung setelah boot. Setelah diunggulkan, itu akan tetap aman selamanya.Saran Anda bahwa perbedaan ini adalah karena
openssl
penggunaan / dev / urandom dangpg
penggunaannya/dev/random
benar.Anda dapat menonton entropi yang tersedia turun saat membuat kunci dengan
gpg
menggunakan:Saya menggunakan program untuk menghasilkan deskripsi langkah-langkah untuk menyiapkan kartu pintar OpenGPG dengan
gpg
, jadi saya harus menjalankangpg
beberapa kali sampai semuanya berjalan sebagaimana mestinya. Setelah menjalankan awal saya perhatikan bahwa/dev/random
tidak akan memiliki cukup entropi dan gpg hanya akan menunda menunggu untuk akumulasi baru.Saya menulis sebuah program kecil untuk memberikan data non-acak tambahan, dan ketika melakukannya
gpg
tidak akan "berhenti" tetapi menghasilkan kunci segera: bagus untuk menguji skrip agar berjalan dengan benar, tetapi tentu saja bukan sesuatu yang harus Anda lakukan saat membuat nyata Anda kunci.Program untuk mempercepat
gpg
( jangan gunakan dalam situasi nyata ):Ketika saya menjalankan ini sambil menonton
entropy_avail
saya bisa melihat entropi yang tersedia naik menjadi lebih dari 3800.sumber
cat
dengan sendirinya belum menguras entropi? Apakah Anda memiliki beberapa bukti atau sumber yang memberi tahu penggunaan gpg/dev/random
yang akan menyempurnakan jawabannya? Terakhir, apakah itu juga berarti bahwa openssl menghasilkan kualitas RSA-keypairs yang lebih rendah daripada gqg?Unattended key generation
di file/usr/share/doc/packages/gpg2/DETAILS
(atau apa pun itu di distro Anda). The/dev/random
bukti dalam jawaban saya.read
shell builtin:while read -r < /proc/sys/kernel/random/entropy_avail; do clear; date; printf '\nAvailable entropy: %s bytes\n' "$REPLY"; sleep 1; done