добуваємо трошки ентропії для шифрування!

вчора зіштовхнувся з такою ситуацією: якщо на віртуальній машині (локально, на aws тощо) з linux розпочати генерацію пари криптоключів

gpg2 --gen-key

то можна дуже довго просидіти перед екраном з таким от текстом, і в підсумку нічого не висидіти:

We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.

чому?

для генерації надійних криптоключів потрібна… гхм, випадковість. міру випадковості, що широко застосовується в комп’ютерних технологіях, називають інформаційною ентропією, або ентропією шеннона, або коротко (хоч і не дуже правильно) просто ентропією. звичайні комп’ютери не мають генераторів випадкових чисел*, але можуть «збирати» випадковість, нотуючи час виникнення деяких подій (дискові операції, мережеві повідомлення, ввід з клавіатури й миші). випадковість накопичується, і згодом операційна система її використовує, коли треба.

ось так можна поглянути, скільки ентропії доступно в linux:

watch -n 1 cat /proc/sys/kernel/random/entropy_avail

для генерації пари криптоключів з довжиною основи 2048 біт потрібно приблизно 300 біт інформаційної ентропії. у віртуальної машини доступу до випадкових подій значно менше, ніж у фізичної, тому її резерв ентропії, як правило, значно нижчий — особливо одразу після старту.

що робити?

найпростіше — згенерувати багато дискових операцій! наприклад, в сусідньому терміналі запустити щось подібне (читає весь диск і копіює в нікуди), і дати «покрутитися» кілька секунд:

(sudo) dd if=/dev/sda of=/dev/null status=progress

або щось таке (), щоби уникнути потреби в sudo:

find / | xargs file

…і спостерігати, як зразу пожвавиться накопичував ентропії! можна повертатися до генерації криптоключів.

* це не зовсім вірно; приміром, малинкамає о_О