Giải thích bằng tiếng Anh đơn giản về Entropy có sẵn


28

Nếu tôi chạy lệnh này trong Ubuntu

sudo cat /proc/sys/kernel/random/entropy_avail

nó trả về một số cho biết có bao nhiêu "entropy" có sẵn cho kernel, nhưng đó là tất cả những gì tôi biết. Đơn vị này được đo bằng đơn vị nào? Cái này được dùng để làm gì? Tôi đã nói rằng nó "xấu" nếu con số đó là "thấp". Làm thế nào thấp là "thấp" và những gì "xấu" sẽ xảy ra nếu nó là? Một phạm vi tốt cho nó là gì? Nó được xác định như thế nào?

Câu trả lời:


22

Hệ thống của bạn tập hợp một số số ngẫu nhiên "thực" bằng cách theo dõi các sự kiện khác nhau: hoạt động mạng, trình tạo số ngẫu nhiên phần cứng (nếu có; ví dụ, bộ xử lý VIA thường có trình tạo số ngẫu nhiên "thực"), v.v. Nếu cung cấp cho nhóm entropy kernel, được sử dụng bởi / dev / Random. Các ứng dụng cần một số bảo mật cực đoan có xu hướng sử dụng / dev / ngẫu nhiên làm nguồn entropy của chúng, hay nói cách khác là nguồn ngẫu nhiên.

Nếu / dev / ngẫu nhiên hết entropy có sẵn, nó không thể phục vụ ngẫu nhiên nhiều hơn và ứng dụng đang chờ các quầy ngẫu nhiên cho đến khi có thêm nhiều thứ ngẫu nhiên. Ví dụ tôi đã thấy trong sự nghiệp của mình là trình nền Cyrus IMAP muốn sử dụng / dev / ngẫu nhiên cho tính ngẫu nhiên và các phiên POP của nó muốn tạo chuỗi ngẫu nhiên trong các kết nối APOP từ / dev / ngẫu nhiên. Trong một môi trường bận rộn, có nhiều nỗ lực đăng nhập hơn lưu lượng truy cập để cung cấp / dev / ngẫu nhiên -> mọi thứ bị đình trệ. Trong trường hợp đó, tôi đã cài đặt các công cụ rng và kích hoạt rngd mà nó có - đã chuyển các số bán ngẫu nhiên từ / dev / urandom sang / dev / ngẫu nhiên trong trường hợp / dev / ngẫu nhiên hết entropy "thực".


19

Nếu bạn muốn có một cái nhìn tổng quan đơn giản hơn về vấn đề tiềm ẩn: Một số ứng dụng (như mã hóa) cần số ngẫu nhiên. Bạn có thể tạo số ngẫu nhiên bằng thuật toán - nhưng mặc dù những số này có vẻ ngẫu nhiên theo một nghĩa nào đó nhưng chúng hoàn toàn có thể dự đoán theo nghĩa khác. Chẳng hạn, nếu tôi đưa cho bạn các chữ số 58209749445923078164062862089986280448253421170679, chúng trông khá ngẫu nhiên. Nhưng nếu bạn nhận ra chúng thực sự là chữ số của PI, thì bạn sẽ biết cái tiếp theo sẽ là 8.

Đối với một số ứng dụng, điều này là ổn, nhưng đối với các ứng dụng khác (đặc biệt là các ứng dụng liên quan đến bảo mật), mọi người muốn có sự ngẫu nhiên thực sự không thể đoán trước - không thể được tạo bởi thuật toán (tức là chương trình) vì đó là định nghĩa có thể dự đoán được. Đây là một vấn đề trong đó máy tính của bạn về cơ bản một chương trình, vậy làm thế nào nó có thể có được các số ngẫu nhiên chính hãng? Câu trả lời là bằng cách đo các sự kiện ngẫu nhiên thực sự từ thế giới bên ngoài - ví dụ như khoảng cách giữa các phím bấm của bạn và sử dụng chúng để đưa tính ngẫu nhiên thực sự vào trình tạo số ngẫu nhiên có thể dự đoán được. Pool Nhóm entropy 'có thể được coi là kho lưu trữ của tính ngẫu nhiên này được tạo ra bởi tổ hợp phím (hoặc bất cứ thứ gì đang được sử dụng) và bị cạn kiệt bởi việc tạo ra các số ngẫu nhiên.


