Oba naziva su AEAD konstrukcije, oba su standardizirana, i na suvremenom poslužitelju x86 svaka od njih zasitit će gigabitnu vezu bez vidljivog napora. Izbor prestaje biti proizvoljan kada napustite taj poslužitelj: jeftini usmjerivači, stariji telefoni i virtualni uređaji često nemaju AES ubrzanje, a tamo je razlika velika. Zato usporedba nije koja je šifra brža, nego koja šifra dobro radi na ovom skupu krajnjih točaka i nudi li protokol uopće izbor.

Isti posao, druga jezgra

Obje konstrukcije daju povjerljivost i cjelovitost u jednom prolazu i autentificiraju pridružene podatke, zbog čega ih VPN protokoli koriste za kanal podataka. Razlika je unutra: AES-GCM je AES blok šifra u načinu brojača s polinomskim autentifikatorom nad GF(2^128), dok je ChaCha20-Poly1305 protočna šifra s 256-bitnim ključem i zasebnim jednokratnim autentifikatorom.

Ono što je operativno važno je zajedničko: obje katastrofalno padaju pri ponovnoj uporabi nonce vrijednosti, obje zahtijevaju upravljanje prostorom nonce vrijednosti po ključu, i nijedna ne popravlja partnera koji autentificira pogrešnu stvar. Profil koji kaže AES-256-GCM nije sigurniji od onoga koji kaže CHACHA20-POLY1305; oba su jaka kada je implementacija ispravna.

Gdje pobjeđuje AES-GCM

AES ima namjenske instrukcije na većini modernih procesora: AES-NI na x86, kripto proširenja na ARMv8 i ekvivalente na novijim POWER i RISC-V dizajnima. Kada su prisutne, GCM izvodi nekoliko blokova paralelno po klasi ciklusa i softverska implementacija postaje nevažna. To je uobičajen slučaj za poslužitelje, stolna računala i sadašnje telefone, i zato je savjet da se koristi AES razuman zadani izbor u data centru.

Problem je slučaj drugog reda. Bez namjenskih instrukcija AES je u softveru spor, a softverske implementacije vođene tablicama imaju dugu povijest problema s vremenom pristupa predmemoriji. VPN koncentrator u virtualnom stroju čiji host ne izlaže AES zastavice gostu je upravo taj slučaj, i lako se propusti jer procesor hosta ima tu funkciju.

Provjerite što proces zaista vidi, a ne što procesor podržava: grep -o aes /proc/cpuinfo | head -1 na Linuxu, ili odgovarajuću zastavicu funkcije u modelu procesora hipervizora.

Gdje pobjeđuje ChaCha20-Poly1305

ChaCha20 je brz u prenosivom softveru jer koristi samo zbrajanje, rotaciju i XOR, a njegove implementacije po dizajnu izbjegavaju pretrage tablica zavisne od tajne. Na uređaju bez AES ubrzanja to je bitna prednost, i zato ga je WireGuard odabrao: opis WireGuard protokola navodi ChaCha20-Poly1305 kao njegovu šifru podataka bez alternative.

Ta jedna odluka govori nešto korisno: na hardveru gdje je AES ubrzan, WireGuard odustaje od dijela propusnosti u usporedbi s AES-GCM, a njegovi autori su to prihvatili u zamjenu za predvidivo ponašanje na telefonima, kućnim usmjerivačima i hostovima kontejnera. Ako je vaša flota uglavnom mala ARM kutija, ta razmjena ide u vašu korist.

Suprotan slučaj je zauzeti x86 koncentrator, gdje je AES-GCM s AES-NI brži i bolje podržan put, i gdje ChaCha20 košta mjerljiv procesor po gigabitu. Nijedna konstrukcija nije slabost; pitanje je koju vaš hardver izvodi jeftino.

Što vam protokol zapravo dopušta da izaberete

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

Obratite pozornost na podjelu u OpenVPN-u: kontrolni kanal i kanal podataka pregovaraju se odvojeno, pa skup koji vidite za TLS ne govori ništa o šifri koja štiti vaš teret. Sažetak sesije prijavljuje oboje, a čitanje samo jednoga od dvoga čest je izvor zabune.

U OpenVPN-u šifra kanala podataka dolazi s liste data-ciphers na oba kraja. Ako se poslužiteljska i klijentska lista ne sijeku, veza se ili vraća na ono što dopušta data-ciphers-fallback, ili potpuno pada, a taj se neuspjeh obično pripisuje pogrešnom sloju. Postavite istu listu na obje strane, pa potvrdite pregovorani rezultat u dnevniku umjesto da pretpostavljate da je redoslijed liste ispoštovan.

Odlučite na temelju tri činjenice o postavljanju

Prvo, imaju li krajnje točke AES ubrzanje? Ako ima svaki partner, AES-GCM je jeftiniji izbor i zadani u većini održavanih konfiguracija. Ako je značajan dio male usmjerivače ili stariji telefoni, ChaCha20-Poly1305 sprječava da rep flote postane granica kapaciteta.

Drugo, nudi li protokol uopće izbor? Kod WireGuard-a je odluka donesena umjesto vas, a koristan je posao provjeriti da alati oko njega tiho ne podmeću nešto drugo. Kod OpenVPN-a i IPsec-a odgovor je linija konfiguracije i pregovorani rezultat koji treba zabilježiti.

Treće, mogu li se obje strane složiti? Šifra koju jedan partner ne implementira nije odluka o performansama, nego prekid. Zato je lista partnera važnija od bilo kojeg mjerenja: mješovita flota treba presjek mogućnosti, a ne sklonost najbržeg stroja.

Ako ipak mjerite, držite uređaj, krajnju točku i opterećenje istima i mijenjajte jednu stvar. Test koji uspoređuje dva poslužitelja u različitim regijama mjeri rutu, a ne šifru, a mjerenje na prijenosniku ne govori ništa o hostu kontejnera čije su procesorske zastavice maskirane. Usporedite, pa zapišite koja je šifra zaista pregovarana: taj zapis vrijedi više od mjerenja.

Povezani članci