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ử.
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.
Nguồn:Baochinhphu.vn