Điều gì làm cho một trình tạo giả ngẫu nhiên, một chất lượng cao?


8

Đọc câu trả lời cho câu hỏi SO này: Tại sao chúng ta không kết hợp các trình tạo số ngẫu nhiên? , nó nói về

PRNG chất lượng rất cao (Pseudo Random Number Generator)

vì vậy nó khiến tôi tự hỏi điều gì tạo nên một PRNG chất lượng cao, tôi cho rằng bạn có thể tóm tắt nó vì nó "ngẫu nhiên hơn", nhưng

  • Câu hỏi 1: Những phẩm chất nào của PRNG được sử dụng để mô tả mức độ 'ngẫu nhiên' hoặc 'tốt' của nó?

  • Câu hỏi 2: Nếu bạn có PRNG 'chất lượng kém', có cách nào để làm cho nó có chất lượng tốt hơn không?



2
Bạn cũng cần phân biệt các PRNG trần tục với các RNG bảo mật bằng mật mã.
adrianN

1
Một PRNG là 'tốt hơn' nếu khó phân biệt đầu ra của nó với các bit hoàn toàn ngẫu nhiên.
Yuval Filmus

Câu trả lời:


9

Có một số tiêu chí cho chất lượng của PRNG:

  • Nó nhanh như thế nào Điều này bao gồm tốc độ thiết lập nó nhanh như thế nào và tốc độ tạo ra một bit đơn (khấu hao) nhanh như thế nào.
  • Thật khó để đoán được bit tiếp theo được cung cấp cho tất cả các bit trước đó.
  • Thật khó để phân biệt giữa đầu ra của PRNG và các bit thực sự ngẫu nhiên.

Hai tiêu chí cuối cùng có liên quan mạnh mẽ.

Nếu bạn có PRNG chất lượng kém, bạn thường có thể làm cho nó tốt hơn bằng cách khuếch đại độ cứng . Lấy một vài bản sao của PRNG (sử dụng các khóa ngẫu nhiên khác nhau) và XOR chúng cùng nhau. Trong nhiều trường hợp (mặc dù không phải tất cả), điều này sẽ cải thiện đáng kể chất lượng của nó.


Một câu hỏi khác: Tại sao sử dụng PRNG sẽ gây ra cùng một chuỗi nếu cùng một hạt giống được sử dụng hai lần và không chỉ lấy một hạt giống mới (ví dụ đồng hồ cpu) mỗi khi cần một số ngẫu nhiên mới? Cách tiếp cận này sẽ ngẫu nhiên hơn?
Jose

2
@Jose Đây là do thiết kế. Trong nhiều trường hợp, bạn muốn có thể tạo ra cùng một chuỗi chính xác nhiều lần. Hai ví dụ là thí nghiệm Monte Carlo (cần lặp lại) và mật mã (nơi chúng tôi muốn hai người dùng sở hữu chuỗi ngẫu nhiên giống nhau, được sử dụng làm khóa).
Yuval Filmus

Các thí nghiệm ở Monte Carlo hiếm khi cần một PRNG mật mã.
Xavier Combelle

2

Có những cân nhắc thực tế: Làm thế nào dễ sử dụng? Nhanh như thế nào? Làm thế nào dễ dàng để tạo ra một chuỗi các số ngẫu nhiên khác nhau? Thật dễ dàng để phát lại các số ngẫu nhiên (ví dụ: nếu bạn đã tạo 10 tỷ số ngẫu nhiên, bạn có thể tạo lại chính xác 10 tỷ số ngẫu nhiên đó không?)

Câu hỏi lớn: Các số được tạo ra có hoạt động như một chuỗi các số ngẫu nhiên không? PRNG đầu tiên mà tôi từng sử dụng có thuộc tính kỳ lạ là hai giá trị liên tiếp, giá trị thứ hai lớn hơn với xác suất khoảng 0,6. Không ngẫu nhiên lắm. Vì vậy, bạn có thể chạy tất cả các loại kiểm tra thống kê và kiểm tra xem trình tạo số ngẫu nhiên của bạn có hoạt động theo cách ngẫu nhiên không. Nó càng hành xử như ngẫu nhiên, tốt hơn.

Và sau đó đến ngẫu nhiên mật mã. Nếu tôi cung cấp cho bạn n số ngẫu nhiên cuối cùng và kiến ​​thức đầy đủ về cách trình tạo số ngẫu nhiên hoạt động, bạn có thể dự đoán số ngẫu nhiên tiếp theo không? Nếu có, điều đó làm cho nó không phù hợp trong các tình huống mà bạn có đối thủ.


0

Tôi sẽ thêm một phân phối thống nhất vào danh sách các phẩm chất mong muốn.


Người ta thường hiểu rằng PRNG tạo ra phân phối đồng đều (hoặc gần như).
vonbrand ngày
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.