Джейсон Доненфилд (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).
Източник: opennet.ru
