Додаємо "ентропію випадкових чисел" для ключів GPG?


10

У наступному відео: Linux HOWTO: Захистіть свої дані PGP, частина 2 , вам показано, як створити пару ключів gpg. Приблизно 1:50, інструктор говорить наступне:

У той час, коли ключ генерується, корисно перемістити курсор миші, щоб надати йому трохи більше випадкової ентропії числа для створення ключа.

Це здається міфом, тим більше, що курсор зазвичай не повинен впливати на інструменти командного рядка. З іншого боку, я не маю поняття, як працює генератор випадкових чисел Linux, незалежно від того, розділений він графічним інтерфейсом або незалежний від нього. Чи є запас у тому, що він заявляє, чи це приклад програмування культового культу ?


Як побічне запитання, чи це правильне використання «міського міфу» чи є подібна фраза для «міфу в межах обчислень»?
IQAndreas

1
Я думаю, що фраза є міською легендою ; Я ніколи не чув міського міфу . Див. En.wikipedia.org/wiki/Urban_legend В обчислювальній формі словосполучення "вантажний культ" може бути доречним.
derobert

Відповіді:


8

У цьому є зерно істини, насправді більше правди, ніж міф, але, тим не менш, твердження відображає фундаментальне нерозуміння того, що відбувається. Так, переміщення миші під час генерації ключа за допомогою 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, чекаючи, коли лічильник ентропії ядра підніметься.


За винятком поточних версій Linux, принаймні з мого тестування, пристрої введення не використовують як джерело ентропії (або принаймні оціночної ентропії). Я впевнений, що вони змінили це, оскільки теоретично вони могли бути під контролем зловмисника.
дероберт

@derobert Як 3,12 є виклик add_input_randomnessв drivers/input/input.c, але я не знаю , в яких умовах воно буде на самому ділі INJECT ентропії.
Жил "ТАК - перестань бути злим"

Я здогадуюсь, що це додає ентропії, але з оцінкою 0 ... Я спробував як мишу USB, так і клавіатуру PS / 2, ні одна з них не збільшилась до оцінки ентропії. Не впевнений, чому, однак, як я бачу заклик до Credit_entropy_bits у коді.
дероберт

3

GPG використовує генератор випадкових чисел Linux (ядро). Генератор ядра отримує ентропію (випадковість) з усіх видів місць, серед них є час переривання, для певних переривань. Переміщення миші (і введення тексту, активність диска тощо) призведе до переривань.

Отже, переміщення миші дійсно потенційно подається в генератор випадкових чисел. Але чи буде це, залежить від точної версії ядра, яка використовується; новіші версії не використовують (принаймні в моєму тестуванні) переривання клавіатури або миші для ентропії. Проте активність диска (так, наприклад, біг syncдодасть потенційно велику кількість ентропії, залежно від того, скільки промацується).

Коротше кажучи: це не відповідає дійсній версії Linux. Це було на старих.

Однак, якщо в генераторі не вистачає ентропії, він повинен просто зупинитися, тож ваша генерація ключів буде зависати, поки не сформується деяка ентропія. Тож це була б проблема назавжди, а не проблема безпеки.

Ви можете бачити, скільки доступна ентропія cat /proc/sys/kernel/random/entropy_avail.


Також зверніть увагу, що ви можете використовувати такі інструменти, як rngdштучне годування пулу ентропії.
Патрік

@Patrick дійсно, і якщо у вас є новий чіп і довіряєте NSA (о, чекайте, я маю на увазі, Intel), ви можете використовувати RDRAND.
дероберт

havegedце ще один хороший інструмент для штучного годування ентропійного басейну.
mavillan

Це ще не повна історія - RNG не закінчується ентропією, вона закінчується внутрішньою мірою ентропії. Також важливим елементом головоломки є те, що gpg не переймається мишкою, це ядро.
Жил "ТАК - перестань бути злим"

@Gilles Я уточнив, що gpg використовує RNG Linux. І помилки в оцінці ентропії здаються поза межами сфери.
дероберт

0

Хвости мають надзвичайно швидке покоління ключів, оскільки він havegedвстановив:

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