Sự khác biệt giữa hàm rand () và RNG (Trình tạo số ngẫu nhiên) là gì?


9

Tôi tự hỏi về RNG (Trình tạo số ngẫu nhiên) trong các MCU STM32F4XXXX. xem trong Tài liệu tham khảo này (trang 748). Mặt khác, chúng ta có hàm rand () trong thư viện stdlib thực hiện cùng một nhiệm vụ. Bây giờ tôi có hai câu hỏi:

  1. Sự khác biệt (lợi thế và bất lợi) giữa hàm rand () và RNG (Trình tạo số ngẫu nhiên) là gì?
  2. Nhìn vào phần này:

đặc trưng

Hãy giải thích về cả hai tùy chọn này (đặc biệt là tùy chọn thứ hai).

Câu trả lời:


12

Câu trả lời của Dave khá độc đáo tiếp tục nó, nhưng để làm rõ hơn một chút về tùy chọn thứ hai:

một bộ tạo số ngẫu nhiên phần cứng thực sự sử dụng một nguồn entropy vật lý. Một nguồn entropy như vậy có thể là bức xạ vũ trụ, nhiễu điện, hiệu ứng avanlanche từ một diode phân cực ngược (hoặc bóng bán dẫn BJT), mạch chua, v.v. Nguồn entropy càng ít xác định, chất lượng đầu ra ngẫu nhiên càng tốt. Một nguồn entropy lý tưởng sẽ là sử dụng hiệu ứng vật lý lượng tử, hoặc thứ gì đó không thể mô hình hóa bằng các phương trình xác định.

Một yếu tố quan trọng khác với các trình tạo số ngẫu nhiên là nguồn entropy chỉ có thể tạo ra một lượng entropy giới hạn trên một đơn vị thời gian. Một ví dụ điển hình là mạch chua: mặc dù khá ngẫu nhiên, nó có tốc độ rất kém và không thể sử dụng cho ứng dụng thực tế.

Trong nhiều bộ xử lý / vi điều khiển có RNG tích hợp, đồng hồ trôi từ 2 đến 4 đồng hồ được đồng bộ hóa không chính xác được sử dụng. Sau đó, họ sử dụng cả bộ lọc tương tự và kỹ thuật số để tạo ngẫu nhiên hơn nữa mẫu và dịch chuyển - kết quả trong một thanh ghi. Việc thực hiện lọc như vậy đòi hỏi một vài chu kỳ, điều này giải thích số lượng chu kỳ tối thiểu cần thiết trên một đồng hồ nhất định trước khi có giá trị mới hơn.

Đồng hồ trôi không phải là một hiệu ứng lượng tử, do đó nó có thể được mô hình hóa, nhưng nó đủ ngẫu nhiên, bởi vì nó phụ thuộc vào rất nhiều thông số, chẳng hạn như nhiệt độ, quá trình silicon, tần số hoạt động, tiếng ồn điện, bức xạ nền, v.v. .

Trong các ứng dụng mà RNG phần cứng không có đủ thông lượng (chẳng hạn như trong các ứng dụng mã hóa đòi hỏi cao), việc sử dụng RNG phần cứng làm hạt giống cho trình tạo số ngẫu nhiên giả như hàm rand () trong sdtlib là khá phổ biến. Tuy nhiên, ứng dụng như vậy thường cung cấp một triển khai tốt hơn của rand () được thiết kế đặc biệt để chạy từ một hạt giống có thể bị loại bỏ rất thường xuyên với các giá trị ngẫu nhiên thực sự . Trong bộ xử lý Intel mới hơn với RNG phần cứng tích hợp, phần thuật toán giả ngẫu nhiên được tích hợp trực tiếp trong silicon, do đó, nó được thực hiện bằng phần cứng, mang lại thông lượng ngẫu nhiên rất cao.

Nếu bạn quan tâm đến chính phương thức rand (), thì đó chỉ là một biểu thức toán học được thiết kế để tạo ra một lượng entropy đủ lớn. Đủ lớn để phụ thuộc vào ứng dụng: đối với các thế hệ khóa mật mã, tính ngẫu nhiên được yêu cầu phải có chất lượng cao hơn mà tính ngẫu nhiên cần có cho một ngẫu nhiên ngẫu nhiên đơn giản trong trình phát nhạc yêu thích của bạn. Rõ ràng là chất lượng của đầu ra ngẫu nhiên càng cao thì chi phí tính toán của số ngẫu nhiên càng cao.

Các hoạt động liên quan đến một số ngẫu nhiên khá giống với hoạt động liên quan đến tính toán hàm băm MD5 của tệp: chúng cố gắng sử dụng một loại hiệu ứng tuyết lở bit để một thay đổi bit trong giá trị hạt thay đổi toàn bộ mô hình tạo. Là một lưu ý phụ, tôi KHÔNG khuyên bạn nên sử dụng MD5 như một trình tạo số giả ngẫu nhiên; nó chỉ là một ví dụ Nó sẽ không hiệu quả và không quá ngẫu nhiên, nhưng vấn đề là ở chỗ: nếu bạn cung cấp cùng một tệp cho thuật toán có MD5, bạn sẽ luôn nhận được cùng một đầu ra xác định, gần giống như cách bạn sẽ luôn nhận được cùng một đầu ra từ hàm rand () nếu bạn nhập cùng một hạt giống trừ khi việc triển khai của bạn phụ thuộc vào một số phần tử tùy ý như thời gian hiện tại.


