/dev/random
sử dụng thời gian của các hạt nhân xen kẽ để thêm vào nhóm entropy. Số lượng entropy trong nhóm được theo dõi trong một biến có tên entropy_count
.
Đây là đoạn mã có liên quan từ random.c
. Nó đại diện cho thời gian (trong jiffies tôi nghĩ) giữa hai lần xen kẽ cuối cùng trong biến delta
và sự khác biệt về đồng bằng như delta2
.
delta = time - state->last_time;
state->last_time = time;
delta2 = delta - state->last_delta;
state->last_delta = delta;
if (delta < 0) delta = -delta;
if (delta2 < 0) delta2 = -delta2;
delta = MIN(delta, delta2) >> 1;
for (nbits = 0; delta; nbits++)
delta >>= 1;
r->entropy_count += nbits;
/* Prevent overflow */
if (r->entropy_count > POOLBITS)
r->entropy_count = POOLBITS;
Có vẻ như ước tính của entropy được thêm vào thực chất là sàn (không phải trần vì bithift ban đầu trước vòng lặp) của logarit cơ sở 2 của delta. Điều này có ý nghĩa trực quan, mặc dù tôi không chắc những giả định nào sẽ cần thiết để thực hiện chính xác điều này.
Vì vậy, câu hỏi đầu tiên của tôi là "lý do đằng sau ước tính này là gì?"
Câu hỏi thứ hai của tôi là về delta = MIN(delta, delta2) ...
. Cái này làm gì Tại sao lấy tối thiểu của đồng bằng này và cuối cùng? Tôi không biết những gì cần phải đạt được - có lẽ nó làm cho ước tính tốt hơn, có thể chỉ là bảo thủ hơn.
Chỉnh sửa: Tôi đã tìm thấy một bài viết chỉ định ước tính , nhưng nó không thực sự đưa ra một lý lẽ hợp lý cho nó (mặc dù nó phác thảo một số điều kiện không chính thức mà người ước tính sẽ đáp ứng).
Các tài nguyên khác đã được đưa ra trong các ý kiến:
- Wikipedia trên
/dev/random
và/dev/urandom
- Một bài báo cố gắng giải thích nó (Tôi nghi ngờ về nó, xem bình luận)
- Một bài đăng trên blog
/dev/random
với ý kiến từ anh chàng đã viết mã ở trên. - Một bí mật.SE trả lời về
/dev/random
hồ bơi entropy.
/dev/random
là trên một nền tảng run rẩy - xem nhóm entropy ngẫu nhiên / ăn / ngẫu nhiên? . Tôi đã ping Thomas với hy vọng anh ấy sẽ trả lời câu hỏi của bạn.