04.07.2022

Для ядра Linux предложена реализация /dev/random, избавленная от привязки к SHA-1

Джейсон Доненфилд (Jason A. Donenfeld), автор VPN WireGuard, предложил обновлённую реализацию генератора псевдослучайных чисел RDRAND, отвечающего за работу устройств /dev/random и /dev/urandom в ядре Linux. В конце ноября Джейсон был включён в число мэйнтейнеров драйвера random и теперь опубликовал первые результаты своей работы по его переработке.

Новая реализация примечательна переходом на использование хеш-функции BLAKE2s вместо SHA1 для операций смешивания энтропии. Изменение позволило повысить безопасность генератора псевдослучайных чисел, благодаря избавлению от проблемного алгоритма SHA1 и исключению перезаписи вектора инициализации RNG. Так как алгоритм BLAKE2s опережает SHA1 по производительности, то его применение также положительно отразилось на производительности генератора псевдослучайных чисел (тестирование на системе с процессором Intel i7-11850H показало увеличение скорости на 131%). Ещё одним плюсом перевода смешивания энтропии на BLAKE2 стала унификация используемых алгоритмов — BLAKE2 применяется в шифре ChaCha, уже применяемом для извлечения случайных последовательностей.

Кроме того, внесены улучшения в криптонадёжный генератор псевдослучайных чисел CRNG, используемый в вызове getrandom. Улучшения сводятся к ограничению вызова медленного генератора RDRAND при извлечении энтропии, что позволяет повысить производительность в 3.7 раза. Джейсон показал, что вызов RDRAND имеет смысл только в ситуации, когда CRNG ещё полностью не инициализирован, но если инициализация CRNG завершена, его значение не влияет на качество генерируемой последовательности и без обращения к RDRAND в этом случае можно обойтись.

Изменения намечены для включения в состав ядра 5.17 и уже рецензированы разработчиками Ted Ts’o (второй мэйнтейнер драйвера random), Greg Kroah-Hartman (ответственный за поддержку стабильной ветки ядра Linux) и Jean-Philippe Aumasson (автор алгоритмов BLAKE2/3).

Источник.