Obě jména jsou konstrukce AEAD, obě jsou standardizovaná a na současném serveru x86 každá z nich nasytí gigabitové spojení bez viditelné námahy. Volba přestává být libovolná ve chvíli, kdy ten server opustíte: levné routery, starší telefony a virtuální zařízení často nemají hardwarové zrychlení AES a tam je rozdíl velký. Srovnání tedy není o tom, která šifra je rychlejší, ale která šifra na této sadě koncových bodů běží dobře a zda protokol vůbec nějakou volbu nabízí.

Stejná práce, jiná jádra

Obě konstrukce poskytují důvěrnost i integritu v jednom průchodu a autentizují přidružená data, proto je protokoly VPN používají pro datový kanál. Rozdíl je uvnitř: AES-GCM je bloková šifra AES v režimu čítače s polynomiálním autentizátorem nad GF(2^128), zatímco ChaCha20-Poly1305 je proudová šifra s klíčem 256 bitů a samostatným jednorázovým autentizátorem.

Provozně důležité je společné: obě katastrofálně selhávají při opakovaném použití nonce, obě potřebují správu prostoru nonce pro každý klíč a ani jedna neopraví protějšek, který autentizuje špatnou věc. Profil, který říká AES-256-GCM, není bezpečnější než ten, který říká CHACHA20-POLY1305; oba jsou silné, když je implementace správná.

Kde vítězí AES-GCM

AES má vyhrazené instrukce na většině moderních procesorů: AES-NI na x86, kryptografická rozšíření na ARMv8 a ekvivalenty na novějších návrzích POWER a RISC-V. Když jsou k dispozici, běží GCM několik bloků paralelně za třídu cyklů a softwarová implementace přestává být podstatná. To je běžný případ serverů, stolních počítačů i současných telefonů, a proto je rada používat AES rozumným výchozím nastavením v datovém centru.

Problém je případ druhého řádu. Bez vyhrazených instrukcí je AES v softwaru pomalé a implementace řízené tabulkami mají dlouhou historii problémů s časováním přístupu do cache. VPN koncentrátor ve virtuálním stroji, jehož hostitel nevystavuje hostovi příznaky AES, je přesně tento případ a snadno se přehlédne, protože procesor hostitele tu funkci má.

Ověřte, co proces skutečně vidí, ne co procesor podporuje: grep -o aes /proc/cpuinfo | head -1 v Linuxu, nebo odpovídající příznak funkce v modelu procesoru hypervizoru.

Kde vítězí ChaCha20-Poly1305

ChaCha20 je v přenosném softwaru rychlé, protože používá jen sčítání, rotaci a XOR a jeho implementace se záměrně vyhýbají vyhledávání v tabulkách závislém na tajemství. Na zařízení bez zrychlení AES je to podstatná výhoda, a proto si ho WireGuard vybral: popis protokolu WireGuard uvádí ChaCha20-Poly1305 jako svou datovou šifru bez alternativy.

Tato jediná volba říká něco užitečného: na hardwaru, kde je AES zrychlené, WireGuard oproti AES-GCM část propustnosti odevzdá, a jeho autoři to přijali výměnou za předvídatelné chování na telefonech, domácích routerech a hostitelích kontejnerů. Pokud je vaše flotila převážně malá zařízení ARM, tato výměna hraje ve váš prospěch.

Opačný případ je vytížený koncentrátor x86, kde je AES-GCM s AES-NI rychlejší a lépe podporovaná cesta a kde ChaCha20 stojí měřitelný procesorový čas na každý gigabit. Ani jedna konstrukce není slabina; otázkou je, kterou váš hardware provádí levně.

Co vám protokol skutečně dovolí vybrat

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

Všimněte si rozdělení v OpenVPN: řídicí kanál a datový kanál se vyjednávají odděleně, takže sada, kterou vidíte pro TLS, neříká nic o šifře chránící váš obsah. Souhrn relace hlásí obojí a čtení jen jednoho z těch dvou je častý zdroj zmatku.

V OpenVPN pochází šifra datového kanálu ze seznamu data-ciphers na obou stranách. Pokud se seznam serveru a seznam klienta neprotínají, spojení se buď vrátí k tomu, co dovoluje data-ciphers-fallback, nebo úplně selže, a toto selhání se obvykle přičítá špatné vrstvě. Nastavte stejný seznam na obou stranách a potom potvrďte vyjednaný výsledek v logu, místo abyste předpokládali, že bylo dodrženo pořadí seznamu.

Rozhodněte podle tří faktů o nasazení

Za prvé, mají koncové body zrychlení AES? Pokud je má každý protějšek, je AES-GCM levnější volbou a výchozím nastavením ve většině udržovaných konfigurací. Pokud významný podíl tvoří malé routery nebo starší telefony, ChaCha20-Poly1305 brání tomu, aby se konec flotily stal kapacitním limitem.

Za druhé, nabízí protokol vůbec volbu? U WireGuardu je rozhodnutí uděláno za vás a užitečná práce je ověřit, že nástroje kolem tiše nenahrazují něco jiného. U OpenVPN a IPsec je odpovědí řádek konfigurace a vyjednaný výsledek, který je třeba zaznamenat.

Za třetí, mohou se obě strany dohodnout? Šifra, kterou jeden protějšek neimplementuje, není rozhodnutí o výkonu, je to výpadek. Proto je seznam protějšků důležitější než jakýkoli benchmark: smíšená flotila potřebuje průnik schopností, ne preferenci nejrychlejšího stroje.

Pokud měříte, držte zařízení, koncový bod i zátěž stejné a měňte jednu věc. Test, který srovnává dva servery v různých regionech, měří trasu, ne šifru, a benchmark na notebooku neříká nic o hostiteli kontejnerů, jehož procesorové příznaky jsou maskované. Srovnejte a potom si zapište, která šifra byla skutečně vyjednána: tento záznam má větší cenu než benchmark.

Související články