Máy tính không thể tạo số ngẫu nhiên thực, vậy chúng làm điều đó bằng cách nào?

Elair Maika
27/8/2025 14:39Phản hồi: 12
EditEdit
Máy tính không thể tạo số ngẫu nhiên thực, vậy chúng làm điều đó bằng cách nào?
Khi nghĩ về sự ngẫu nhiên, người ta thường hình dung những kết quả không thể đoán trước như việc tung xúc xắc hoặc xáo một bộ bài. Tuy nhiên, dù có sức mạnh lớn, máy tính không thể đạt được sự ngẫu nhiên thực sự. Thay vào đó, chúng dựa vào các thuật toán toán học phức tạp để mô phỏng sự ngẫu nhiên tạo ra cái gọi là "ngẫu nhiên giả" hay pseudo-randomness.

Máy tính là cỗ máy được lập trình


Theo thiết kế, máy tính là những cỗ máy được định trước. Mọi thao tác chúng thực hiện đều tuân theo một bộ hướng dẫn cụ thể, dẫn đến kết quả có thể đoán trước và tái tạo được. Khả năng dự đoán được này là yếu tố cần thiết cho độ tin cậy và nhất quán trong quá trình hoạt động của máy tính, nhưng cũng là điều khiến máy tính khó đạt được sự ngẫu nhiên thực sự. Sự ngẫu nhiên thực sự khi nào không có quy luật hoặc không thể dự đoán, trong khi máy tính được cấu tạo để thực hiện các thuật toán logic và chính xác nên không có chỗ cho sự bất ngờ xuất hiện.

Randomness-BANNER-scaled.jpg

Các thuật toán mà máy tính sử dụng để tạo sự ngẫu nhiên được gọi là pseudo-random number generators - những trình tạo số giả ngẫu nhiên. Chúng hoạt động dựa trên các giá trị đầu vào ban đầu, còn gọi là các seed. Với cùng một seed, bộ tạo số giả ngẫu nhiên sẽ luôn tạo ra chuỗi số giống hệt nhau. Tất nhiên, đối với các tác vụ đòi hỏi sự bảo mật cao, như mật mã học, thì tỷ lệ có thể đoán được dù nhỏ cũng không thể chấp nhận. Tuy nhiên bộ tạo mã ngẫu nhiên giả, kết hợp seed với một số thông tin khác sẽ tạo ra các giá trị “đủ ngẫu nhiên” để đáp ứng tốt các nhu cầu hiện tại hàng ngày.

Để tiến gần tới sự ngẫu nhiên, máy tính đôi khi kết hợp các nguồn "nhiễu" bên ngoài, thí dụ như dao động nhiệt, thời gian gõ phím hoặc nhiễu điện tử trong mạch vốn là những thông số bị ảnh hưởng bởi thế giới vật lý và do đó ít có thể bị dự đoán hơn. Đây gọi là các entropy - những nguồn dữ liệu không thể dự đoán trước đến từ thế giới thực. Khi kết hợp các entropy từ phần cứng với các thuật toán, chúng ta sẽ có một seed để tạo nên giá trị tiệm cận với ngẫu nhiên mà chúng ta muốn.

Tuy nhiên đối với những yêu cầu bảo mật cao hơn, những nguồn ngẫu nhiên này vẫn có thể không đủ ngẫu nhiên và đôi khi yêu cầu xử lý hậu kỳ để làm cho chúng ngẫu nhiên nhất có thể.

Tính toán sự ngẫu nhiên


Một trong những thuật toán đơn giản nhất để tạo sự ngẫu nhiên là Linear Congruential Generator (LCG). Công thức của LCG là sự kết hợp giữa hằng và một biến số seed khởi đầu: X(n+1) = aXn + c mod m. Trong đó, Xn là số hiện tại, a, c, và m là các hằng số, còn X0 là giá trị khởi đầu (seed). Nếu dùng cùng seed và hằng số, chuỗi số tạo ra sẽ giống nhau và lặp lại sau một thời gian. Vì tính chất này, LCG không phù hợp cho các ứng dụng bảo mật, nhưng lại rất hiệu quả trong các trò chơi điện tử.

maxresdefault.jpg

Lấy ví dụ về trò chơi Pokemon. Các game Pokémon Stadium, Pokémon Colosseum và các phiên bản Gen III và IV đều sử dụng LCG 32-bit để tạo ra các sự kiện “ngẫu nhiên” như tỉ lệ bắt Pokémon hay sát thương chí mạng. Dù không thực sự ngẫu nhiên, kết quả vẫn đủ để tạo cảm giác bất ngờ cho người chơi. Từ thế hệ V, Pokemon chuyển sang dùng một thuật toán có khả năng tạo ra chuỗi số dài hơn và có tính ngẫu nhiên thống kê cao hơn là Mersenne Twister. Tuy nhiên, nó vẫn là giả ngẫu nhiên và không đủ an toàn cho các ứng dụng như mã hóa.

