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