Jason A. Donenfeld , autor WireGuard VPN-a, nedavno je najavio novu , ažuriranu implementaciju generatora slučajnih brojeva RDRAND , koji je odgovoran za rad uređaja /dev/random i /dev/urandom u Linux kernelu.
Krajem studenog, Jason je naveden kao nasumični održavatelj kontrolera i sada je objavio prve rezultate svog rada na preradi.
U objavi se spominje da je nova implementacija značajna zbog prelaska na korištenje BLAKE2s hash funkcije umjesto SHA1 za operacije miješanja entropije.
Sam BLAKE2s ima lijepo svojstvo da se interno temelji na
ChaCha permutacija, koju RNG već koristi za proširenje, dakle
ne bi trebalo biti problema s novitetom, originalnošću ili nevjerojatnim CPU-om
ponašanje, budući da se temelji na nečemu što je već u upotrebi.
Nadalje, vrijedi napomenuti da je promjena također poboljšala sigurnost generatora pseudoslučajnih brojeva uklanjanjem problematičnog SHA1 algoritma i sprječavanjem prepisivanja vektora inicijalizacije slučajnih brojeva. Budući da BLAKE2s algoritam nadmašuje SHA1, njegova upotreba također je pozitivno utjecala na performanse generatora pseudoslučajnih brojeva (testovi na sustavu s Intel i7-11850H procesorom pokazali su povećanje brzine od 131%).
Još jedna istaknuta prednost je ta što prijenos entropijske mješavine na BLAKE2 predstavlja objedinjavanje korištenih algoritama: BLAKE2 se koristi u ChaCha šifri, koja se već koristi za izdvajanje slučajnih nizova.
BLAKE2s je općenito brži i svakako sigurniji, ali je ozbiljno kompromitiran. Nadalje, trenutna RNG konstrukcija ne koristi punu SHA1 funkciju kako je specificirano i omogućuje nedokumentirano prepisivanje IV-a s RDRAND izlazom , čak i ako RDRAND nije konfiguriran kao "pouzdan", što implicira potencijalno zlonamjerne IV opcije.
A njegova kratka duljina znači da nam čuvanje samo pola tajnosti prilikom vraćanja u mikser daje samo 2^80 bita tajnosti unaprijed. Drugim riječima, ne samo da je izbor hash funkcije zastario, već ni njezina upotreba nije baš dobra.
Dodatno, poboljšani su kripto-sigurni CRNG generator pseudoslučajnih brojeva koji se koristi u getrandom pozivu.
Također se spominje da se poboljšanja svode na ograničavanje poziva sporog RDRAND generatora prilikom izdvajanja entropije, što može poboljšati performanse za faktor 3,7. Jason je pokazao da RDRAND poziv ima smisla samo u situaciji kada CRNG još nije u potpunosti inicijaliziran, ali ako je inicijalizacija CRNG-a završena, njegova vrijednost ne utječe na kvalitetu generiranog niza, a u ovom slučaju moguće je to učiniti bez pozivanja RDRAND-a.
Ovaj kompromis ima za cilj riješiti ova dva problema i istovremeno održati opća struktura i semantika što bliže izvorniku.
Posebno:a) Umjesto da prepišete IV hash s RDRAND, stavili smo u BLAKE2 dokumentirana polja "sol" i "osobna", koja su stvorena posebno za ovu vrstu upotrebe.
b) Budući da ova funkcija vraća rezultat potpunog hasha u entropijski kolektor, vraćamo samo polovicu duljine hash, baš kao što se radilo prije. Time se povećava izgraditi unaprijed tajnu od 2^80 do 2^128 mnogo udobnije.
c) Umjesto da koristite samo sirovu funkciju "sha1_transform", umjesto toga koristimo punu i ispravnu funkciju BLAKE2s, s dovršenjem.
Promjene su planirane za uključivanje u kernel 5.17 i već su ih pregledali programeri Ted Ts'o (druga osoba odgovorna za održavanje random drivera), Greg Kroah-Hartman (odgovoran za održavanje stabilnosti Linux kernela) i Jean-Philippe Aumasson (autor algoritama BLAKE2/3).
Konačno, ako ste zainteresirani saznati više, detalje možete pronaći na sljedećoj poveznici.