Để tăng thêm tính bảo mật cho các nhu cầu cao hơn, người ta sẽ đưa vào thêm một lớp nữa chính là các entropy đề cập bên trên. Entropy có thể đến từ các nguồn như chuyển động chuột, thời gian gõ phím hoặc các thiết bị phần cứng chuyên dụng thu noise điện tử. Entropy này sau đó được kết hợp với đầu ra của thuật toán để làm cho kết quả khó đoán trước hơn, đạt được cái gọi là "bộ tạo số ngẫu nhiên thực sự". Tuy nhiên, sự ngẫu nhiên thực sự rất khó nắm bắt, ngay cả với các phương pháp dựa trên entropy vì chúng vẫn yêu cầu xử lý để đảm bảo chất lượng và tính nhất quán.

Nếu bạn đã từng tạo khóa RSA trên máy tính của mình bằng một chương trình như PuttyGen, nó có thể đã yêu cầu bạn di chuyển chuột xung quanh màn hình để tạo khóa. Đây chính là cách để tạo ra entropy để nó có thể sử dụng để tạo cặp khóa công khai và riêng tư một cách an toàn.

Trên đây chỉ là một thí dụ về cách mà người ta tìm cách tạo ra sự ngẫu nhiên trong máy tính. Nếu bạn thường xuyên chơi game, nhiều khả năng các sự kiện "ngẫu nhiên" mà bạn đối mặt không thực sự ngẫu nhiên, mà chỉ là ngẫu nhiên "có thể cảm nhận được". Điều này đặt ra một thách thức cho các nhà phát triển cần đầu ra ngẫu nhiên và giải pháp là tạo ra các thuật toán khiến nó trông có vẻ ngẫu nhiên. Bạn có thể không nhận ra sự khác biệt, nhưng nếu bạn muốn thao túng một thứ gì đó “ngẫu nhiên” trên máy tính thì rất có thể, điều đó là khả thi.

Quảng cáo

12 bình luận

Xu hướng

Uk đúng.
Con người không thể thao túng, nhưng máy tính có thể thao túng.
Bảo sao không thể thắng mấy trò may rủi.
VD: chọn số ngẫu nhiên từ 1 đến 9
1. Tính thời gian kích chuột (ms)
2. Khai căn, lũy thừa để làm phức tạp và làm nhiễu số liệu.
3. Chọn số từ dãy số tạo ra.
Con người sẽ không thể tính được hoặc thao tác chính xác đến ms.
Còn máy tính thì hoàn toàn có thể nếu biết hết các biến số.
...
Chắc phải máy tính lượng tử thì mới có khái niệm ngẫu nhiên thực sự.
ngẫu nhiên tưởng chừng là thứ đơn giản, nhưng hóa ra lại là thứ phức tạp
Trong cuộc sống cũng ko có sự ngẫu nhiên thật, người ta nói triệu hạt mưa ko có hạt nào rơi nhầm chỗ
Mỗi hạt mưa đều có nhân quả của nó
Cười vô mặt
Các nhà đài bán vé số: Tạo một loạt số ngẫu nhiên sao cho không trùng với dữ liệu số đã bán ra.
@Bạn và 500 Anh Em Chắc chưa chơi vé số bao giờ đúng ko 😁. Chọn 6 số trong khoảng từ 0 đến 9 tạo thành 1 dãy 6 số thì có 1tr trường hợp. Mà tụi kiến thiết nó phát hành đủ 1tr số ra trong ngày thì chắc chắn số đb nằm ở đại lý nào đó thôi chứ gian lận né số cũng ko dc. Trừ vé 000000 này là ko đưa ra đại lý vì ko ma nào mua :D
@Crazylove4u Gian lận được chứ bạn. Công ty xổ số biết được vé nào đã bán vé nào không chứ, tới 4h chiều là những vé không bán được sẽ thu hồi về, rồi 1 tiếng sau nó mới xổ số, 1 tiếng đó là nó thống kê được rồi. Đại lý nào mà dám ôm những vé không bán được, chắc gì đã trúng mà dám ôm
@Crazylove4u Thế à? Vậy mình nhầm
@Bạn và 500 Anh Em CHị Hai Đai Nam khui ra vụ xổ số kiến thiết này rồi mà
@Kelvin1992 có cái nồi ấy t trong hội đồng giám sát sổ xố đây. ra kết quả rồi nhập máy còn chưa xong. việc của tao là dí mắt xem có bọn nào gửi kết quả vào không
Thật ra random giả cũng có cái hay. Ví dụ như làm 3D mô phỏng nước, lửa mà mỗi lần random ra 1 kết quả khác nhau là mệt đó 😂
Ngẫu nhiên là gì , có chắc chắn là thật sự tồn tại sự ngẫu nhiên không ?
@φιλοσοφία Có tồn tại và tồn tại vô số các sự kiện và hiện tượng ngẫu nhiên là đằng khác.
Ngẫu nhiên nghĩa là không biết / chưa biết được quy luật nó xảy ra và không tính toán / chưa tính toán được khả năng nó xảy ra, thì là ngẫu nhiên, vậy thôi.

Xu hướng

Bài mới








  • Chịu trách nhiệm nội dung: Trần Mạnh Hiệp
  • © 2025 Công ty Cổ phần MXH Tinh Tế
  • Địa chỉ: 70 Bà Huyện Thanh Quan, P. Xuân Hoà, TPHCM
  • Số điện thoại: 02822460095
  • MST: 0313255119
  • Giấy phép cung cấp dịch vụ MXH số 134/GP-BVHTTDL, Ký ngày: 30/09/2025