Trường hợp / dev / urandom thu thập các biến này từ đâu.
Ở mọi nơi nó có thể, chủ yếu là thời gian gián đoạn. Ví dụ: nếu bạn có card mạng, thời gian chính xác mà gói tin đến sẽ bị ảnh hưởng bởi độ lệch giữa cơ sở thời gian tinh thể trên card mạng và cơ sở thời gian tinh thể đồng hồ CPU. Sự bù trừ giữa hai bộ dao động tinh thể thạch anh bị ảnh hưởng bởi các biến đổi nhiệt độ vùng vi mô được cho là thực sự ngẫu nhiên.
Nếu bạn có đĩa quay, thời gian đọc sẽ hoàn thành phụ thuộc vào tốc độ đĩa quay. Điều này bị ảnh hưởng bởi lực cắt hỗn loạn giữa bề mặt đĩa và không khí bên trong cụm đĩa. Mặc dù điều này không được tin là ngẫu nhiên thực sự, nhưng nó hoàn toàn không thể đoán trước hoặc lặp lại bởi bất kỳ cơ chế đã biết nào.
Và nếu bạn có hai máy được đặt cùng một lúc (giảm đến mili giây - nếu có thể) và có cùng tốc độ, HĐH, v.v ... và lấy một số thập phân / dev / ngẫu nhiên với số byte X, chúng sẽ có cùng một giá trị chính xác (vì thời gian là như nhau)?
Chà, một phần nghìn giây sẽ không đủ tốt. Bạn cần ở cùng cấp độ với CPU, đo thời gian - một phần tỷ giây. Nhưng, tất nhiên, đó là cách nó phải được. Mặt khác, nếu bạn thấy trạng thái của một máy, bạn có thể biết chắc chắn 100% rằng máy kia không thể có trạng thái tương tự. Và vì trạng thái được coi là ngẫu nhiên, bạn không thể nhìn vào bất kỳ máy nào khác và biết bất cứ điều gì về trạng thái với sự chắc chắn 100%. Chừng nào tỷ lệ cược này có thể đạt được là đủ thấp (giả sử, ít hơn một trong 2 ^ 100), thì nó hoàn toàn ổn.
Ngay cả khi bạn tung hai con xúc xắc, mỗi con có một tỷ cạnh, chúng có thể xuất hiện như nhau. Với điều kiện họ chỉ làm như vậy một lần trong một tỷ lần, thì đó là điều nên làm.