Поясніть простою англійською мовою про доступність ентропії


28

Якщо я запускаю цю команду в Ubuntu

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

він повертає число, яке вказує, наскільки "ентропія" доступна для ядра, але це приблизно все, що я знаю. У якій одиниці вимірюється ця ентропія? Для чого він використовується? Мені сказали, що це "погано", якщо це число "низьке". Наскільки низький "низький" і які "погані" речі будуть відбуватися, якщо вони будуть? Який хороший діапазон для цього? Як це визначається?

Відповіді:


22

Ваша система збирає кілька "реальних" випадкових чисел, стежачи за різними подіями: мережевою активністю, апаратним генератором випадкових чисел (якщо вони доступні; наприклад, процесори VIA зазвичай мають "реальний" генератор випадкових чисел) тощо. Якщо вони подають їх до пулу ентропії ядра, який використовується / dev / random. Програми, які потребують надзвичайної безпеки, як правило, використовують / dev / random як джерело ентропії, або іншими словами, джерелом випадковості.

Якщо у / dev / random не вистачає доступної ентропії, вона не в змозі подати більше випадковості, і програма чекає зупинки випадковості, поки не буде доступно більше випадкових речей. Приклад, який я бачив під час своєї кар'єри, - це те, що демон Cyrus IMAP хотів використовувати / dev / random для випадковості, а його POP-сеанси хотіли генерувати випадкові рядки в APOP-з'єднаннях з / dev / random. У напруженому середовищі було більше спроб входу, ніж трафіку для подачі / dev / random -> все затрималось. У такому випадку я встановив rng-інструменти та активував rngd, який він мав - що пересунув напіввипадкові числа від / dev / urandom до / dev / random у випадку / dev / random, що не вийшло з "реальної" ентропії.


19

Якщо ви хочете простіший огляд основної проблеми: Деякі програми (наприклад, шифрування) потребують випадкових чисел. Ви можете генерувати випадкові числа за допомогою алгоритму, але хоча в одному сенсі вони здаються випадковими, в іншому вони цілком передбачувані. Наприклад, якщо я даю вам цифри 58209749445923078164062862089986280348253421170679, вони виглядають досить випадковими. Але якщо ви зрозумієте, що це насправді цифри PI, то ви знаєте, що наступним буде 8.

Для деяких додатків це нормально, але для інших програм (особливо тих, що стосуються безпеки) люди хочуть справжньої непередбачуваної випадковості - яку не можна генерувати алгоритмом (тобто програмою), оскільки це за визначенням передбачувано. Це проблема в тому, що ваш комп'ютер, по суті, є програмою, тож як він може отримати справжні випадкові числа? Відповідь полягає в вимірюванні справді випадкових подій із зовнішнього світу - наприклад, прогалини між вашими натисканнями клавіш і їх використання для введення справжньої випадковості в інакше передбачуваний генератор випадкових чисел. "Пул ентропії" можна розглядати як сховище цієї випадковості, яка накопичується натисканнями клавіш (або що б там не було використано) і висувається генерацією випадкових чисел.


2
Приємне пояснення ...
pradipta

Але PI нераціональний, і він би включав кожну послідовність, включаючи вищезазначену послідовність, а потім 9 (замість 8).
Аджай Брахмакшатрія

9

Ентропія - це технічний термін для "Випадковості". Комп'ютери насправді не генерують ентропію, але збирають її, дивлячись на такі речі, як зміни швидкості обертання жорсткого диска (фізичні явища, які важко передбачити через тертя тощо). Коли комп'ютер хоче генерувати псевдовипадкові дані, він буде Винайдіть математичну формулу з справжньою ентропією, яку вона знайшла шляхом вимірювання клацання мишею, варіацій відкрутки жорсткого диска тощо. Грубо кажучи, entropy_availце міра бітів, доступних для читання/dev/random

Потрібен час, щоб комп'ютер зчитував ентропію з оточення, якщо у нього немає крутого обладнання, як галасливий діод чи щось подібне.

Якщо у вас є 4096 біт ентропії, і ви котите, /dev/randomви можете розраховувати, що зможете прочитати 512 байтів ентропії (4096 біт) перед блоками файлів, поки вона чекає більшої ентропії.

Наприклад, якщо ви " cat /dev/random" ваша ентропія зменшиться до нуля. Спочатку ви отримаєте 512 байт випадкового сміття, але він зупиниться і потроху ви побачите більше випадкових даних прокручування даних.

Але люди не повинні діяти /dev/random. Зазвичай розробники будуть читати невелику кількість даних, наприклад, 128 біт, і використовуватимуть їх для виведення якогось алгоритму PRNG. Ввічливо не читати більше ентропії, /dev/randomніж вам потрібно, оскільки так багато часу збирається і вважається цінним. Таким чином, якщо ви будете зливати його, недбало catпідфарбовуючи файл, як вище, ви спричините /dev/randomблокування інших програм, які потрібно прочитати . В одній роботі на роботі ми помітили, що багато криптофункцій затримуються. Ми з'ясували, що робота з Cron викликає скрипт python, який ініціалізуєтьсяramdom.random()на кожному пробігу, який тривав кожні кілька секунд. Щоб виправити це, ми переписали скрипт python, щоб він працював як демон, який ініціалізувався лише один раз, а завдання cron зчитували дані через XMLRPC, щоб не тримати читання від /dev/randomзапуску.


1
"Щоб виправити це, ми переписали скрипт python, щоб він працював як демон, який ініціалізувався лише один раз, а завдання cron зчитували дані через XMLRPC, щоб він не продовжував читати з / dev / random при запуску." --- За винятком частини, яку я цитував, яку важко оцінити, оскільки не ясно, чи справді потрібен ваш сценарій випадковості чи ні, ваша відповідь дуже чітка і явна.
Крейг Хікс

8

Файл лише для читання entropy_avail дає доступну ентропію. Зазвичай це буде 4096 (біт), повний пул ентропії.

Більше ви можете прочитати на веб-сайті: http://linux.die.net/man/4/random

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.