Aloha!
Có một số phương pháp và công cụ để thử nghiệm tính ngẫu nhiên. Chúng được áp dụng trên một tập hợp các số được thu thập từ máy phát điện để được kiểm tra. Tức là, bạn kiểm tra trình tạo máy phát điện dựa trên một bộ dữ liệu được tạo.
Trong tính toán, đặc biệt là đối với bảo mật CNTT, chúng tôi thường muốn có một trình tạo phù hợp với quy trình ngẫu nhiên thống nhất. Có rất nhiều quy trình khác nhau, nhưng tôi đoán rằng đó là một quy trình thống nhất mà bạn đang hướng đến.
NIST đã xuất bản một số tài liệu với các đề xuất trên cả hai trình tạo số ngẫu nhiên giả cũng như cách kiểm tra chúng. Xem các tài liệu NIST SP 800-22 và SP 800-20.
Như người khác đã chỉ ra. Nếu bạn muốn một Trình tạo số ngẫu nhiên thực (TRNG), bạn cần thu thập entropy vật lý. Ví dụ về các nguồn như vậy là phân rã phóng xạ, bức xạ vũ trụ, đèn dung nham, vv Tốt hơn là bạn muốn các nguồn khó thao tác. IETF có RFC có một số khuyến nghị tốt, xem RFC 4086 - Nguồn ngẫu nhiên cho bảo mật: http://tools.ietf.org/html/rfc4086
Điều bạn thường làm là thu thập entropy từ một quặng hơn (tốt hơn một nguồn). Các dữ liệu thu thập được sau đó lọc (làm trắng) và cuối cùng được sử dụng để định kỳ gieo một PRNG tốt. Với hạt giống khác nhau, tự nhiên.
Đây là cách máy phát ngẫu nhiên tốt nhất hiện đại hoạt động. Một bộ thu entropy cho phép một PRNG được tạo ra bằng cách sử dụng các nguyên thủy mật mã như mật mã đối xứng (AES chẳng hạn) hoặc các hàm băm. Xem ví dụ các máy phát điện ngẫu nhiên Yarrow/Fortuna bởi Schneier, mà trong hình thức sửa đổi được sử dụng trong FreeBSD.
Quay lại câu hỏi của bạn về thử nghiệm. Như một người nào đó đã chỉ ra Marsaglia đã tạo ra một bộ kiểm tra tốt, được mã hóa trong các bài kiểm tra DIEHARD. Hiện tại, có nhiều bộ kiểm thử hơn nữa trong các bài kiểm tra của Dieharder: http://www.phy.duke.edu/~rgb/General/dieharder.php
Dieharder là một công cụ tốt giúp bạn có được một số lượng lớn các số được cung cấp cho nó (được thu thập từ máy phát). với chất lượng tốt) hay không. Chạy Dieharder thật dễ dàng, nhưng sẽ mất một thời gian.
Thử nghiệm ngẫu nhiên tại chỗ rất khó. Bạn thường không muốn thực hiện Dieharder trong hệ thống của bạn. Những gì bạn có thể làm là thực hiện một số máy dò đơn giản mà nên phát hiện các trường hợp patholigical. Tôi thường đề xuất:
Độ dài giá trị bằng nhau. Một bộ đếm đơn giản được đặt lại bất cứ khi nào hai giá trị hậu quả được tạo ra bởi RNG khác nhau. Và sau đó bạn cần xác định ngưỡng khi bạn nghĩ bộ đếm cho thấy RNG bị hỏng. Nếu bạn thấy 10 triệu giá trị bằng nhau và không gian giá trị lớn hơn một giá trị (cái bạn thấy) thì RNG của bạn có lẽ không hoạt động tốt. Esp nếu giá trị nhìn thấy là một trong các giá trị cạnh. Ví dụ: 0x00000 .... hoặc 0xfffff ...
Giá trị trung vị.Nếu bạn sau khi tạo ra một triệu giá trị và có một phân bố đồng đều có giá trị trung bình mà nghiêng về phía một trong các cạnh không gian giá trị, không gần với giá trị trung bình, đôi khi có lẽ cũng không ổn.
Phương sai. Nếu bạn sau khi tạo ra hàng triệu giá trị chưa thấy giá trị gần với MIN và MAX của không gian giá trị, nhưng thay vào đó có một không gian giá trị được tạo ra hẹp, thì cái gì đó cũng không ổn.
Cuối cùng. Vì bạn hy vọng đang sử dụng một PRNG tốt (dựa trên AES chẳng hạn), các thử nghiệm tại chỗ được đề xuất thay vào đó có thể được áp dụng trên nguồn entropy.
Tôi hy vọng điều đó sẽ giúp ích theo một số cách.
http://dilbert.com/strips/comic/2001-10-25/ –
'if (KnownRandomFunction() == RandomFunctionToTest()) {return" Thật ngẫu nhiên! " } ' –
Điều gì là" không thuyết phục "về kết quả? –