Cách máy tính tạo ra số ngẫu nhiên

Máy tính tạo ra số ngẫu nhiên cho mọi thứ, từ mật mã đến trò chơi điện tử và cờ bạc. Có hai loại số ngẫu nhiên - số ngẫu nhiên “đúng” và số giả ngẫu nhiên - và sự khác biệt rất quan trọng đối với tính bảo mật của hệ thống mã hóa.

Máy tính có thể tạo ra các con số thực sự ngẫu nhiên bằng cách quan sát một số dữ liệu bên ngoài, chẳng hạn như chuyển động của chuột hoặc tiếng ồn của quạt, không thể dự đoán được và tạo dữ liệu từ đó. Điều này được gọi là entropy. Những lần khác, họ tạo ra các số "giả ngẫu nhiên" bằng cách sử dụng một thuật toán để kết quả xuất hiện ngẫu nhiên, mặc dù không phải vậy.

Chủ đề này gần đây đã trở nên gây tranh cãi nhiều hơn, với nhiều người đặt câu hỏi liệu chip tạo số ngẫu nhiên trong phần cứng của Intel có đáng tin cậy hay không. Để hiểu tại sao nó có thể không đáng tin cậy, bạn sẽ phải hiểu cách các số ngẫu nhiên được tạo ra ngay từ đầu và chúng được sử dụng để làm gì.

Số ngẫu nhiên được sử dụng để làm gì

Số ngẫu nhiên đã được sử dụng trong nhiều nghìn năm. Cho dù đó là tung đồng xu hay tung xúc xắc, mục tiêu là để kết quả cuối cùng trở thành cơ hội ngẫu nhiên. Trình tạo số ngẫu nhiên trong máy tính cũng tương tự - chúng là một nỗ lực để đạt được kết quả ngẫu nhiên, không thể đoán trước.

LIÊN QUAN:Mã hóa là gì và nó hoạt động như thế nào?

Bộ tạo số ngẫu nhiên rất hữu ích cho nhiều mục đích khác nhau. Ngoài các ứng dụng rõ ràng như tạo các số ngẫu nhiên cho mục đích đánh bạc hoặc tạo ra các kết quả không thể đoán trước trong một trò chơi máy tính, tính ngẫu nhiên rất quan trọng đối với mật mã.

Mật mã yêu cầu những con số mà kẻ tấn công không thể đoán được. Chúng ta không thể chỉ sử dụng lặp đi lặp lại những con số giống nhau. Chúng tôi muốn tạo ra những con số này theo một cách rất khó đoán để những kẻ tấn công không thể đoán được chúng. Các số ngẫu nhiên này rất cần thiết để mã hóa an toàn, cho dù bạn đang mã hóa tệp của riêng mình hay chỉ sử dụng trang web HTTPS trên Internet.

Số ngẫu nhiên đích thực

Bạn có thể tự hỏi làm thế nào một máy tính thực sự có thể tạo ra một số ngẫu nhiên. “Sự ngẫu nhiên” này đến từ đâu. Nếu đó chỉ là một đoạn mã máy tính, thì không lẽ các con số mà máy tính tạo ra có thể dự đoán được?

Thông thường, chúng tôi nhóm các số ngẫu nhiên mà máy tính tạo ra thành hai loại, tùy thuộc vào cách chúng được tạo ra: số ngẫu nhiên “Đúng” và số giả ngẫu nhiên.

Để tạo ra một số ngẫu nhiên "đúng", máy tính đo một số loại hiện tượng vật lý xảy ra bên ngoài máy tính. Ví dụ, máy tính có thể đo sự phân rã phóng xạ của một nguyên tử. Theo lý thuyết lượng tử, không có cách nào để biết chắc chắn khi nào sự phân rã phóng xạ sẽ xảy ra, vì vậy về cơ bản đây là "sự ngẫu nhiên thuần túy" từ vũ trụ. Kẻ tấn công sẽ không thể dự đoán thời điểm phân rã phóng xạ xảy ra, vì vậy chúng sẽ không biết giá trị ngẫu nhiên.

Đối với một ví dụ hàng ngày hơn, máy tính có thể dựa vào tiếng ồn trong khí quyển hoặc chỉ đơn giản là sử dụng thời gian chính xác bạn nhấn các phím trên bàn phím của mình như một nguồn dữ liệu không thể đoán trước hoặc entropy. Ví dụ: máy tính của bạn có thể nhận thấy rằng bạn đã nhấn một phím chính xác 0,23423523 giây sau 2 giờ chiều. Hãy nắm bắt đủ thời gian cụ thể liên quan đến các lần nhấn phím này và bạn sẽ có một nguồn entropy mà bạn có thể sử dụng để tạo ngẫu nhiên "đúng" con số. Bạn không phải là một cỗ máy có thể dự đoán, vì vậy kẻ tấn công không thể đoán được thời điểm chính xác khi bạn nhấn các phím này. Thiết bị / dev / random trên Linux, tạo ra các số ngẫu nhiên, "khối" và không trả về kết quả cho đến khi nó thu thập đủ entropy để trả về một số thực sự ngẫu nhiên.

