Làm thế nào tôi có thể xác định các giá trị ban đầu của trình tạo số giả ngẫu nhiên nếu chuỗi được đưa ra?


10

Giả sử tôi biết rằng một chuỗi số ngẫu nhiên được tạo bởi một bộ tạo cộng tuyến tính. Đó là,

xn+1=(aXn+c)modm

Nếu tôi được cung cấp toàn bộ thời gian (hoặc ít nhất là một phần tiếp theo lớn của nó), làm thế nào tôi có thể xây dựng lại các tham số và đã tạo ra chuỗi này? Tôi đang tìm kiếm một phương pháp chung có thể xác định các tham số ban đầu nếu biết trình tạo số giả ngẫu nhiên.x 0a,c,mx0


Chính xác thì biết gì? Từ một phân nhóm liền kề, bạn không thể biết chuỗi bắt đầu , trừ khi các mục được lập chỉ mục theo thứ tự. Nếu được biết, thì và dễ dàng được phát hiện. m a cx0mac
hardmath

Câu trả lời:


10

Xem bài viết Cách bẻ khóa Máy phát điện tuyến tính , Haldir ("Nhóm kỹ thuật đảo ngược", tháng 12 năm 2004):

Trong bài viết này tôi sẽ trình bày một phương pháp sẽ giải quyết tất cả các giá trị của LCG bao gồm cả mô đun với sáu hoặc nhiều số đầu ra PRNG liên tiếp.

Bài viết bao gồm mã nguồn "bằng chứng của khái niệm" được viết bằng C, sử dụng NTL của Victor Shoup cho số học chính xác mở rộng.


Đó là một bài báo tuyệt vời! :) Bạn có biết một phương pháp tổng quát hơn có thể áp dụng cho các trình tạo số ngẫu nhiên khác, không chỉ là đồng quy tuyến tính không?
Paul

@Paul: Tất nhiên người ta có thể tìm thấy các RNG dễ dàng được "giải quyết" cho các tham số của họ từ dữ liệu đầu ra đủ (vấn đề nghịch đảo), nhưng dường như RNG càng tốt (xuất hiện đầu ra càng ngẫu nhiên), càng khó khăn hơn vấn đề sẽ là. Giải pháp của trường hợp LCG có liên quan đến các hiệu ứng phân cụm theo chiều nhất định đã được biết đến, làm cho các cặp giá trị được tạo không phân bố không đồng nhất. Để biết thêm chi tiết, hãy xem Thiết kế của trình tạo mã hóa mạnh bằng cách chuyển đổi các chuỗi được tạo tuyến tính
hardmath
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.