Tạo entropy cho khóa PGP


12

Tôi đã đăng nhập vào máy ảo từ xa và cố gắng tạo khóa PGP 4096 bit, nó chỉ bị treo vĩnh viễn vì không có entropy và vì tôi đang làm việc thông qua máy tính để bàn từ xa nên có thể không phát hiện ra chuyển động của chuột là entropy.

Làm thế nào tôi có thể tạo ra một số?

Tôi đã cố gắng cat /dev/urandom > /dev/nullnhưng điều đó không có ích.

Câu trả lời:


13

Bắt dữ liệu ra của /dev/randomhoặc /dev/urandomlà dứt khoát không đi đến sự giúp đỡ, tất cả nó sẽ làm là làm cạn kiệt hồ bơi entropy của bạn, làm cho vấn đề này thậm chí tồi tệ hơn. Sự khác biệt chính giữa hai tệp này là ngay cả khi kernel hết entropy urandomsẽ tiếp tục tạo dữ liệu ngẫu nhiên có chất lượng kém hơn, trong khi randomsẽ chặn cho đến khi nó có thể thu thập dữ liệu ngẫu nhiên chất lượng cao mới. PGP yêu cầu dữ liệu ngẫu nhiên cao nhất có thể để tạo khóa bảo mật, vì vậy nó sẽ luôn sử dụng /dev/random.

Nếu bạn có dữ liệu ngẫu nhiên tốt xung quanh, hoặc xuất khẩu một số từ một máy chủ của /dev/random, bạn có thể catthành của máy chủ /dev/randomentropy để có được nhiều hơn nữa. Bạn không bao giờ nên catcùng một tập tin hai lần vào /dev/randommặc dù.

Nếu bạn thường thấy mình hết entropy, bạn cũng có thể xem xét việc cài đặt một cái gì đó như hasged , một daemon tạo lại entropy trong nền và điền lại /dev/randomkhi cần.

Ngoài ra nó có thể được hấp dẫn để liên kết mềm /dev/randomtới /dev/urandom, nhưng điều này nên được coi là một nguy cơ bảo mật như một phím bất kỳ được tạo ra sử dụng nó có thể ít đảm bảo hơn những gì họ cần. Mặc dù nó có thể giúp cho một ứng dụng ít quan trọng hơn, bạn phải xem xét mọi cách sử dụng có thể khác /dev/random, bao gồm cả những người dùng khác tạo khóa riêng, CSR, v.v.


Lưu ý rằng trên FreeBSD, /dev/randomlà một PRNG chất lượng cao và thông thường không nên chặn.
Kevin

@Kevin /dev/randomlà PRNG chất lượng cao trên BSD và Linux hiện đại, chắc chắn. Nhưng nó sẽ chặn nếu không có đủ entropy. Mặt khác, /dev/urandomsẽ không chặn nếu không có đủ nhưng chất lượng ngẫu nhiên của nó có thể bị ảnh hưởng trong trường hợp này. Trong các chi tiết có nhiều sự tinh tế giữa việc triển khai ngẫu nhiên và urandom giữa Linux và các BSD khác nhau, nhưng những điều trên phải đúng trên tất cả AFAIK.
Huygens

Trên Linux, bạn có thể tạo nhiều entropy hơn bằng cách đơn giản là ping máy chủ (ví dụ ping 8.8.8.8) nếu bạn sở hữu một máy chủ mạng khác cố gắng có ping sau mỗi 100ms (nếu RTT của bạn là <100ms). Và / hoặc sử dụng findđể tìm kiếm các tệp trên đĩa cứng của bạn và xóa bộ nhớ cache RAM giữa mỗi lần tìm kiếm tệp.
Huygens

@Huygens: Mở trang man tôi đã liên kết và Ctrl + F "kern.random.sys.seeded"; theo mặc định, /dev/randomkhông chặn trên FreeBSD.
Kevin

1
@Kevin vâng, bạn đúng, gộp chung hoặc thu hoạch entropy có lẽ là hai cách khác nhau để "gieo" PRNG. Và sau một số thử nghiệm trên hộp BSD của tôi, tôi đã phát hiện ra rằng ngẫu nhiên và urandom hoạt động theo cùng một cách, họ chặn khi họ không thể tạo ra PRNG đủ tốt. Hãy thử chạy dd if=/dev/random of=/tmp/rndtest bs=64M count=1sau khi khởi động mới, phải mất 2 lần chạy liên tiếp để xem thời gian tạo tệp tăng 64 MB. Tôi nghĩ rằng tôi sẽ không thấy hiệu ứng này với urandom là đầu vào, nhưng FreeBSD dường như cũng đang chặn nó, không giống như Linux.
Huygens


4

Tôi khuyên bạn nên tạo các khóa gpg trên máy cục bộ của mình, điều này sẽ có tính ngẫu nhiên tốt hơn nhiều so với khóa từ xa. Và sau đó di chuyển các khóa bằng SSH sang máy từ xa của bạn.

Tạo cục bộ sẽ nhanh hơn (nhiều nguồn hơn cho entropy), an toàn hơn (không ai có thể theo dõi quá trình nếu máy của bạn không bị nhiễm, tính ngẫu nhiên tốt hơn).

Nếu bạn vẫn muốn tạo chúng từ xa: Trên Linux, bạn có thể tạo nhiều entropy hơn bằng cách chỉ cần ping máy chủ (ví dụ ping 8.8.8.8) nếu bạn sở hữu một máy chủ mạng khác cố gắng có ping mỗi 100ms (nếu RTT của bạn là <100ms). Và / hoặc sử dụng findđể tìm kiếm các tệp trên đĩa cứng của bạn và xóa bộ nhớ cache RAM giữa mỗi lần tìm kiếm tệp.

Bạn cũng có thể cài đặt havegednhưng đọc các giới hạn nếu bạn đang chạy nó trong môi trường ảo: https://wiki.archlinux.org/index.php/Haveged#Virtual_machines


Theo suy nghĩ của tôi, đây là giải pháp phù hợp - +1 từ tôi.
MadHatter

3

Trên các hệ thống dựa trên Debian, bạn có thể cài đặt rng-toolsgói bằng atp-get, sau đó khởi động trình nền để tạo entropy:

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

Trên các máy chủ CentOS-6, rngtrình nền được cài đặt như một trong những công cụ cơ bản (ít nhất là trên hầu hết các hệ thống tôi đã làm việc trên nó) và bạn có thể chạy lệnh sau để khởi động nó, để tạo entropy:

sed -i \'s|EXTRAOPTIONS=\"\"|EXTRAOPTIONS=\"-r /dev/urandom\"|g\' /etc/sysconfig/rngd && service rngd restart

Tôi không nghĩ rằng việc sử dụng urandom làm nguồn cho rngd là thông minh. Nó sẽ giúp làm cạn kiệt entropy có sẵn nhanh hơn và một khi đã cạn kiệt, nó sẽ là một nguồn thiên vị cho entropy. Vì vậy, tôi sẽ tránh giải pháp này.
Huygens

1
sudo yum install haveged && sudo systemctl start haveged

chắc chắn hoạt động trên máy ảo CentOS 7.2. Đôi khi bạn muốn tạo khóa GPG trên vm nếu bạn đang tạo một bó và muốn khóa của bạn nguyên vẹn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.