Là / dev / dữ liệu ngẫu nhiên là một cypher AES ngẫu nhiên psuedo, và entropy đến từ đâu?


8

Sự hiểu biết hiện tại của tôi về một nhóm entropy là nó tập hợp các bit dữ liệu thực sự ngẫu nhiên ở tốc độ chậm. Tôi muốn biết cách Unix & Linux thu thập entropy và cách entropy đó được sử dụng bởi / dev / Random.

Tôi đã nghe (nói chung) các phương pháp thu thập entropy, chẳng hạn như trạng thái của cpu thẻ video khi có gói mạng được chọn "ngẫu nhiên", phù hợp với yếu tố rít trong bộ chuyển đổi tương tự kỹ thuật số và các phương thức khó hiểu hơn nữa.

Tôi tin rằng "pool" entropy được khai thác khi cần và được sử dụng để tạo một trình tạo ngẫu nhiên psuedo ....

Tôi không theo câu trả lời sâu sắc, nhưng tôi muốn biết liệu đây có phải là cách tiếp cận chung được sử dụng bởi Unix / Linux không? .. và có lẽ một số gợi ý về những gì đang thực sự xảy ra ở mặt than thu thập entropy. .. và sau đó, những gì các entropy đưa vào .. có một mật mã AES Rijndael là?

Thông tin cơ bản cho các đồng đội của tôi ở trên, đến từ Bảo mật của Steve Gibson ! podcast: Tập # 301 Đi ngẫu nhiên, Phần 2 trên 2 ... Anh ấy chỉ nói một cách khái quát (nhưng phong cách của anh ấy, với đủ chi tiết và rõ ràng để thậm chí tôi có thể hiểu anh ấy. Đã nghe 300 tập trước giúp :), ... và tôi muốn biết liệu đây có phải là cách Unix / Linux thực hiện không ...


Câu trả lời:


14

Linux có hai trình tạo số ngẫu nhiên có sẵn cho không gian người dùng /dev/random/dev/urandom.

/dev/randomlà một nguồn ngẫu nhiên "thật" - tức là nó không được tạo bởi bộ tạo số giả ngẫu nhiên. Entropy được đưa vào điều này bởi trình điều khiển đầu vào và trình xử lý ngắt, thông qua các chức năng add_input_randomnessadd_interrupt_randomness. Các quy trình đọc thiết bị này sẽ chặn nếu entropy hết.

/dev/urandomlà một trình tạo số giả ngẫu nhiên. Nó được nuôi dưỡng bởi cùng một nhóm entropy như /dev/random, nhưng khi hết, nó chuyển sang một trình tạo mã hóa mạnh.

Các ứng dụng không gian người dùng có thể đưa vào nhóm entropy bằng cách viết vào /dev/{,u}random.

Đọc trang hướng dẫn ngẫu nhiên (4) và tệp drivers/char/random.ctrong cây nguồn kernel. Nó được bình luận tốt và hầu hết những gì bạn yêu cầu được giải thích ở đó.


/dev/randomTheo mặc định, FreeBSD là một trình tạo số giả ngẫu nhiên bằng thuật toán Yarrow (nhưng có thể trỏ đến RNG phần cứng nếu được kết nối). Trình tạo phần mềm lấy entropy từ Ethernet và các kết nối nối tiếp và ngắt phần cứng (có thể thay đổi thông qua sysctl kern.random). Thuật toán Yarrow được cho là an toàn miễn là trạng thái bên trong không xác định, do đó /dev/randomphải luôn xuất dữ liệu chất lượng cao mà không bị chặn. Xem ngẫu nhiên (4) .

Trên NetBSD, /dev/randomcung cấp dữ liệu ngẫu nhiên dựa chỉ trên entropy thu (từ đĩa, mạng, các thiết bị đầu vào, và / hoặc ổ đĩa băng; điều chỉnh sử dụng rndctl ), trong khi /dev/urandomrơi trở lại một PRNG khi hồ bơi entropy là trống rỗng, tương tự như Linux. Xem ngẫu nhiên (4) , rndctl (8) , rnd (9) .

OpenBSD có bốn trình tạo: /dev/randomlà trình tạo phần cứng, /dev/srandomlà trình tạo dữ liệu ngẫu nhiên an toàn (sử dụng MD5 trên nhóm entropy: "ngắt và thiết bị mạng và như vậy"), /dev/urandomtương tự nhưng lại rơi vào PRNG khi nhóm entropy trống. Thứ tư, /dev/arandomcũng là một PRNG nhưng sử dụng RC4 . Xem ngẫu nhiên (4) , arc4random (3) .

Mac OS X cũng sử dụng thuật toán Yarrow cho /dev/random, nhưng có /dev/urandomkhả năng tương thích giống hệt nhau . "Entropy bổ sung được đưa vào trình tạo thường xuyên bởi trình nền SecurityServer từ các phép đo jitter ngẫu nhiên của kernel." Xem ngẫu nhiên (4) .


Cảm ơn. Một tổng quan tốt, và từ nguồn, tôi thấy chúng tôi an toàn trong tay của Sổ đăng ký thay đổi phản hồi tổng quát xoắn (thứ đáng sợ :) ... Cùng với các đầu vào "ngẫu nhiên" khó hiểu cho nhóm, có vẻ như hàm băm SHA là đã tạo ra "trên toàn bộ nhóm, 16 từ (512 bit) tại một thời điểm" và trộn lại vào nhóm, và sau đó một vài điều hướng khác được thực hiện trên nhóm ... Steve Gibson nhận xét trong podcast của mình rằng: SHA-256 sử dụng / là hàm băm hiện đại nhất mà chúng ta có. ... Tôi đã không khám phá ra những gì tạo ra / dev / urandom đầu ra, nhưng quá trình dẫn đầu chắc chắn rất có ý nghĩa
Peter.O

+1, câu trả lời tốt; Tôi đã từng cố gắng tạo dữ liệu ký tự ngẫu nhiên cat /dev/randomvà luôn tự hỏi tại sao luồng của tôi dừng lại sau quá nhiều ký tự
Mike Pennington
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.