7

Sự khác biệt chính là rand()chức năng thư viện là một trình tạo số giả ngẫu nhiên - với bất kỳ giá trị bắt đầu (hạt giống) cụ thể nào, nó sẽ luôn tạo ra cùng một chuỗi số.

Mặt khác, thiết bị ngoại vi RNG là một trình tạo số ngẫu nhiên thực sự và nó sẽ tạo ra các chuỗi số không thể lặp lại.


Cảm ơn. và cả hai tùy chọn ..?
Roh

2
Cái gì "và cả hai tùy chọn ..?" nghĩa là? Có phải là một câu hỏi?
John U

2

Hai chủ đề bạn phác thảo có thể được mô tả tương đối dễ dàng:

  • 1: Bạn không thể tạo số ngẫu nhiên nhanh hơn một lần trong 40 chu kỳ đồng hồ, do đó, điều này dẫn đến 48 MHz / 40 = ~ 1M Mẫu / s
  • 2: Phần cứng chứa màn hình sẽ kiểm tra mọi số được tạo cho hành vi lạ. Ví dụ: nếu bạn sử dụng nhiệt độ làm nguồn và có môi trường nhiệt độ ổn định cao, thì RNG sẽ tạo ra một chuỗi số tương tự một lần nữa (như một trình tạo số giả ngẫu nhiên sẽ làm nếu bạn bắt đầu với cùng một giá trị hạt giống) . Thành phần này sẽ giám sát điều này và cung cấp cho bạn một tín hiệu nếu RNG hoạt động như mong đợi. Trong trường hợp bạn cần số của mình là "thực sự" ngẫu nhiên, bạn có thể muốn theo dõi cờ này để xem chúng có thực sự như vậy không. Làm thế nào chính xác điều này được thực hiện và RNG thực sự hoạt động như thế nào có thể được đưa ra trong văn bản còn lại.

1

Giả sử rằng người ta thiết kế một máy quay bánh xe roulette cơ học cung cấp năng lượng cho động cơ trong một khoảng thời gian nhất định, chờ cho bánh xe và quả bóng đến trạng thái nghỉ, và quan sát xem quả bóng đang ở trong túi nào. Thông thường sau mỗi lần quay quả bóng và bánh xe sẽ kết thúc ở một nơi hơi khác, và những thay đổi nhỏ trong vị trí của quả bóng sau một lần quay có thể tạo ra sự khác biệt lớn ở nơi nó kết thúc ở lần quay tiếp theo. Do đó, ngay cả khi động cơ luôn được cung cấp năng lượng trong cùng một khoảng thời gian, túi mà quả bóng rơi trên một vòng quay sẽ độc lập với nơi nó hạ cánh quay trước đó.

Tuy nhiên, bây giờ giả sử rằng một vài trong số các con số có hoặc phát triển một chút áp lực trong chúng, và vòng bi của động cơ phát triển các điểm phẳng. Sau đó, một số vòng quay sẽ là ngẫu nhiên, nhưng sau một vòng quay dẫn đến quả bóng rơi xuống một chỗ lõm và mang tại một điểm bằng phẳng, vòng quay tiếp theo rất có thể bị sai lệch khi có kết quả tương tự như lần quay cuối cùng xảy ra. Nếu hầu hết các spin không đồng thời đạt điểm thần thánh và điểm phẳng, sự tồn tại của chúng có thể sẽ không ảnh hưởng đến mọi thứ quá nhiều. Mặt khác, nếu một kết hợp divot / phẳng xảy ra được đặt vừa phải để một quả bóng ở đó sẽ hạ cánh một cách hợp lý trong một giây, và một quả bóng sẽ được đặt để gửi lại quả bóng đầu tiên, sau đó một quả bóng kết thúc với một số hành vi cực kỳ sai lệch.

Nếu, sau khi hạ cánh trên 4 và 23, vòng quay tiếp theo là 4, điều đó không nhất thiết chỉ ra vấn đề. Một số 4 sẽ xuất hiện khoảng 1/38 thời gian trong tình huống đó. Hơn nữa, việc thu thập dữ liệu ngẫu nhiên chỉ cần nắm được số túi, vì không có thông tin hữu ích nào về mức độ thường xuyên của quả bóng đến phần còn lại của túi. Tuy nhiên, nó có thể hữu ích cho bất cứ điều gì ghi lại các con số để "quan sát" nơi trong túi bóng dừng lại và xem bất kỳ mẫu bất thường nào. Sự phân bố các vị trí có thể bị lệch về phía trước hoặc phía sau mà không cho thấy vấn đề gì, nhưng nếu có sự tăng đột biến trong phân phối có thể gây lo ngại.

Nếu các lần đọc liên tiếp từ một trình tạo ngẫu nhiên là độc lập thống kê , việc bù cho sai lệch là không khó (mặc dù thời gian cần thiết là không điều kiện). Tuy nhiên, nếu một máy phát rơi vào trạng thái mà các số đọc không độc lập (ví dụ như trạng thái tuần hoàn của bánh xe ở trên), thì về cơ bản là không thể thực hiện được - do đó cần phải có RNG phần cứng để bao gồm mạch để phát hiện các hành vi đó.

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.