Header ads

Header ads
» »

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


Khóa học Machine Learning cơ bản- Khoa học dữ liệu - AI
==***==

Khoá học Quản trị Chiến lược Dành cho Lãnh đạo Doanh nghiệp

Nhấn vào đây để bắt đầu khóa học

==***==
Nơi hội tụ Tinh Hoa Tri Thức - Khơi nguồn Sáng tạo
Để tham gia khóa học công nghệ truy cập link: http://thuvien.hocviendaotao.com
Mọi hỗ trợ về công nghệ email: dinhanhtuan68@gmail.com
--- 

Khóa học Hacker và Marketing từ A-Z trên ZALO!

Khóa học Hacker và Marketing từ A-Z trên Facebook!

Khóa đào tạo Power BI phân tích báo cáo để bán hàng thành công

Bảo mật và tấn công Website - Hacker mũ trắng
Hacker mũ trắng
KHÓA HỌC LẬP TRÌNH PYTHON TỪ CƠ BẢN ĐẾN CHUYÊN NGHIỆP

Khóa học Lập trình Visual Foxpro 9 - Dành cho nhà quản lý và kế toán

Khóa học hướng dẫn về Moodle chuyên nghiệp và hay
Xây dựng hệ thống đào tạo trực tuyến chuyên nghiệp tốt nhất hiện nay.



Khóa học AutoIt dành cho dân IT và Marketing chuyên nghiệp

Khoá học Word từ cơ bản tới nâng cao, học nhanh, hiểu sâu


Khóa học hướng dẫn sử dụng Powerpoint từ đơn giản đến phức tạp HIỆU QUẢ
Khóa học Thiết kế, quản lý dữ liệu dự án chuyên nghiệp cho doanh nghiệp bằng Bizagi
Khoa hoc hay
Khóa học Phân tích dữ liệu sử dụng Power Query trong Excel

Khóa học Lập trình WEB bằng PHP từ cơ bản đến nâng cao

Khóa học Phân tích dữ liệu sử dụng TableAU - Chìa khóa thành công!
Nhấn vào đây để bắt đầu khóa học


Khóa học Phân tích dữ liệu sử dụng SPSS - Chìa khóa thành công!


Khóa học "Thiết kế bài giảng điện tử", Video, hoạt hình 
kiếm tiền Youtube bằng phần mềm Camtasia Studio
Khóa học HƯỚNG DẪN THIẾT KẾ VIDEO CLIP CHO DÂN MARKETING CHUYÊN NGHIỆP
Xây dựng website​​​​
HƯỚNG DẪN THIẾT KẾ QUẢNG CÁO VÀ ĐỒ HỌA CHUYÊN NGHIỆP VỚI CANVA
Hãy tham gia khóa học để trở thành người chuyên nghiệp. Tuyệt HAY!😲👍
Khoa hoc hay
MICROSOFT ACCESS



GOOGLE SPREADSHEETS phê không tưởng
Khoa hoc hay
Khóa hoc lập trình bằng Python tại đây

Hãy tham gia khóa học để biết mọi thứ

Để tham gia tất cả các bài học, Bạn nhấn vào đây 

Khóa học lập trình cho bé MSWLogo
Nhấn vào đây để bắt đầu học
Nhấn vào đây để bắt đầu học


Khóa học Ba, Mẹ và Bé - Cùng bé lập trình  TUYỆT VỜI

Khoa hoc hay

Khóa học sử dụng Adobe Presenter-Tạo bài giảng điện tử
Khoa hoc hay
Design Website

Để thành thạo Wordpress bạn hãy tham gia khóa học 
Khóa học sử dụng Edmodo để dạy và học hiện đại để thành công
==***==
Bảo hiểm nhân thọ - Bảo vệ người trụ cột
Cập nhật công nghệ từ Youtube tại link: congnghe.hocviendaotao.com
Tham gia nhóm Facebook
Để tham gia khóa học công nghệ truy cập link: http://thuvien.hocviendaotao.com
Mọi hỗ trợ về công nghệ email: dinhanhtuan68@gmail.com

Nguồn: Tinh Tế

About Học viện đào tạo trực tuyến

Xinh chào bạn. Tôi là Đinh Anh Tuấn - Thạc sĩ CNTT. Email: dinhanhtuan68@gmail.com .
- Nhận đào tạo trực tuyến lập trình dành cho nhà quản lý, kế toán bằng Foxpro, Access 2010, Excel, Macro Excel, Macro Word, chứng chỉ MOS cao cấp, IC3, tiếng anh, phần mềm, phần cứng .
- Nhận thiết kế phần mềm quản lý, Web, Web ứng dụng, quản lý, bán hàng,... Nhận Thiết kế bài giảng điện tử, số hóa tài liệu...
HỌC VIỆN ĐÀO TẠO TRỰC TUYẾN:TẬN TÂM-CHẤT LƯỢNG.
«
Next
Bài đăng Mới hơn
»
Previous
Bài đăng Cũ hơn