Parehong pangalan ay mga konstruksiyon ng AEAD, parehong na-standardize, at sa kasalukuyang x86 server ay pupunuin ng alinman sa kanila ang isang gigabit na link nang walang nakikitang pagod. Tumitigil na maging basta-basta ang pagpili kapag umalis ka sa server na iyon: ang murang router, lumang telepono at virtual appliance ay kadalasang walang AES acceleration, at doon malaki ang pagkakaiba. Kaya ang paghahambing ay hindi kung aling cipher ang mas mabilis, kundi kung aling cipher ang gumagana nang maayos sa hanay ng mga endpoint na ito, at kung nag-aalok ba ng pagpili ang protocol.

Isang trabaho, magkaibang core

Parehong konstruksiyon ay nagbibigay ng pagiging lihim at integridad sa isang pass at nagpapatotoo sa kaugnay na data, kaya ginagamit ng mga protocol ng VPN ang mga ito para sa data channel. Ang pagkakaiba ay nasa loob: ang AES-GCM ay ang block cipher na AES sa counter mode na may polynomial authenticator sa GF(2^128), samantalang ang ChaCha20-Poly1305 ay stream cipher na may 256-bit na key at hiwalay na one-time authenticator.

Ang mahalaga sa operasyon ay karaniwan: parehong bigo nang malubha kapag ginamit muli ang nonce, parehong kailangan ng pamamahala ng nonce space kada key, at wala sa kanila ang nag-aayos ng kapareha na nagpapatotoo ng maling bagay. Ang profile na nagsasabing AES-256-GCM ay hindi mas ligtas kaysa sa nagsasabing CHACHA20-POLY1305; parehong matibay kapag tama ang implementasyon.

Saan nananalo ang AES-GCM

May dedikadong instruksiyon ang AES sa karamihan ng modernong CPU: AES-NI sa x86, ang crypto extension sa ARMv8 at katumbas sa mga bagong disenyo ng POWER at RISC-V. Kapag mayroon ang mga ito, pinapatakbo ng GCM ang ilang bloke nang sabay kada cycle class at hindi na mahalaga ang software implementation. Ito ang karaniwang kaso sa mga server, desktop at kasalukuyang telepono, at ito ang dahilan kung bakit ang payong gumamit ng AES ay makatwirang default sa isang data center.

Ang problema ay ang pangalawang antas na kaso. Kung walang dedikadong instruksiyon, mabagal ang AES sa software, at ang mga software implementation na hinihimok ng table ang may mahabang kasaysayan ng problema sa oras ng cache. Ang VPN concentrator sa isang virtual machine na hindi ipinapakita ng host ang mga flag ng AES sa guest ay eksaktong kasong ito, at madaling makaligtaan dahil may ganitong katangian ang CPU ng host.

Suriin ang aktwal na nakikita ng proseso, hindi ang sinusuportahan ng CPU: grep -o aes /proc/cpuinfo | head -1 sa Linux, o ang katumbas na feature flag sa modelo ng CPU ng hypervisor.

Saan nananalo ang ChaCha20-Poly1305

Mabilis ang ChaCha20 sa portable na software dahil gumagamit lamang ito ng pagdaragdag, pag-ikot at XOR, at ang mga implementation nito ay umiiwas sa disenyo sa paghahanap sa table na nakadepende sa lihim. Sa device na walang AES acceleration, materyal na bentahe iyon, at iyon ang dahilan kung bakit pinili ito ng WireGuard: inililista ng paglalarawan ng protocol ng WireGuard ang ChaCha20-Poly1305 bilang data cipher nito na walang alternatibo.

Ang nag-iisang pagpiling iyon ay nagsasabi ng kapaki-pakinabang: sa hardware kung saan pinabilis ang AES, nagbibigay ang WireGuard ng kaunting throughput kumpara sa AES-GCM, at tinanggap ito ng mga may-akda kapalit ng mahuhulaang pag-uugali sa mga telepono, home router at container host. Kung ang iyong fleet ay halos maliliit na kahon ng ARM, pabor sa iyo ang palitang iyon.

Ang kabaligtaran ay ang abalang x86 concentrator, kung saan ang AES-GCM na may AES-NI ang mas mabilis at mas suportadong landas, at kung saan ang ChaCha20 ay gumagastos ng masusukat na CPU kada gigabit. Wala sa dalawang konstruksiyon ang kahinaan; ang tanong ay alin ang murang isinasagawa ng iyong hardware.

Ano ang aktwal na pinapapili sa iyo ng protocol mo

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

Pansinin ang paghahati sa OpenVPN: ang control channel at data channel ay hiwalay na pinag-uusapan, kaya ang suite na nakikita mo para sa TLS ay walang sinasabi tungkol sa cipher na nagpoprotekta sa payload mo. Iniulat ng session summary ang dalawa, at ang pagbasa ng isa lamang sa dalawa ay karaniwang pinagmumulan ng kalituhan.

Sa OpenVPN, ang cipher ng data channel ay nagmumula sa listahan ng data-ciphers sa magkabilang dulo. Kung hindi magsalubong ang listahan ng server at ng client, ang koneksiyon ay bumabalik sa pinapayagan ng data-ciphers-fallback o tuluyang nabibigo, at ang kabiguan ay kadalasang isinisisi sa maling layer. Ilagay ang parehong listahan sa magkabilang panig, pagkatapos ay kumpirmahin sa log ang napagkasunduang resulta sa halip na ipagpalagay na iginalang ang pagkakasunod-sunod ng listahan.

Magpasya mula sa tatlong katotohanan tungkol sa deployment

Una, may AES acceleration ba ang mga endpoint? Kung mayroon ang bawat kapareha, ang AES-GCM ang mas murang pinili at default sa karamihan ng inaalagaang configuration. Kung malaking bahagi ay maliliit na router o lumang telepono, pinipigilan ng ChaCha20-Poly1305 ang buntot ng fleet na maging limitasyon ng kapasidad.

Ikalawa, nag-aalok ba ng pagpili ang protocol? Sa WireGuard, ginawa na ang desisyon para sa iyo, at ang kapaki-pakinabang na trabaho ay tiyakin na hindi palihim na pinapalitan ng mga tool sa paligid nito ang ibang bagay. Sa OpenVPN at IPsec, ang sagot ay isang linya ng configuration at isang napagkasunduang resultang dapat itala.

Ikatlo, magkasundo ba ang magkabilang dulo? Ang cipher na hindi ipinatupad ng isang kapareha ay hindi desisyon sa performance, ito ay pagtigil. Kaya mas mahalaga ang listahan ng kapareha kaysa sa anumang benchmark: kailangan ng pinaghalong fleet ang intersection ng mga kakayahan, hindi ang kagustuhan ng pinakamabilis na makina.

Kung magsukat ka, panatilihing pareho ang device, endpoint at load at isang bagay lamang ang baguhin. Ang pagsubok na naghahambing ng dalawang server sa magkaibang rehiyon ay nagsusukat ng ruta, hindi ng cipher, at ang benchmark sa laptop ay walang sinasabi tungkol sa container host na nakatago ang mga flag ng CPU. Ihambing, pagkatapos ay itala kung aling cipher ang aktwal na napagkasunduan: mas mahalaga ang talaang iyon kaysa sa benchmark.

Kaugnay na mga artikulo