2011-07-12 31 views
6

Tôi hiểu rằng thời gian là một hạt giống không an toàn để tạo số ngẫu nhiên vì nó có hiệu quả reduces the size of the seed space.Điều gì khác xảy ra khi sử dụng thời gian làm hạt giống để tạo số ngẫu nhiên?

Nhưng nói rằng tôi không quan tâm đến bảo mật. Ví dụ, nói rằng tôi đang làm một mô phỏng Monte Carlo cho một trò chơi bài. Tuy nhiên, tôi quan tâm đến việc càng gần với sự ngẫu nhiên thực sự càng tốt. Liệu thời gian làm hạt giống có ảnh hưởng đến tính ngẫu nhiên của đầu ra của tôi không? Tôi nghĩ rằng sự lựa chọn PRNG quan trọng hơn hạt giống trong trường hợp này.

Trả lời

4

Vì mục đích bảo mật, rõ ràng bạn cần một hạt giống entropy cao. Và thời gian một mình không thể cung cấp điều đó.

Đối với mục đích mô phỏng chất lượng của các hạt không quan trọng nhiều, miễn là nó là duy nhất. Như bạn đã lưu ý, chất lượng của PRNG quan trọng hơn ở đây.
Ngay cả một PRNG trong một trò chơi có thể cần phải được an toàn. Ví dụ trong các trò chơi nhiều người chơi có thể tìm ra trạng thái nội tại của PRNG và sử dụng nó để dự đoán các sự kiện ngẫu nhiên trong tương lai, đoán thẻ của đối phương, nhận ... Read More

Một thời gian sử dụng phổ biến để gieo hạt PRNG là thời gian không thay đổi thường xuyên. Ví dụ trên các cửa sổ hầu hết các chức năng liên quan đến thời gian chỉ thay đổi giá trị trả về của chúng sau mỗi vài mili giây. Vì vậy, tất cả các PRNG được tạo ra với khoảng thời gian đó sẽ trả về cùng một chuỗi.

+0

Điểm tuyệt vời về số được tạo trong cùng một đơn vị chi tiết thời gian. – pepsi

2

Nếu bạn chỉ đang chạy một phiên bản chương trình của mình, thì sẽ không có quá nhiều vấn đề.

người Tuy nhiên tôi đã thấy người bắt đầu nhiều chương trình cùng lúc và sau đó mỗi hạt giống chương trình theo thời gian. Trong trường hợp đó tất cả các chương trình được cùng một chuỗi của ngẫu nhiên số - Đặc biệt tôi đã thấy những người gieo hạt một quá trình apache tại mỗi cuộc gọi sử dụng một ngẫu nhiên numer như phiên id, chỉ để thấy rằng những người khác nhau nhấn máy chủ web cùng một lúc nhận được chính xác cùng một ID.

Do đó nếu bạn đang mong đợi để chạy nhiều phiên bản simultanous của chương trình, sau đó sử dụng thời gian là một ý kiến ​​tồi.

1

nghĩ rằng chương trình của bạn chạy rất nhanh và yêu cầu thời gian của hệ thống để sử dụng như một hạt giống trong một chuỗi lớn, với rất ít khoảng. Bạn có thể nhận được cùng một thời gian như câu trả lời, vì vậy nó sẽ kết thúc tạo ra cùng một số ngẫu nhiên. Vì vậy, ngay cả trong một mô phỏng, một entropy thấp có thể là một vấn đề.

Xem xét rằng không khó để có một số nguồn entropy khác trong hệ thống của bạn, thậm chí hệ điều hành của bạn có thể cung cấp cho bạn một số số gần như ngẫu nhiên, bạn có thể sử dụng chúng để tăng entropy dựa trên thời gian của bạn hạt giống.

3

Chỉ vì lợi ích của sự hoàn chỉnh, this paper bởi Matsumoto et al. minh họa rõ ràng tầm quan trọng của sơ đồ khởi tạo (nghĩa là cách chọn hạt giống của bạn) để mô phỏng. Hóa ra một lược đồ khởi tạo xấu có thể phân cực mạnh kết quả, mặc dù thuật toán RNG như vậy là khá tốt về nguyên tắc.

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