Entropy là một thuật ngữ kỹ thuật cho "Tính ngẫu nhiên". Máy tính không thực sự tạo ra entropy mà thu thập nó bằng cách xem xét các thứ như biến thể của tốc độ quay của ổ cứng (Một hiện tượng vật lý rất khó dự đoán do ma sát, v.v.) Khi máy tính muốn tạo dữ liệu giả ngẫu nhiên, nó sẽ gieo một công thức toán học với entropy thực mà nó tìm thấy bằng cách đo mouseclicks, biến thể quay của ổ cứng, v.v. Nói một cách đơn giản entropy_avail
là thước đo các bit hiện có sẵn để đọc từ/dev/random
Phải mất thời gian để máy tính đọc entropy từ môi trường của nó trừ khi nó có phần cứng mát mẻ như một diode ồn ào hoặc một cái gì đó.
Nếu bạn có sẵn 4096 bit entropy và bạn /dev/random
có thể mong đợi có thể đọc 512 byte entropy (4096 bit) trước khi chặn tệp trong khi nó chờ thêm entropy.
Ví dụ: nếu bạn đặt ra cat /dev/random
thì entropy của bạn sẽ co lại bằng không. Lúc đầu, bạn sẽ nhận được 512 byte rác ngẫu nhiên nhưng nó sẽ dừng lại và dần dần bạn sẽ thấy nhiều máng dữ liệu ngẫu nhiên hơn.
Đây không phải là cách mọi người nên hoạt động /dev/random
mặc dù. Thông thường các nhà phát triển sẽ đọc một lượng nhỏ dữ liệu, như 128 bit, và sử dụng dữ liệu đó để gieo một số loại thuật toán PRNG. Thật là lịch sự khi không đọc thêm bất kỳ entropy nào từ /dev/random
bạn cần vì phải mất quá nhiều thời gian để xây dựng và được coi là có giá trị. Do đó, nếu bạn làm cạn kiệt tệp bằng cách vô tư cat
ting tệp như trên, bạn sẽ khiến các ứng dụng khác cần đọc từ đó /dev/random
bị chặn. Trên một hệ thống tại nơi làm việc, chúng tôi nhận thấy rằng rất nhiều chức năng của tiền điện tử đang bị đình trệ. Chúng tôi đã phát hiện ra rằng một công việc định kỳ đang gọi một kịch bản python tiếp tục khởi tạoramdom.random()
trên mỗi lần chạy mà cứ sau vài giây lại chạy. Để khắc phục điều này, chúng tôi đã viết lại tập lệnh python để nó chạy như một trình nền chỉ khởi tạo một lần và công việc định kỳ sẽ đọc dữ liệu qua XMLRPC để nó không tiếp tục đọc /dev/random
khi khởi động.