2
Lời giải thích tuyệt vời ...
pradipta 23/07/13

Nhưng PI là không hợp lý và nó sẽ bao gồm mọi chuỗi bao gồm chuỗi trên theo sau là 9 (thay vì 8).
Ajay Brahmakshatriya

9

Entropy là một thuật ngữ kỹ thuật cho "Tính ngẫu nhiên". Máy tính không thực sự tạo ra entropy mà thu thập nó bằng cách xem xét các thứ như biến thể của tốc độ quay của ổ cứng (Một hiện tượng vật lý rất khó dự đoán do ma sát, v.v.) Khi máy tính muốn tạo dữ liệu giả ngẫu nhiên, nó sẽ gieo một công thức toán học với entropy thực mà nó tìm thấy bằng cách đo mouseclicks, biến thể quay của ổ cứng, v.v. Nói một cách đơn giản entropy_availlà thước đo các bit hiện có sẵn để đọc từ/dev/random

Phải mất thời gian để máy tính đọc entropy từ môi trường của nó trừ khi nó có phần cứng mát mẻ như một diode ồn ào hoặc một cái gì đó.

Nếu bạn có sẵn 4096 bit entropy và bạn /dev/randomcó thể mong đợi có thể đọc 512 byte entropy (4096 bit) trước khi chặn tệp trong khi nó chờ thêm entropy.

Ví dụ: nếu bạn đặt ra cat /dev/randomthì entropy của bạn sẽ co lại bằng không. Lúc đầu, bạn sẽ nhận được 512 byte rác ngẫu nhiên nhưng nó sẽ dừng lại và dần dần bạn sẽ thấy nhiều máng dữ liệu ngẫu nhiên hơn.

Đây không phải là cách mọi người nên hoạt động /dev/randommặc dù. Thông thường các nhà phát triển sẽ đọc một lượng nhỏ dữ liệu, như 128 bit, và sử dụng dữ liệu đó để gieo một số loại thuật toán PRNG. Thật là lịch sự khi không đọc thêm bất kỳ entropy nào từ /dev/randombạn cần vì phải mất quá nhiều thời gian để xây dựng và được coi là có giá trị. Do đó, nếu bạn làm cạn kiệt tệp bằng cách vô tư catting tệp như trên, bạn sẽ khiến các ứng dụng khác cần đọc từ đó /dev/randombị chặn. Trên một hệ thống tại nơi làm việc, chúng tôi nhận thấy rằng rất nhiều chức năng của tiền điện tử đang bị đình trệ. Chúng tôi đã phát hiện ra rằng một công việc định kỳ đang gọi một kịch bản python tiếp tục khởi tạoramdom.random()trên mỗi lần chạy mà cứ sau vài giây lại chạy. Để khắc phục điều này, chúng tôi đã viết lại tập lệnh python để nó chạy như một trình nền chỉ khởi tạo một lần và công việc định kỳ sẽ đọc dữ liệu qua XMLRPC để nó không tiếp tục đọc /dev/randomkhi khởi động.


1
"Để khắc phục điều này, chúng tôi đã viết lại tập lệnh python để nó chạy như một trình nền chỉ khởi tạo một lần và công việc định kỳ sẽ đọc dữ liệu qua XMLRPC để nó không tiếp tục đọc từ / dev / ngẫu nhiên khi khởi động." --- Ngoại trừ phần tôi trích dẫn, rất khó đánh giá vì không rõ liệu kịch bản của bạn có thực sự cần sự ngẫu nhiên hay không, câu trả lời của bạn rất rõ ràng và rõ ràng.
Craig Hicks

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.