Джейсон А. Доненфельд, автор VPN WireGuard сделал это известным несколько дней назад новая реализация обновление от генератора случайных чисел RDRAND, который отвечает за устройства /dev/random и /dev/urandom в ядре Linux.
В конце ноября Джейсон был указан в качестве случайного сопровождающего контроллера и теперь опубликовал первые результаты своей доработки.
В анонсе отмечается, что новая реализация отличается переход на использование хеш-функции BLAKE2s вместо SHA1 для операций энтропийного смешивания.
Сам BLAKE2s имеет приятное свойство, основанное на внутренней
Перестановка Ча-Ча, которую ГСЧ уже использует для расширения, поэтому
не должно быть проблем с новизной, оригинальностью или потрясающим процессором
поведение, так как оно основано на чем-то, что уже используется.
Кроме того, отмечается, что изменение также улучшена безопасность генератора псевдослучайных чисел избавившись от проблемного алгоритма SHA1 и избегая перезаписи вектора инициализации ГСЧ. Поскольку алгоритм BLAKE2s опережает SHA1 по производительности, его использование также положительно сказалось на производительности генератора псевдослучайных чисел (тесты на системе с процессором Intel i7-11850H показали прирост скорости на 131%). .
Еще одним преимуществом, которое выделяется, является передача энтропийной смеси в BLAKE2. является унификация используемых алгоритмов: BLAKE2 используется в шифровании ChaCha, которое уже используется для извлечения случайных последовательностей.
BLAKE2s, как правило, быстрее и, безусловно, более безопасен, Это было действительно очень сломано. Кроме текущая сборка в ГСЧ не использует полную функцию SHA1, так как определяет и позволяет вам перезаписать IV выводом RDRAND таким образом, недокументирован, даже если RDRAND не настроен как «доверенный», что что означает возможные вредоносные варианты IV.
А его короткая длина означает сохранить только половину секрета при подаче обратно в микшер это дает нам только 2 ^ 80 бит прямой секретности. Другими словами, не только выбор хэш-функции устарел, но и ее использование тоже не очень хорошо.
Также были внесены улучшения в криптобезопасный генератор псевдослучайных чисел CRNG, используемый в вызове getrandom.
Также упоминается, что улучшения сводятся к ограничению вызова генератора RDRAND медленный в извлечении энтропии, которая может повысить производительность в 3,7 раза. Джейсон продемонстрировал, что вызов RDRAND Это имеет смысл только в ситуации, когда CRNG еще не полностью инициализирован, но если инициализация CRNG завершена, его значение не влияет на качество генерируемого потока, и в этом случае это можно сделать без вызова РДРЭНД.
Этот компромисс направлен на решение этих двух проблем и, в то же время, на сохранение общая структура и семантика максимально приближены к оригиналу.
Конкретно:а) Вместо того, чтобы перезаписывать хэш IV с помощью RDRAND, мы помещаем в документированные BLAKE2 поля «соль» и «личные», которые созданный специально для этого типа использования.
б) Так как эта функция возвращает результат полного хэша в коллектор энтропии, мы возвращаем только половину длины хэш, как это было сделано раньше. Это увеличивает построить предварительный секрет с 2 ^ 80 до 2^128 гораздо удобнее.
c) Вместо того, чтобы просто использовать необработанную функцию «sha1_transform», вместо этого мы используем полную и правильную функцию BLAKE2s с завершением.
Изменения запланированы для включения в ядро 5.17. и уже были проверены разработчиками Тедом Тсо (второй сопровождающий случайного драйвера), Грегом Кроа-Хартманом (ответственным за поддержание стабильности ядра Linux) и Жаном-Филиппом Аумассоном (автором алгоритмов BLAKE2/3).
Наконец, если вы заинтересованы в том, чтобы узнать больше об этом, вы можете ознакомиться с подробностями в по следующей ссылке.