У цьому є зерно істини, насправді більше правди, ніж міф, але, тим не менш, твердження відображає фундаментальне нерозуміння того, що відбувається. Так, переміщення миші під час генерації ключа за допомогою GPG може бути хорошою ідеєю. Так, переміщення миші сприяє певній ентропії, яка робить випадкові числа випадковими. Ні, переміщення миші не робить ключ більш захищеним.
Усі хороші випадкові генератори, придатні для криптографії, і Linux в цій категорії, мають два компоненти:
- Ентропії джерела, який не є детермінованим. Метою ентропії є завантаження генератора випадкових чисел непередбачуваними даними. Джерело ентропії повинно бути недетермінованим: інакше супротивник може відтворити ті ж обчислення.
- Генератор псевдовипадкових чисел , який виробляє непередбачувані випадкові числа в детермінованих модах від мінливого внутрішнього стану.
Ентропія повинна виходити з джерела, яке знаходиться зовні. Користувач - одне джерело ентропії. Користувач здебільшого не є випадковим, але точний час натискання клавіш та рухів миші настільки непередбачуваний, щоб бути трохи випадковим - не дуже випадковим, але помалу, він накопичується. Інші потенційні джерела ентропії включають час мережевих пакетів та білий шум камери або мікрофона. Різні версії та конфігурації ядра можуть використовувати різний набір джерел. Деякі комп'ютери мають спеціальні апаратні схеми РНГ на основі радіоактивного розпаду або, що менш вражає, нестабільних електронних схем. Ці виділені джерела особливо корисні у вбудованих пристроях та серверах, які можуть мати передбачувану поведінку під час першого завантаження, без того, щоб користувач робив дивні речі.
Linux надає випадкові числа програмам через два пристрої: /dev/random
і/dev/urandom
. Читання з будь-якого пристрою повертає криптографічну якість. Обидва пристрої використовують однаковий внутрішній стан RNG та один і той же алгоритм для перетворення стану та отримання випадкових байтів. Вони мають своєрідні обмеження, що не робить жодного з них правильним:
/dev/urandom
може повернути передбачувані дані, якщо система ще не накопичила достатньої ентропії.
/dev/random
обчислює кількість доступної ентропії та блокує, якщо їх недостатньо. Це звучить добре, за винятком того, що обчислення грунтується на теоретичних міркуваннях, завдяки яким кількість доступної ентропії лінійно зменшується з кожним вихідним бітом. Таким чином, /dev/random
тенденція блокується дуже швидко.
Системи Linux зберігають внутрішнє стан RNG на диску та відновлюють його під час завантаження. Тому ентропія переходить від одного завантаження до іншого. Єдиний час, коли в системі Linux може не вистачати ентропії, - це коли вона встановлена. Після того, як в системі є достатня ентропія, ентропія не зменшується; зменшується лише хибний розрахунок Linux. Щоб отримати додаткові пояснення з цього приводу, прочитане /dev/urandom
підходить для створення криптографічного ключа професійним криптографом. Див. Aso Чи можете ви пояснити оцінку ентропії, яка використовується у random.c .
Переміщення миші додає більше ентропії системі. Але gpg може читати лише з /dev/random
, а не/dev/urandom
(спосіб вирішити цю проблему - зробити /dev/random
той самий пристрій 1: 9 як /dev/urandom
), тому він ніколи не ризикує отримати невипадкові випадкові числа. Якщо ви не рухаєте мишкою, ключ є настільки ж випадковим; але те, що може статися, полягає в тому, що gpg може заблокуватися при прочитанні /dev/random
, чекаючи, коли лічильник ентропії ядра підніметься.