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?