Оба назива су AEAD конструкције, оба су стандардизована, и на савременом серверу x86 свака од њих ће заситити гигабитну везу без видљивог напора. Избор престаје да буде произвољан када напустите тај сервер: јефтини рутери, старији телефони и виртуелни уређаји често немају AES убрзање, а тамо је разлика велика. Зато поређење није која је шифра бржа, него која шифра добро ради на овом скупу крајњих тачака и нуди ли протокол уопште избор.

Исти посао, друга језгра

Обе конструкције дају поверљивост и интегритет у једном пролазу и аутентификују придружене податке, због чега их VPN протоколи користе за канал података. Разлика је унутра: AES-GCM је AES блок шифра у режиму бројача са полиномским аутентификатором над GF(2^128), док је ChaCha20-Poly1305 проточна шифра са 256-битним кључем и одвојеним једнократним аутентификатором.

Оно што је оперативно важно је заједничко: обе катастрофално падају при поновној употреби nonce вредности, обе захтевају управљање простором nonce вредности по кључу, и ниједна не поправља партнера који аутентификује погрешну ствар. Профил који каже AES-256-GCM није сигурнији од оног који каже CHACHA20-POLY1305; оба су јака када је имплементација исправна.

Где побеђује AES-GCM

AES има наменске инструкције на већини модерних процесора: AES-NI на x86, крипто екстензије на ARMv8 и еквиваленте на новијим POWER и RISC-V дизајнима. Када су присутне, GCM извршава неколико блокова паралелно по класи циклуса и софтверска имплементација постаје неважна. То је уобичајен случај за сервере, стона рачунара и садашње телефоне, и зато је савет да се користи AES разуман подразумевани избор у дата центру.

Проблем је случај другог реда. Без наменских инструкција AES је у софтверу спор, а софтверске имплементације вођене табелама имају дугу историју проблема са временом приступа кешу. VPN концентратор у виртуелној машини чији хост не излаже AES заставице госту је управо тај случај, и лако се пропусти јер процесор хоста има ту функцију.

Проверите шта процес заиста види, а не шта процесор подржава: grep -o aes /proc/cpuinfo | head -1 на Linux-у, или одговарајућу заставицу функције у моделу процесора хипервизора.

Где побеђује ChaCha20-Poly1305

ChaCha20 је брз у преносном софтверу јер користи само сабирање, ротацију и XOR, а његове имплементације по дизајну избегавају претраге табела зависне од тајне. На уређају без AES убрзања то је битна предност, и зато га је WireGuard изабрао: опис WireGuard протокола наводи ChaCha20-Poly1305 као његову шифру података без алтернативе.

Та једна одлука говори нешто корисно: на хардверу где је AES убрзан, WireGuard одступа од дела пропусности у поређењу са AES-GCM, а његови аутори су то прихватили у замену за предвидиво понашање на телефонима, кућним рутерима и хоставима контејнера. Ако је ваша флота углавном мала ARM кутија, та размена иде у вашу корист.

Супротан случај је заузет x86 концентратор, где је AES-GCM са AES-NI бржи и боље подржан пут, и где ChaCha20 кошта мерљив процесор по гигабиту. Ниједна конструкција није слабост; питање је коју ваш хардвер извршава јефтино.

Шта вам протокол заправо дозвољава да изаберете

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

Обратите пажњу на поделу у OpenVPN-у: контролни канал и канал података преговарају се одвојено, па скуп који видите за TLS не говори ништа о шифри која штити ваш терет. Сажетак сесије пријављује оба, а читање само једног од два је чест извор забуне.

У OpenVPN-у шифра канала података долази са листе data-ciphers на оба краја. Ако се серверска и клијентска листа не секу, веза се или враћа на оно што дозвољава data-ciphers-fallback, или потпуно пада, а тај неуспех се обично приписује погрешном слоју. Поставите исту листу на обе стране, па потврдите преговарани резултат у дневнику уместо да претпостављате да је редослед листе испоштован.

Одлучите на основу три чињенице о постављању

Прво, имају ли крајње тачке AES убрзање? Ако има сваки партнер, AES-GCM је јефтинији избор и подразумевани у већини одржаваних конфигурација. Ако је значајан део мали рутери или старији телефони, ChaCha20-Poly1305 спречава да реп флоте постане граница капацитета.

Друго, нуди ли протокол уопште избор? Код WireGuard-а је одлука донета уместо вас, а користан посао је проверити да алати око њега тихо не подмећу нешто друго. Код OpenVPN-а и IPsec-а одговор је линија конфигурације и преговарани резултат који треба забележити.

Треће, могу ли се обе стране сложити? Шифра коју један партнер не имплементира није одлука о перформансама, него прекид. Зато је листа партнера важнија од било ког мерења: мешовита флота треба пресек могућности, а не склоност најбрже машине.

Ако мерите, држите уређај, крајњу тачку и оптерећење истим и мењајте једну ствар. Тест који пореди два сервера у различитим регијама мери руту, а не шифру, а мерење на лаптопу не говори ништа о хосту контејнера чије су процесорске заставице маскиране. Упоредите, па запишите која је шифра заиста преговарана: тај запис вреди више од мерења.

Повезани чланци