Abu pavadinimai yra AEAD konstrukcijos, abi standartizuotos, ir dabartiniame x86 serveryje bet kuri jų užpildys gigabitinę jungtį be pastebimų pastangų. Pasirinkimas nustoja būti savavališkas, kai paliekate tą serverį: pigūs maršrutizatoriai, senesni telefonai ir virtualūs įrenginiai dažnai neturi AES pagreitinimo, o ten skirtumas didelis. Taigi palyginimas ne apie tai, kuris šifras greitesnis, o apie tai, kuris šifras gerai veikia šiame galinių taškų rinkinyje ir ar protokolas apskritai siūlo pasirinkimą.

Tas pats darbas, kiti branduoliai

Abi konstrukcijos suteikia konfidencialumą ir vientisumą per vieną ėjimą ir autentifikuoja susietus duomenis, todėl VPN protokolai jas naudoja duomenų kanalui. Skirtumas viduje: AES-GCM yra AES blokinis šifras skaitiklio režimu su polinominiu autentifikatoriumi virš GF(2^128), o ChaCha20-Poly1305 yra srautinis šifras su 256 bitų raktu ir atskiru vienkartiniu autentifikatoriumi.

Tai, kas svarbu operaciškai, yra bendra: abi katastrofiškai sugenda pakartotinai naudojant nonce, abiem reikia nonce erdvės valdymo kiekvienam raktui, ir nė viena nepataiso partnerio, kuris autentifikuoja neteisingą dalyką. Profilis, kuriame parašyta AES-256-GCM, nėra saugesnis už tą, kuriame parašyta CHACHA20-POLY1305; abu yra stiprūs, kai įgyvendinimas teisingas.

Kur laimi AES-GCM

AES turi specialias instrukcijas daugumoje šiuolaikinių CPU: AES-NI x86, kriptografijos plėtinius ARMv8 ir atitikmenis naujuose POWER bei RISC-V dizainuose. Kai jie yra, GCM vykdo kelis blokus lygiagrečiai per ciklo klasę, ir programinė įgyvendinimas tampa nebesvarbus. Tai įprastas atvejis serveriams, staliniams kompiuteriams ir dabartiniams telefonams, ir todėl patarimas naudoti AES yra pagrįsta numatytoji reikšmė duomenų centre.

Problema yra antros eilės atvejis. Be specialių instrukcijų AES programinėje įrangoje yra lėtas, o lentelėmis pagrįsti programinės įrangos įgyvendinimai turi ilgą podėlio laiko problemų istoriją. VPN koncentratorius virtualioje mašinoje, kurios šeimininkas neatskleidžia svečiui AES vėliavėlių, yra būtent šis atvejis, ir jį lengva praleisti, nes šeimininko CPU turi šią funkciją.

Tikrinkite, ką procesas iš tikrųjų mato, o ne ką CPU palaiko: grep -o aes /proc/cpuinfo | head -1 Linux sistemoje arba atitinkamą funkcijos vėliavėlę hipervizoriaus CPU modelyje.

Kur laimi ChaCha20-Poly1305

ChaCha20 yra greitas perkeliamoje programinėje įrangoje, nes naudoja tik sudėtį, sukimą ir XOR, o jo įgyvendinimai pagal dizainą vengia nuo paslapties priklausančios lentelių paieškos. Įrenginyje be AES pagreitinimo tai materialus pranašumas, ir todėl WireGuard jį pasirinko: WireGuard protokolo aprašymas nurodo ChaCha20-Poly1305 kaip duomenų šifrą be alternatyvos.

Šis vienintelis pasirinkimas pasako kai ką naudingo: techninėje įrangoje, kur AES pagreitintas, WireGuard atsisako dalies pralaidumo, palyginti su AES-GCM, ir jo autoriai su tuo sutiko mainais už nuspėjamą elgesį telefonuose, namų maršrutizatoriuose ir konteinerių šeimininkuose. Jei jūsų parkas daugiausia maži ARM dėžutės, šis mainas jums naudingas.

Priešingas atvejis yra užimtas x86 koncentratorius, kur AES-GCM su AES-NI yra greitesnis ir geriau palaikomas kelias, o ChaCha20 kainuoja išmatuojamą CPU už kiekvieną gigabitą. Nė viena konstrukcija nėra silpnybė; klausimas, kurią jūsų techninė įranga vykdo pigiai.

Ką jūsų protokolas iš tikrųjų leidžia pasirinkti

ProtocolWhat you get
WireGuardChaCha20-Poly1305 only; no negotiation
OpenVPN 2.5 and laterData channel negotiated from data-ciphers: AES-256-GCM, AES-128-GCM, CHACHA20-POLY1305
IPsec / IKEv2AES-GCM as a combined-mode transform, or ChaCha20-Poly1305 where both peers implement it
OpenVPN control channelTLS decides; TLS 1.3 offers AES-GCM and ChaCha20-Poly1305 suites

Atkreipkite dėmesį į atskyrimą OpenVPN: valdymo kanalas ir duomenų kanalas deramasi atskirai, todėl rinkinys, kurį matote TLS, nieko nesako apie šifrą, saugantį jūsų naudingąją apkrovą. Sesijos suvestinė praneša abu, o skaityti tik vieną iš dviejų yra dažnas painiavos šaltinis.

OpenVPN duomenų kanalo šifras ateina iš data-ciphers sąrašo abiejuose galuose. Jei serverio sąrašas ir kliento sąrašas nesikerta, ryšys arba grįžta prie to, ką leidžia data-ciphers-fallback, arba visiškai nepavyksta, ir ta nesėkmė paprastai priskiriama neteisingam sluoksniui. Nustatykite tą patį sąrašą abiejose pusėse, tada patvirtinkite suderėtą rezultatą žurnale, o ne manykite, kad sąrašo tvarka buvo paisoma.

Spręskite pagal tris diegimo faktus

Pirma, ar galiniai taškai turi AES pagreitinimą? Jei turi kiekvienas partneris, AES-GCM yra pigesnis pasirinkimas ir numatytasis daugumoje prižiūrimų konfigūracijų. Jei didelė dalis yra maži maršrutizatoriai ar senesni telefonai, ChaCha20-Poly1305 neleidžia parko uodegai tapti talpos riba.

Antra, ar protokolas apskritai siūlo pasirinkimą? Su WireGuard sprendimas jau priimtas už jus, o naudingas darbas yra patikrinti, ar įrankiai aplink jį tyliai nekeičia kuo nors kitu. Su OpenVPN ir IPsec atsakymas yra konfigūracijos eilutė ir suderėtas rezultatas, kurį reikia užrašyti.

Trečia, ar abi pusės gali susitarti? Šifras, kurio vienas partneris neįgyvendina, nėra našumo sprendimas, tai pertraukimas. Todėl partnerių sąrašas svarbesnis už bet kokį matavimą: mišriam parkui reikia galimybių sankirtos, o ne greičiausios mašinos pageidavimo.

Jei matuojate, laikykite įrenginį, galinį tašką ir apkrovą vienodus ir pakeiskite vieną dalyką. Testas, lyginantis du serverius skirtinguose regionuose, matuoja maršrutą, o ne šifrą, o nešiojamojo kompiuterio matavimas nieko nesako apie konteinerių šeimininką, kurio CPU vėliavėlės užmaskuotos. Palyginkite, tada užrašykite, kuris šifras iš tikrųjų buvo suderėtas: tas įrašas vertingesnis už matavimą.

Susiję straipsniai