Tạo cặp khóa RSA 2048: thông qua openssl 0,5s qua gpg 30s, tại sao sự khác biệt Có một số chương trình có thể điều chỉnh các khóa bàn phím công khai / riêng tư RSA
Chẳng hạn, GnuPG / OpenPGP có một wizzard được ghen tị thông qua
gpg --gen-key
OpenSSL có thể tạo ra một cặp khóa bằng cách sử dụng các dòng lệnh này
openssl genrsa -out testkey.private 2048 openssl rsa -in testkey.private -pubout -out testkey.public
đối với cùng một điều, đó là tạo ra một khóa RSA 2048, tôi có thể cảm nhận được - trên cùng một cỗ máy - những thời điểm rất khác nhau.
openssl
tạo ra một cặp khóa trong khoảng 0,5 giây
gpg
mất khoảng 30 và thậm chí quảng cáo "di chuyển chuột để tạo ngẫu nhiên / entropy"
Sự khác biệt có thể được giải thích? Tôi biết rằng gpg thực hiện một số bước nhỏ hơn sau đó chỉ là tạo khóa RSA, nhưng tôi đặc biệt chọn tùy chọn (4)
Vui lòng chọn loại khóa bạn muốn: (1) RSA và RSA (mặc định) (2) DSA và Elgamal (3) DSA (chỉ ký) (4) RSA (chỉ ký) Lựa chọn của bạn?
Do đó, thứ thực sự duy nhất được tạo ra là một cặp khóa RSA 2048bit. Tuy nhiên, sự khác biệt thời gian là 30 giây?
Đối với tôi, có vẻ như gpg đang lãng phí thời gian một cách không cần thiết hoặc OpenSSL không chờ đủ thời gian và do đó tạo ra các khóa không an toàn.
Câu hỏi của tôi là những gì có thể giải thích sự khác biệt?
Cập nhật
Việc tạo RSA phải lấy một số ngẫu nhiên đầu vào. Do đó để chắc chắn rằng openssl nhanh chóng không chỉ đơn giản là kết quả của việc sử dụng một số ngẫu nhiên được lưu trữ, tôi đã xử lý nó nhiều lần
thời gian bash -c "cho i trong {1..50}; do openssl genrsa -out / dev / null 2048; xong;"
mang lại
số 0m16.577 thật người dùng 0m16.309s sys 0m0.092s
đó là với 50 khóa RSA 20 20 bit (tôi giả sử cần nhiều entropy / ngẫu nhiên) openssl vẫn chỉ cần 16 giây. Do đó, giả định của tôi ở đây sẽ là "câu trả lời" mà openssl phải bị phá vỡ. Sau tất cả, tôi không tin tưởng Linux của mình (hạt nhân 3.2.0-59) đã trở nên rất tuyệt vời trong việc tạo ra sự ngẫu nhiên.
Có lẽ sự khác biệt chỉ đơn giản là sử dụng openssl /dev/urandom
và sử dụng gpg /dev/random
mà nếu đúng có thể giải thích sự khác biệt về thời gian thì vấn đề của tôi là tôi không biết làm thế nào tôi sẽ tìm hiểu về điều này, để xác minh điều này.
cập nhật2
Để kiểm tra nguồn ngẫu nhiên của openssl tôi đã sử dụng
strace -xe theo dõi = tập tin, đọc, viết, đóng openssl genrsa -out testkey5.private 2048 2> & 1 | grep ngẫu nhiên -A1
mang lại
mở ("/ dev / urandom", O_RDONLY | O_NOCTTY | O_NONBLOCK) = 4 đọc (4, "\ x21 \ xd8 \ xaa \ xf1 \ x2b \ x5f \ x4a \ x89 \ x5d \ x6c \ x58 \ x82 \ xc1 \ x88 \ x21 \ x04 \ xfa \ x5b \ x18 \ x x2b \ xe3 \ xf3 \ xc0 \ xb1 \ xef \ xfb \ x44 \ x15 \ x09 ", 32) = 32
do đó, có vẻ như 32 byte từ /dev/urandom
(không phải là "tốt hơn" /dev/random
) là đủ cho khóa RSA 2048bit trong openssl. Do đó nó rất nhanh!
Đo
Thế hệ khóa đôi RSA 2048bit có nghĩa là
- 32 byte chỉ
/dev/urandom
(sử dụng openssl) - 300 byte của
/dev/random
(sử dụng openPGP GNU Privacy Guard)
Điều này tất nhiên giải thích sự khác biệt thời gian!
/dev/urandom
gpg thậm chí còn nói rằng "1 byte/dev/random
không đủ tốt cho 1 byte ngẫu nhiên". Điều này không có nghĩa là các khóa openssl dễ bị "quá ít ngẫu nhiên" so với gpg?