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.