2013-11-14 18 views
26

Tôi đang sử dụng /dev/urandom để tạo dữ liệu ngẫu nhiên cho các chương trình của mình. Tôi đã học được rằng /dev/random có thể trống vì không giống như /dev/urandom, nó không sử dụng SHA khi không có đủ byte được tạo. /dev/random sử dụng "hồ sơ nhân entropy". Dường như nó phụ thuộc vào thời gian trên bàn phím, chuyển động của chuột và thời gian IDE.Làm cách nào để nhân entropy hoạt động?

Nhưng điều này thực sự hiệu quả như thế nào?
Và sẽ không thể "nạp" hồ bơi entropy làm cho đầu ra/dev/ngẫu nhiên có thể dự đoán được?

+0

Imho bạn nên thay thế một trong các thẻ để đề cập đến câu hỏi này là cụ thể cho linux; dù sao, về phần 2 - không, chỉ có root mới có thể làm điều đó, người dùng bình thường chỉ có thể kết hợp dữ liệu mới, điều đó vô hại. – loreb

Trả lời

20

Những gì bạn đang nói là tại chỗ, có lý thuyết nó có thể nạp entropy vào /dev/random, nhưng bạn cần phải kiểm soát rất nhiều nguồn "nhiễu" hạt nhân cho nó là đáng kể. Bạn có thể xem nguồn cho random.c, để xem nơi /dev/random chọn tiếng ồn từ. Về cơ bản, nếu bạn kiểm soát một số lượng đáng kể các nguồn tiếng ồn, thì bạn có thể đoán những gì mà những người khác đang đóng góp vào nhóm entropy.

/dev/urandomHash chain được gieo từ /dev/random, sau đó bạn thực sự có thể dự đoán các số tiếp theo, nếu bạn biết hạt giống. Nếu bạn có đủ quyền kiểm soát hồ bơi entropy, sau đó từ đầu ra của /dev/urandom bạn có thể đoán hạt giống này, cho phép bạn dự đoán tất cả các số tiếp theo từ /dev/urandom, nhưng chỉ khi bạn giữ /dev/random cạn kiệt, nếu không /dev/urandom sẽ là reseeded.

Điều đó đang được nói, tôi chưa từng thấy bất kỳ ai thực sự làm điều đó, ngay cả trong môi trường được kiểm soát. Tất nhiên đây không phải là một sự đảm bảo, nhưng tôi sẽ không lo lắng.

Vì vậy, tôi muốn sử dụng /dev/urandom và đảm bảo rằng chương trình của tôi không chặn trong khi đợi entropy, thay vì sử dụng /dev/random và yêu cầu người dùng làm những việc ngớ ngẩn, như di chuyển chuột hoặc đập trên bàn phím.

Tôi nghĩ bạn nên đọc On entropy and randomness từ LWN, hy vọng nó sẽ làm dịu nỗi lo của bạn :-).

Nếu bạn vẫn còn lo lắng, hãy tự mình có một HRNG.

Sửa Đây là một lưu ý nhỏ trên entropy:

Tôi nghĩ rằng khái niệm entropy thường khó nắm bắt. Có một bài báo có thêm thông tin về số Wikipedia. Nhưng về cơ bản, trong trường hợp này, bạn có thể đọc entropy là ngẫu nhiên.

Vì vậy, làm thế nào tôi nhìn thấy nó, là bạn có một túi lớn của quả bóng màu, entropy cao hơn trong túi này càng khó để dự đoán màu sắc tiếp theo được rút ra từ túi.

Trong ngữ cảnh này, nhóm entropy của bạn chỉ là một chuỗi các byte ngẫu nhiên, trong đó không thể bắt nguồn từ các byte trước đó hoặc bất kỳ từ nào khác. Có nghĩa là bạn có entropy cao.

+0

Cảm ơn bạn vì câu trả lời thực sự tốt này. Là một người nói tiếng Anh không phải tiếng mẹ đẻ, từ "entropy" thật khó để có được cho tôi. Tôi đang hình dung nhóm entropy như một mảng bộ nhớ, khi được lấp đầy với 8/16 bit, in biểu tượng tương ứng, tôi có đúng không? – Antoninarto

+0

Tôi đã thêm một ghi chú nhỏ trên entropy. Hy vọng rằng điều này làm cho mọi thứ rõ ràng hơn một chút cho bạn. – jbr

2

Tôi đánh giá cao độ sâu câu trả lời của jbr.

Thêm một bản cập nhật thực tế cho bất cứ ai đang nhìn chằm chằm vào một lệnh PKI ipsec hoặc một cái gì đó chặn tương tự trên hồ bơi entropy trống:

Tôi chỉ cần cài đặt rng-công cụ trong cửa sổ khác và lệnh PKI của tôi hoàn thành.

apt-get install rng-tools 
0

Tôi đang ở giữa đọc một bài báo tại factorable và làm nốt các phần mà nó nói:

"Đối với các nhà phát triển thư viện:. Mặc định cấu hình an toàn nhất Cả OpenSSLDropbear mặc định để sử dụng /dev/urandom thay vì /dev/randomDropbear mặc định để sử dụng mức độ bảo mật kém DSA chữ ký ngẫu nhiên kỹ thuật mặc dù một kỹ thuật an toàn hơn có sẵn dưới dạng tùy chọn. "

Các tác giả giải quyết sự cân bằng của một ứng dụng bị treo khi chờ đợi entropy để xây dựng /dev/random để có được bảo mật tốt hơn so với một cách nhanh chóng, nhưng kém an toàn, là kết quả của /dev/urandom.

+0

Có thể là có bất kỳ loại sai lầm nào trong câu cuối cùng của bạn bởi vì có hai lần '/ dev/random'. –

+0

Tốt bắt, Kevin. Sự xuất hiện thứ hai phải là/dev/urandom. /dev/urandom trả lại kết quả ngay lập tức bất kể mức độ hiện diện của entropy. /dev/ngẫu nhiên sẽ đợi/treo cho một mức entropy phù hợp trước khi cung cấp kết quả . – Mike

+0

Vì chúng không chặn hết entropy, bạn có thể "hút" entropy bằng cách sử dụng nó (không có gốc), và để entropy ít hơn (hoặc không có ngoại trừ pseudo) cho các chương trình mã hóa? –

Các vấn đề liên quan