Jason A. Donenfeld, autor VPN WireGuard, zaprezentował poprawki, które znacznie przyspieszają uzyskiwanie liczb losowych z systemu za pomocą funkcji getrandom(), wdrożonej poprzez odpowiednie wywołanie systemowe Linux. Zaletą tego rozwiązania w porównaniu do użycia \/dev\/random lub \/dev\/urandom jest odporność na ataki związane z wyczerpywaniem deskryptorów plików, które mogą prowadzić do niezainicjowanych i nieprzypadkowych kluczy kryptograficznych.
Proponowana optymalizacja opiera się na wykorzystaniu mechanizmu vDSO (virtual dynamic shared object), który umożliwia przeniesienie obsługi wywołania systemowego z jądra do przestrzeni użytkownika, eliminując przełączanie kontekstów. W przypadku getrandom(), implementacja powiązanego z tą funkcją wywołania systemowego jest zdefiniowana jako vDSO, a kod jest wcześniej ładowany do przestrzeni adresowej procesu bezpośrednio przez jądro. Takie podejście pozwoliło przyspieszyć uzyskiwanie liczb losowych w niektórych sytuacjach nawet 15-krotnie lub więcej.
Źródło: opennet.ru
