A kernel véletlenszerűségének kifogyása vonzó magyarázat a lassú VPN-re, és szinte mindig téves a tünetre, amiről az emberek beszámolnak. A véletlen kimenetre váró gazdagép egy adott pillanatban megakad, általában korán a rendszerindításkor vagy a kulcsok kezelése közben. Az az alagút, amelyik gyorsan csatlakozik, majd lassan továbbít valójában az átviteli sebességet írja le. Válassza szét ezt a két megfigyelést, mielőtt egy démont telepít egy olyan szám javítására, amelyet még nem olvasott végig.

Miért él túl a mítosz

Mindkét probléma valódi, és messziről hasonlónak tűnnek. A frissen indított virtuális gépen tényleg előfordulnak indítási megakadások, és a lassú, kiépült alagút is ugyanolyan valódi. A hiba azt feltételezni, hogy a másodikat az első okozza, mert a kriptográfia valahol mindkét történetben megjelenik. A titkosítás szó semmiből sem jelenti azt, hogy minden továbbított bájt egy friss bájt környezeti zajt fogyaszt.

A generátorok nem így működnek. Egy kriptográfiai könyvtár maggal rendelkező generátort tart, és abból merít kimenetet, saját szabályzata szerint újramagozva, így a drága pillanat a magozás, nem a folyamatos átvitel.

Mit tesz a generátor csomagonként

Az OpenSSL 3-ban az alapértelmezett generátorhierarchia olyan DRBG-példányokból épül fel, amelyek a konfiguráció és az állapot szerint magoznak és újramagoznak. Az OpenVPN 2.6-ban az AEAD adatút a nonce-t a csomag sorszámából származtatja egy munkamenetenkénti implicit értékkel együtt, míg a régebbi CBC út csomagonként egy pszeudo-véletlen IV-t merít. Egyik minta sem támogatja azt a szabályt, hogy egy gigabájt mozgatása egy gigabájt friss kernelzajt fogyaszt. Mindkettő támogatja viszont azt az elképzelést, hogy a kulcsgenerálás és a kézfogások az a hely, ahol a magozás számít.

A CBC esetét érdemes megnevezni, mert úgy néz ki, mint a mítosz, és mégsem az: csomagonkénti IV-je a könyvtár generátorából származik a könyvtár saját újramagozási ütemezése szerint, soha nem csomagonkénti kernelhívásból. Amikor valaki bájtonkénti entrópiaköltséget emleget, kérdezze meg, melyik könyvtárverziót és melyik kódutat mérték.

Hol látszik valójában a várakozás

A szakaszok köré tegyen időbélyegeket, ne a munkamenet köré: indítás, hitelesítés, kulcsváltás és átvitel. Az alagút használhatósága előtti várakozás más panasz, mint az alacsony, állandó sebesség, és csak az egyik mutat a véletlenre. Linuxon egy normál getrandom() kérés blokkolhat, amíg a kernel véletlenforrása inicializálódik, ezért e probléma rendszerindítási változata valódi azokon a virtuális gépeken és beágyazott lapkán, amelyeknek korán kevés jut a medence táplálására.

SzakaszMit kell futtatniOlyan leolvasás, amely várakozást jelentOlyan leolvasás, amely átviteli sebességet jelent
Rendszerindítás, minden alagút előttsystemd-analyze critical-chainegy egység, amely másodpercekig ül, mielőtt az alagút elindulnem alkalmazható, még semmi sem továbbítódik
Kézfogásjournalctl -u openvpn-server@server -bhosszú hézag, mielőtt az inicializálási sorozat befejeződiknem alkalmazható, az alagút nincs fent
Kiépült átvitelss -tin mellett sar -n DEV 1blokkolt folyamat üres socket-sorokkalteli sorok, újraküldések és egy elfoglalt szál

Két olcsó parancs tartozik a gyűjtés elejére, és ezek eldöntik a könnyű kérdéseket, mielőtt a táblázatra egyáltalán szükség lenne. Az a számláló, amelyet olvasnak, entrópia-elszámolás, nem sávszélesség-mérő, és egyetlen pillanatkép nem tudja megmutatni, hogy blokkolt-e egy folyamat, mennyit várt, vagy melyik interfészt hívják a könyvtári hívásai. A helyreállítás után vett minta általában teljesen elvéti a megakadást, ezért tartsa a kernelverziót a leolvasás mellett.

cat /proc/sys/kernel/random/entropy_avail
uname -r

A javítást a leolvasáshoz igazítsa

Ha a kernel valóban inicializálásra vár, a platform által támogatott magozási utat nézze, ne az alagutat. Egy virtuális gép kaphat a gazdagép által biztosított véletlen eszközt, például virtio-rng, és a lemezkép előkészítése számít, mert a változatlanul sok vendégbe másolt mag nem független inicializálás. Ha egy könyvtár indítás után magozási hibákat jelent, vizsgálja meg a beállított forrását és a szolgáltató viselkedését, ahelyett hogy a kernel beállításait módosítaná.

ss -tin dst 203.0.113.7
sar -n DEV 1 5

Az OpenSSL-generátor dokumentációja leírja, hogyan jut bemenethez ez a hierarchia, és mikor történik újramagozás, ami sokkal szűkebb állítás a mítosznál, és csak arra az implementációra érvényes. Az entrópiadaemon nem univerzális sebességjavítás, és telepítése azért, hogy egy számláló emelkedjen, biztonsági feltételezést változtat anélkül, hogy késleltetést bizonyítana. Az átviteli sebességhez kövesse az adatutat: egy telített szál, az újraküldések, a külső veszteség és a sorok eldobása külön-külön javítást igényel, a pufferméretek pedig a socket-pufferelést kezelik saját sorbizonyítékaikkal.

Kapcsolódó cikkek