
В следующем видео:Linux HOWTO: Защита ваших данных с помощью PGP, часть 2, вам показывают, как создать пару ключей с gpg
. Примерно в 1:50
, инструктор говорит следующее:
Пока генерируется ключ, хорошей идеей будетперемещайте мышьнемного, чтобы придать ему немного больше случайной энтропии чисел для создания пары ключей.
Мне это кажется мифом, особенно потому, что на инструменты командной строки курсор обычно не влияет. С другой стороны, я понятия не имею, как работает генератор случайных чисел Linux, является ли он общим с GUI или независимым от него. Есть ли в его утверждениях доля истины, или это примерпрограммирование культа груза?
решение1
В этом есть доля правды, на самом деле больше правды, чем мифа, но тем не менее это утверждение отражает фундаментальное непонимание того, что происходит. Да, перемещение мыши во время генерации ключа с помощью GPG может быть хорошей идеей. Да, перемещение мыши вносит некоторую энтропию, которая делает случайные числа случайными. Нет, перемещение мыши не делает ключ более безопасным.
Все хорошие генераторы случайных чисел, подходящие для криптографии (а Linux относится к этой категории), имеют два компонента:
- Анэнтропияисточник, который недетерминирован. Цель энтропии — загрузить генератор случайных чисел непредсказуемыми данными. Источник энтропии должен быть недетерминированным: в противном случае противник может воспроизвести то же вычисление.
- Агенератор псевдослучайных чисел, который производит непредсказуемые случайные числа детерминированным образом из изменяющегося внутреннего состояния.
Энтропия должна исходить из источника, который является внешним по отношению к компьютеру. Пользователь является одним из источников энтропии. То, что делает пользователь, в основном не является случайным, но точная синхронизация нажатий клавиш и движений мыши настолько непредсказуема, что может быть слегка случайной — не очень случайной, но постепенно она накапливается. Другие потенциальные источники энтропии включают синхронизацию сетевых пакетов и белый шум камеры или микрофона. Различные версии ядра и конфигурации могут использовать другой набор источников. Некоторые компьютеры имеют выделенные аппаратные схемы ГСЧ, основанные на радиоактивном распаде или, что менее впечатляюще, нестабильных электронных схемах. Эти выделенные источники особенно полезны во встроенных устройствах и серверах, которые могут иметь довольно предсказуемое поведение при первой загрузке, без пользователя, который мог бы делать странные вещи.
Linux предоставляет программам случайные числа через два устройства:/dev/random
и/dev/urandom
. Чтение с любого из устройств возвращает криптографическое качество. Оба устройства используют одно и то же внутреннее состояние ГСЧ и один и тот же алгоритм для преобразования состояния и создания случайных байтов. У них есть особые ограничения, которые делают ни одно из них неподходящим:
/dev/urandom
может возвращать предсказуемые данные, если система еще не накопила достаточно энтропии./dev/random
вычисляет количество доступной энтропии и блокирует, если ее недостаточно. Звучит хорошо, за исключением того, что расчет основан на теоретических соображениях, которые заставляют количество доступной энтропии линейно уменьшаться с каждым выходным битом. Таким образом,/dev/random
имеет тенденцию блокироваться очень быстро.
Системы Linux сохраняют внутреннее состояние RNG на диске и восстанавливают его во время загрузки. Поэтому энтропия переносится от одной загрузки к другой. Единственный момент, когда система Linux может испытывать недостаток энтропии, — это когда она только что установлена. Как только в системе достаточно энтропии, энтропия не уменьшается; уменьшается только некорректный расчет Linux. Для получения дополнительных объяснений этого соображения, прочитайте/dev/urandom
подходит для генерации криптографического ключа, профессиональный криптограф. Смотрите такжеМожете ли вы объяснить оценку энтропии, используемую в random.c?.
Перемещение мыши добавляет больше энтропии в систему. Ноgpg может только читать из /dev/random
, не/dev/urandom
(один из способов решения этой проблемы — сделать /dev/random
такое же устройство 1:9, как /dev/urandom
), поэтому оно никогда не подвергается риску получения недостаточно случайных чисел.Если вы не двигаете мышью, ключ будет набран случайным образом, но может случиться так, что gpg заблокируется.при чтении из /dev/random
, ожидая увеличения счетчика энтропии ядра.
решение2
GPG использует генератор случайных чисел Linux (ядра). Генератор ядра получает энтропию (случайность) из разных мест, среди которых синхронизация прерываний для определенных прерываний. Перемещение мыши (и набор текста, активность диска и т. д.) будут генерировать прерывания.
Итак, перемещение мыши действительно потенциально вносит вклад в генератор случайных чисел. Но зависит ли это от конкретной используемой версии ядра; более новые версии (по крайней мере, в моем тестировании) не используют прерывания клавиатуры или мыши для энтропии. Однако дисковая активность вносит (так, например, запуск sync
добавит потенциально большое количество энтропии, в зависимости от того, сколько сбрасывается).
Короче говоря: в текущих версиях Linux это не так. В старых версиях это было так.
Однако если генератор исчерпывает энтропию, он должен просто остановиться, так что генерация вашего ключа зависнет, пока не будет сгенерирована некоторая энтропия. Так что это будет проблема, которая будет длиться вечно, а не проблема безопасности.
Вы можете увидеть, сколько энтропии доступно, по cat /proc/sys/kernel/random/entropy_avail
.
решение3
Tails обеспечивает чрезвычайно быструю генерацию ключей, поскольку в нем haveged
установлены:
sudo apt-get install haveged