Ar VPN išsenka entropijos? Ką iš tikrųjų rodo entropy_avail
Užstrigimas paleidžiant ir lėtas nusistovėjęs tunelis yra dvi skirtingos gedimų rūšys. Perskaitykite etapą, tikrąją skaitiklio prasmę ir eilę, prieš kaltindami atsitiktinumą.
Branduolio atsitiktinumo išsekimas yra patrauklus lėto VPN paaiškinimas ir beveik visada neteisingas simptomui, apie kurį žmonės praneša. Atsitiktinės išvesties laukiantis mazgas sustoja tam tikru momentu, dažniausiai anksti paleidžiant arba apdorojant raktus. Tunelis, kuris prisijungia greitai ir paskui perduoda lėtai iš tikrųjų aprašo pralaidumą. Atskirkite šiuos du stebėjimus, prieš diegdami demoną, kad pataisytumėte skaičių, kurio dar nebaigėte skaityti.
Kodėl mitas išlieka
Abi problemos yra tikros ir iš tolo atrodo vienodai. Paleidimo užstrigimai ką tik paleistoje virtualioje mašinoje tikrai pasitaiko, o lėtas nusistovėjęs tunelis yra toks pat tikras. Klaida yra manyti, kad antrąjį sukelia pirmasis, nes kriptografija kažkur pasirodo abiejose istorijose. Niekas žodyje šifravimas nereiškia, kad kiekvienas perduotas baitas sunaudoja naują aplinkos triukšmo baitą.
Šie generatoriai taip neveikia. Kriptografinė biblioteka laiko generatorių su sėkla ir ima iš jo išvestį, persėdama pagal savo politiką, todėl brangi akimirka yra sėjimas, o ne pastovus perdavimas.
Ką generatorius daro kiekvienam paketui
OpenSSL 3 numatytoji generatorių hierarchija sudaroma iš DRBG egzempliorių, kurie sėja ir persėja pagal konfigūraciją ir būseną. OpenVPN 2.6 AEAD duomenų kelias išveda savo nonce iš paketo eilės numerio kartu su numanoma sesijos reikšme, o senesnis CBC kelias kiekvienam paketui ima pseudoatstitiktinį IV. Nė vienas modelis nepalaiko taisyklės, kad gigabaito perkėlimas sunaudoja gigabaitą naujo branduolio triukšmo. Abu palaiko idėją, kad raktų generavimas ir rankos paspaudimai yra vieta, kur sėjimas svarbus.
CBC atvejį verta pavadinti, nes jis atrodo kaip mitas ir nėra juo: jo IV kiekvienam paketui ateina iš bibliotekos generatoriaus pagal pačios bibliotekos persėjimo grafiką, niekada iš branduolio iškvietimo kiekvienam paketui. Kai kas nors cituoja entropijos kainą baitui, paklauskite, kurią bibliotekos versiją ir kurį kodo kelią jie matavo.
Kur laukimas iš tikrųjų matomas
Dėkite laiko žymes aplink etapus, o ne aplink sesiją: paleidimas, autentifikavimas, rakto keitimas ir perdavimas. Laukimas prieš tai, kai tunelis tampa naudojamas, yra kitas nusiskundimas nei mažas pastovus greitis, ir tik vienas iš jų nurodo į atsitiktinumą. Linux sistemoje įprasta getrandom() užklausa gali užblokuoti, kol branduolio atsitiktinis šaltinis bus inicijuotas, todėl šios problemos paleidimo versija yra tikra virtualiose mašinose ir įterptosiose plokštėse, kurios anksti turi mažai kuo maitinti baseiną.
| Etapas | Ką paleisti | Rodmuo, reiškiantis laukimą | Rodmuo, reiškiantis pralaidumą |
|---|---|---|---|
| Paleidimas, prieš bet kurį tunelį | systemd-analyze critical-chain | įrenginys, kuris prieš tunelio paleidimą sėdi kelias sekundes | netaikoma, kol kas niekas neperduodama |
| Rankos paspaudimas | journalctl -u openvpn-server@server -b | ilga spraga, kol pasibaigs inicijavimo seka | netaikoma, tunelis nepakeltas |
| Nusistovėjęs perdavimas | ss -tin šalia sar -n DEV 1 | užblokuotas procesas su tuščiomis lizdo eilėmis | pilnos eilės, pakartotiniai perdavimai ir viena užimta gija |
Du pigūs komandos priklauso tos kolekcijos pradžiai, ir jos išsprendžia lengvus klausimus dar prieš prireikiant lentelės. Skaitiklis, kurį jos skaito, yra entropijos apskaita, o ne pralaidumo matuoklis, ir viena momentinė nuotrauka negali parodyti, kad procesas užblokuotas, kiek jis laukė ar kurią sąsają kviečia jo bibliotekos funkcijos. Po atkūrimo paimtas mėginys paprastai visiškai praleidžia užstrigimą, todėl laikykite branduolio versiją šalia rodmens.
cat /proc/sys/kernel/random/entropy_avail
uname -rSuderinkite pataisą su rodmeniu
Jei branduolys tikrai laukia inicijavimo, žiūrėkite į platformos palaikomą sėjimo kelią, o ne į tunelį. Virtualiai mašinai galima duoti mazgo pateikiamą atsitiktinį įrenginį, pavyzdžiui, virtio-rng, ir vaizdo paruošimas svarbus, nes nepakeista į daugybę svečių nukopijuota sėkla nėra nepriklausomas inicijavimas. Jei biblioteka po paleidimo praneša apie sėjimo nesėkmes, patikrinkite jos sukonfigūruotą šaltinį ir teikėjo elgseną, o ne keiskite branduolio nuostatas.
ss -tin dst 203.0.113.7
sar -n DEV 1 5OpenSSL generatoriaus dokumentacija aprašo, kaip ši hierarchija gauna įvestį ir kada vyksta persėjimas, o tai yra daug siauresnis teiginys nei mitas ir galioja tik tai realizacijai. Entropijos demonas nėra universalus greičio taisymas, o jo įdiegimas tam, kad skaitiklis pakiltų, keičia saugumo prielaidą neįrodžius vėlavimo. Dėl pralaidumo sekite duomenų kelią: viena prisotinta gija, pakartotiniai perdavimai, išoriniai nuostoliai ir eilių numetimai kiekvienas reikalauja skirtingos pataisos, o buferių dydžiai sprendžia lizdo buferiavimą su savo eilių įrodymais.