AES-GCM apo ChaCha20-Poly1305: zgjedhja e šifrimit të të dhënave të VPN
AES-GCM është zgjedhja e dukshme në serverët me përshpejtim harduerik, dhe ChaCha20-Poly1305 është ai që funksionon mirë pa të. Ndoshta protokolli juaj do të vendosë për ju.
Të dy emrat janë konstruksione AEAD, të dy janë standardizuar, dhe në një server x86 të tanishëm secili prej tyre do të mbushë një lidhje gigabit pa përpjekje të dukshme. Zgjedhja pushon së qeni arbitrare kur largoheni nga ai server: ruterat e lirë, telefonat më të vjetër dhe pajisjet virtuale shpesh nuk kanë përshpejtim AES, dhe atje diferenca është e madhe. Pra krahasimi nuk është se cili šifrim është më i shpejtë, por se cili šifrim funksionon mirë në këtë grup pikash fundore dhe nëse protokolli ofron fare zgjedhje.
I njëjti punë, bërthama të ndryshme
Të dy konstruksionet japin konfidencialitet dhe integritet në një kalim dhe autentifikojnë të dhënat e lidhura, prandaj protokollet VPN i përdorin ato për kanalin e të dhënave. Diferenca është brenda: AES-GCM është šifrimi bllok i AES në modalitetin numërues me një autentifikues polinomial mbi GF(2^128), ndërsa ChaCha20-Poly1305 është šifrim rrjedhës me çelës 256 bit dhe një autentifikues të veçantë njëpërdorimshëm.
Ajo që ka rëndësi operacionale është e përbashkët: të dy dështojnë katastrofikisht kur nonce ripërdoret, të dy kërkojnë menaxhimin e hapësirës së nonce për çdo çelës, dhe asnjëri nuk rregullon një partner që autentifikon gjënë e gabuar. Një profil që thotë AES-256-GCM nuk është më i sigurt se një që thotë CHACHA20-POLY1305; të dy janë të fortë kur implementimi është i saktë.
Ku fiton AES-GCM
AES ka udhëzime të dedikuara në shumicën e CPU-ve moderne: AES-NI në x86, zgjerimet kriptografike në ARMv8 dhe ekuivalentët në modelet e reja POWER dhe RISC-V. Kur ato ekzistojnë, GCM ekzekuton disa blloqe paralelisht për klasë cikli dhe implementimi software bëhet i parëndësishëm. Ky është rasti i zakonshëm për serverët, kompjuterat e tavolinës dhe telefonat aktualë, dhe prandaj këshilla për të përdorur AES është një vlerë e parazgjedhur e arsyeshme në një qendër të dhënash.
Problemi është rasti i rendit të dytë. Pa udhëzime të dedikuara AES në software është i ngadaltë, dhe implementimet software të drejtuara nga tabela janë ato me historik të gjatë problemesh të kohës së cache. Një koncentrator VPN në një makinë virtuale, hosti i së cilës nuk i shfaq guest-it flamujt AES, është pikërisht ky rast, dhe është i lehtë për t u anashkaluar sepse CPU-ja e hostit e ka funksionin.
Kontrolloni atë që procesi sheh vërtet, jo atë që mbështet CPU-ja: grep -o aes /proc/cpuinfo | head -1 në Linux, ose flamuri ekuivalent i funksionit në modelin e CPU-së të hipervizorit.
Ku fiton ChaCha20-Poly1305
ChaCha20 është i shpejtë në software të transportueshëm sepse përdor vetëm mbledhje, rrotullim dhe XOR, dhe implementimet e tij shmangin sipas projektimit kërkimet në tabela që varen nga sekreti. Në një pajisje pa përshpejtim AES ky është avantazh material, dhe për këtë arsye WireGuard e zgjodhi: përshkrimi i protokollit WireGuard rendit ChaCha20-Poly1305 si šifrimin e të dhënave pa alternativë.
Ajo zgjedhje e vetme thotë diçka të dobishme: në harduer ku AES përshpejtohet, WireGuard heq dorë nga një pjesë e xhiros në krahasim me AES-GCM, dhe autorët e kanë pranuar këtë në këmbim të sjelljes së parashikueshme në telefona, ruterë shtëpiakë dhe hoste kontejnerësh. Nëse flota juaj është kryesisht kuti të vogla ARM, ai shkëmbim është në favorin tuaj.
Rasti i kundërt është një koncentrator x86 i zënë, ku AES-GCM me AES-NI është rruga më e shpejtë dhe më e mbështetur, dhe ku ChaCha20 kushton CPU të matshëm për gigabit. Asnjëri prej konstruksioneve nuk është dobësi; pyetja është se cilën hardueri juaj e ekzekuton lirë.
Çfarë ju lejon protokolli juaj të zgjidhni në të vërtetë
| Protocol | What you get |
|---|---|
| WireGuard | ChaCha20-Poly1305 only; no negotiation |
| OpenVPN 2.5 and later | Data channel negotiated from data-ciphers: AES-256-GCM, AES-128-GCM, CHACHA20-POLY1305 |
| IPsec / IKEv2 | AES-GCM as a combined-mode transform, or ChaCha20-Poly1305 where both peers implement it |
| OpenVPN control channel | TLS decides; TLS 1.3 offers AES-GCM and ChaCha20-Poly1305 suites |
Vini re ndarjen në OpenVPN: kanali i kontrollit dhe kanali i të dhënave negociohen veçmas, kështu që grupi që shihni për TLS nuk thotë asgjë për šifrimin që mbron ngarkesën tuaj. Përmbledhja e sesionit raporton të dyja, dhe leximi i vetëm njërës prej të dyjave është burim i zakonshëm konfuzioni.
Në OpenVPN šifrimi i kanalit të të dhënave vjen nga lista data-ciphers në të dy skajet. Nëse lista e serverit dhe lista e klientit nuk kryqëzohen, lidhja ose kthehet në atë që lejon data-ciphers-fallback ose dështon plotësisht, dhe ai dështim zakonisht i atribuohet shtresës së gabuar. Vendosni të njëjtën listë në të dy anët, pastaj konfirmoni rezultatin e negociuar në regjistër në vend që të supozoni se rendi i listës u respektua.
Vendosni nga tre fakte për vendosjen
Së pari, a kanë pikat fundore përshpejtim AES? Nëse çdo partner e ka, AES-GCM është zgjedhja më e lirë dhe e parazgjedhur në shumicën e konfigurimeve të mirëmbajtura. Nëse një pjesë e konsiderueshme janë ruterë të vegjël ose telefona të vjetër, ChaCha20-Poly1305 pengon bishtin e flotës të bëhet kufiri i kapacitetit.
Së dyti, a ofron protokolli fare zgjedhje? Me WireGuard vendimi është marrë për ju, dhe puna e dobishme është të verifikoni se mjetet përreth nuk zëvendësojnë në heshtje diçka tjetër. Me OpenVPN dhe IPsec përgjigjja është një rresht konfigurimi dhe një rezultat i negociuar që duhet regjistruar.
Së treti, a mund të bien dakord të dy skajet? Një šifrim që një partner nuk e implementon nuk është vendim performance, është ndërprerje. Prandaj lista e partnerëve ka më shumë rëndësi se çdo benchmark: një flotë e përzier ka nevojë për kryqëzimin e aftësive, jo për preferencën e makinës më të shpejtë.
Nëse matni, mbani pajisjen, pikën fundore dhe ngarkesën identike dhe ndryshoni një gjë. Një test që krahason dy serverë në rajone të ndryshme mat rrugën, jo šifrimin, dhe një matje në laptop nuk thotë asgjë për një host kontejnerësh, flamujt e CPU-së të të cilit janë të maskuar. Krahasoni, pastaj shkruani cili šifrim u negociua vërtet: ai regjistrim vlen më shumë se benchmark-u.