Dve označenia sa používajú, akoby to bolo to isté: hardvérovo zrýchlené a presunuté do jadra. Prvé opisuje, ktoré inštrukcie vykonáva rutina AES knižnice, druhé opisuje, kde prebieha spracovanie paketov. VPN môže mať prvé bez druhého, druhé bez prvého alebo oboje naraz. Každé rozhodnutie o výkone musí začať pomenovaním, ktoré z tých dvoch skutočne meníte.

Dve osi, nie jedno skóre

Prvá os je implementácia: smeruje kód vykonávajúci AES-256-GCM na verziu, ktorá používa vyhradené inštrukcie procesora, alebo na prenosnú rutinu, ktorá ich vykonáva ako bežnú aritmetiku. Táto voľba žije vnútri kryptografickej knižnice a robí sa pri jej inicializácii.

Druhá os je umiestnenie: prechádza paket transformačnou cestou jadra, alebo démon v používateľskom priestore číta z tunelového zariadenia, šifruje a zapisuje späť.

Ani jedna os neobmedzuje druhú. VPN v používateľskom priestore na procesore s inštrukciami AES ich môže používať celý čas a cesta jadrom na procesore bez nich sa vracia k softvérovej implementácii. Označenia v materiáloch dodávateľov robia tento rozdiel zriedka, a preto rady k ladeniu kopírované medzi oboma situáciami tak často nič nerobia.

Os jedna: ktorý kód vykonáva šifrovanie

OpenSSL zisťuje vlastnosti procesora pri inicializácii a výsledok používa na výber optimalizovaných ciest kódu, ako opisuje dokumentácia možností x86. AES-NI je jedna z dokumentovaných možností za týmto smerovaním. Nič z toho nevyžaduje, aby sa knižnica stala súčasťou jadra.

Predpokladu, že sa používa rýchla cesta, predchádzajte overením, že vlastnosť je pre proces viditeľná. V Linuxe je zdrojom pole flags v /proc/cpuinfo a vnútri hosťa odráža to, čo odhaľuje hypervizor, nie názov modelu fyzického hostiteľa.

grep -m1 '^flags' /proc/cpuinfo | grep -o '\baes\b'
openssl list -providers -verbose

Druhý príkaz pomenúva poskytovateľov načítaných v danom builde. Nehovorí vám, ktorú knižnicu služba VPN prepojila, a jeden hostiteľ môže niesť dve inštalácie OpenSSL, pričom bežiaci proces používa len jednu z nich.

Os dva: kde beží cesta paketov

Umiestnenie v jadre znamená, že transformácia prebieha vo vlastnom IPsec mechanizme jadra alebo v tunelovom ovládači v jadre, takže pakety nepotrebujú cestu tam a späť cez proces v používateľskom priestore pre každú dávku. To môže znížiť kopírovanie a prepínanie kontextu a rozložiť prácu medzi jadrá tak, ako to jednoduchý démon nedokáže. Presúva to aj počítadlá a stopy, ktoré budete čítať, keď priepustnosť klesne, pretože práca sa teraz deje na druhej strane hranice, ktorú nekontrolujete. Berte to ako náklad na ladenie, nie len ako rozhodnutie o výkone.

Nevytvára podporu inštrukcií, nenastavuje šifru a nespúšťa existujúcu trasu.

Virtualizácia pridáva záhyb aj na tejto osi. Hosť môže dostať maskovaný model procesora, ktorý skrýva vlastnosti, ktoré má hostiteľ, a vnorený hosť môže vidieť ešte menej. Čítajte pohľad na možnosti zvnútra prostredia, kde VPN skutočne beží, nie z konzoly hypervizora.

Čo každá voľba kupuje a čo nedokáže

Praktická otázka je, kam ide čas. Ak priepustnosť obmedzuje jedno vyťažené vlákno, opakované kópie vyrovnávacej pamäte alebo systémové volanie na každý paket, presun transformácie na cestu, ktorá tieto náklady odstraňuje, môže pomôcť, ak jadro implementuje transformáciu, ktorú potrebujete.

Ak je limitom preťažené odchádzajúce spojenie, cesta so stratami, dlhý čas obehu, nasýtená cieľová služba alebo jedno vlákno pripnuté k jednému jadru, umiestnenie nemení nič podstatné. To isté platí pre voľbu inštrukcií: AES na vyhradenom hardvéri neopraví chýbajúcu trasu a nepomôže, ak tunel nečinne stojí, pretože zlyháva preklad mien.

Kde platia obe, skladajú sa. Cesta jadrom môže používať rovnaké smerovanie na úrovni inštrukcií vnútri kryptografického API jadra a cesta v používateľskom priestore s dobre zvolenou knižnicou ho už používa. Rozhodnutie nie je, ktorá je v abstrakcii rýchlejšia; je to, pre ktorý náklad máte dôkaz.

Zapíšte štyri fakty, kým čokoľvek zmeníte

Zapíšte binárku služby a kryptografickú knižnicu, s ktorou je prepojená, pretože tie určujú os jedna. Potom zaznamenajte dohodnutú ochranu údajov, pretože šifra bez vyhradenej inštrukčnej cesty sa správa inak ako tá s ňou, a sadu vyberajú obe strany.

Ďalej pohľad na možnosti zvnútra bežiaceho prostredia a napokon aktívna cesta paketov s dôkazom, že režim, ktorý považujete za zapnutý, je skutočne zapnutý. Načítaný modul nie je dôkaz, že ho profil používa, a konfiguračný riadok nie je dôkaz, že ho jadro prijalo.

Zmeňte jednu vec a potom porovnajte s rovnomernou záťažou s rovnakými koncovými bodmi a rovnakým smerom prenosu. Tvrdenie o rýchlosti, ktoré ste nemerali, má menšiu cenu než poznámka, že backend nikdy nebol spochybnený.

Súvisiace články