Джейсон Доненфилд (Jason A. Donenfeld), автор на VPN WireGuard, представи пачове, които значително ускоряват получаването на произволни числа от системата чрез функцията getrandom(), реализирана чрез съответния системен повик в Linux. Предимството на това решение в сравнение с използването на /dev/random или /dev/urandom е устойчивостта му на атаки, които могат да изчерпят файловите дескриптори, довеждайки до неинициализирани и непроизволни криптографски ключове.
Предложената оптимизация се основава на използването на механизма vDSO (виртуален динамичен споделен обект), който позволява прехвърляне на обработчика на системното повикване от ядрото в пространството на потребителя и избягване на контекстни превключвания. В случая с getrandom() реализацията на свързания с тази функция системен повик е оформена като vDSO, кодът на който е предварително зареден в адресното пространство на процеса от ядрото. Този подход е позволил ускоряване на получаването на произволни числа в някои ситуации до 15 пъти и повече.
Източник: opennet.ru