Số giả ngẫu nhiên

Số giả ngẫu nhiên là một sự thay thế cho số ngẫu nhiên "đúng". Một máy tính có thể sử dụng một giá trị gốc và một thuật toán để tạo ra những con số có vẻ là ngẫu nhiên, nhưng thực tế là có thể dự đoán được. Máy tính không thu thập bất kỳ dữ liệu ngẫu nhiên nào từ môi trường.

Đây không nhất thiết là một điều xấu trong mọi tình huống. Ví dụ: nếu bạn đang chơi một trò chơi điện tử, việc các sự kiện xảy ra trong trò chơi đó là do số ngẫu nhiên “đúng” hay số giả gây ra không thực sự quan trọng. Mặt khác, nếu bạn đang sử dụng mã hóa, bạn không muốn sử dụng các số giả ngẫu nhiên mà kẻ tấn công có thể đoán được.

Ví dụ: giả sử kẻ tấn công biết thuật toán và giá trị hạt giống mà trình tạo số ngẫu nhiên sử dụng. Và giả sử một thuật toán mã hóa lấy một số giả ngẫu nhiên từ thuật toán này và sử dụng nó để tạo khóa mã hóa mà không cần thêm bất kỳ sự ngẫu nhiên nào. Nếu kẻ tấn công biết đủ, chúng có thể làm việc ngược lại và xác định số giả ngẫu nhiên mà thuật toán mã hóa phải chọn trong trường hợp đó, phá vỡ mã hóa.

NSA và Bộ tạo số ngẫu nhiên phần cứng của Intel

Để làm cho mọi thứ dễ dàng hơn cho các nhà phát triển và giúp tạo các số ngẫu nhiên an toàn, chip Intel bao gồm một trình tạo số ngẫu nhiên dựa trên phần cứng được gọi là RdRand. Con chip này sử dụng một nguồn entropy trên bộ xử lý và cung cấp các số ngẫu nhiên cho phần mềm khi phần mềm yêu cầu chúng.

Vấn đề ở đây là trình tạo số ngẫu nhiên về bản chất là một hộp đen và chúng tôi không biết điều gì đang xảy ra bên trong nó. Nếu RdRand chứa một cửa hậu NSA, chính phủ có thể phá khóa mã hóa chỉ được tạo bằng dữ liệu được cung cấp bởi trình tạo số ngẫu nhiên đó.

Đây là một mối quan tâm nghiêm trọng. Vào tháng 12 năm 2013, các nhà phát triển của FreeBSD đã xóa hỗ trợ sử dụng RdRand trực tiếp như một nguồn ngẫu nhiên, nói rằng họ không thể tin tưởng vào điều đó. [Nguồn] Đầu ra của thiết bị RdRand sẽ được đưa vào một thuật toán khác bổ sung thêm entropy, đảm bảo rằng bất kỳ cửa hậu nào trong trình tạo số ngẫu nhiên sẽ không thành vấn đề. Linux đã hoạt động theo cách này, tiếp tục ngẫu nhiên hóa dữ liệu ngẫu nhiên đến từ RdRand để nó sẽ không thể dự đoán được ngay cả khi có một cửa hậu. [Nguồn] Trong AMA gần đây (“Ask Me Anything”) trên Reddit, Giám đốc điều hành Brian Krzanich của Intel đã không trả lời câu hỏi về những mối quan tâm này. [Nguồn]

Tất nhiên, điều này có thể không chỉ là vấn đề với chip Intel. Các nhà phát triển của FreeBSD cũng gọi tên các chip của Via. Cuộc tranh cãi này cho thấy lý do tại sao việc tạo ra các số ngẫu nhiên thực sự ngẫu nhiên và không thể đoán trước lại quan trọng đến vậy.

Để tạo số ngẫu nhiên "đúng", trình tạo số ngẫu nhiên thu thập dữ liệu "entropy" hoặc dữ liệu có vẻ ngẫu nhiên từ thế giới vật chất xung quanh chúng. Đối với các số ngẫu nhiên không có thật không cần phải ngẫu nhiên, họ có thể chỉ sử dụng một thuật toán và một giá trị hạt giống.

Tín dụng hình ảnh: rekre89 trên Flickr, Lisa Brewster trên Flickr, Ryan Somma trên Flickr, huangjiahui trên Flickr


$config[zx-auto] not found$config[zx-overlay] not found