Cả hai /dev/randomvà /dev/urandomsử dụng một "hồ bơi entropy". Khi pool hết, /dev/randomchờ cho nó nạp đầy, yêu cầu giám sát hành vi của hệ thống (nhập bàn phím, di chuyển chuột, v.v.), trong khi đó /dev/urandomsẽ tiếp tục cung cấp cho bạn dữ liệu giả ngẫu nhiên. /dev/randomvề mặt lý thuyết là chất lượng cao hơn, nhưng /dev/urandomgần như chắc chắn đủ tốt cho mục đích của bạn. (Nhưng thậm chí /dev/urandomcó khả năng chậm hơn một số phương pháp khác. Máy phát nhanh hơn, nhưng chất lượng thấp hơn có thể đủ tốt để xóa ổ đĩa cứng. các số ngẫu nhiên này tốt hơn cho mục đích này hơn là một chuỗi như 0, 1, 2, 3, 4, ....)
Trích dẫn random(4)trang người đàn ông:
Nếu bạn không chắc chắn về việc bạn nên sử dụng /dev/randomhay
/dev/urandom, thì có lẽ bạn muốn sử dụng cái sau. Theo nguyên tắc chung, /dev/urandomnên được sử dụng cho tất cả mọi thứ trừ các khóa GPG / SSL / SSH tồn tại lâu dài.
CẬP NHẬT : Trang man `ngẫu nhiên (4) đã được cập nhật kể từ khi tôi viết nó. Bây giờ nó nói:
Các /dev/randomgiao diện được coi là một giao diện cũ, và
/dev/urandomđược ưa thích và đủ trong mọi trường hợp sử dụng, ngoại trừ các ứng dụng đòi hỏi tính ngẫu nhiên trong thời gian khởi động sớm; đối với các ứng dụng này, getrandom(2)phải được sử dụng thay thế, bởi vì nó sẽ chặn cho đến khi nhóm entropy được khởi tạo.
Xem thêm " Huyền thoại về / dev / urandom " của Thomas Hühn.
Nhưng /dev/urandom, mặc dù nó sẽ không chặn, có thể sẽ quá chậm nếu bạn muốn tạo ra lượng dữ liệu khổng lồ. Thực hiện một số phép đo trên hệ thống của bạn trước khi thử nó.
EDIT: Dưới đây là một sự lạc quan về các số ngẫu nhiên "thật" so với các số giả ngẫu nhiên. Nếu tất cả những gì bạn quan tâm là một câu trả lời thiết thực cho câu hỏi, bạn có thể ngừng đọc ngay bây giờ.
Tôi dường như đã tuyên bố (bao gồm cả trong các câu trả lời khác ở đây) /dev/randomthực hiện trình tạo số ngẫu nhiên "thật", trái ngược với trình tạo số giả ngẫu nhiên (PRNG). Ví dụ, bài viết Wikipedia đưa ra yêu cầu như vậy. Tôi không tin đó là chính xác. Có một số thảo luận về nó ở đây đề cập đến các trình tạo số ngẫu nhiên phần cứng, nhưng tôi không thấy bằng chứng nào /dev/randomthường sử dụng một thiết bị như vậy, hoặc các máy tính thông thường thậm chí có một thiết bị như vậy. Chúng khác với các PRNG như rand()hàm C ở chỗ chúng không mang tính quyết định, vì chúng thu hoạch entropy từ các nguồn thực tế không thể đoán trước.
Tôi muốn nói có ba loại trình tạo số "ngẫu nhiên":
Các PRNG xác định, như rand()hàm C , sử dụng thuật toán để tạo các chuỗi lặp lại có (ít nhiều) các thuộc tính thống kê của chuỗi thực sự ngẫu nhiên. Chúng có thể đủ tốt cho các trò chơi (được cung cấp một cách tốt để gieo chúng) và cần thiết cho các ứng dụng yêu cầu độ lặp lại, nhưng chúng không phù hợp với mật mã.
Các máy phát điện thích /dev/randomvà /dev/urandomthu thập entropy từ một số nguồn thực tế không thể đoán trước như hoạt động I / O (đây là lý do tại sao đập bàn phím hoặc di chuyển chuột có thể gây /dev/randomra nhiều dữ liệu hơn). Tôi không rõ liệu những điều này có thỏa mãn định nghĩa về PRNG hay không (tôi đã thấy các định nghĩa nói rằng PRNG là xác định), nhưng chúng không phải là các trình tạo số ngẫu nhiên thực sự .
Các bộ tạo số ngẫu nhiên phần cứng không thể đoán trước được về mặt vật lý ngay cả khi có kiến thức đầy đủ về trạng thái ban đầu của chúng và sử dụng thêm các kỹ thuật toán học để đảm bảo các thuộc tính thống kê phù hợp.