AES-GCM или ChaCha20-Poly1305: избор шифре података за VPN
AES-GCM је очигледан избор на серверима са хардверским убрзањем, а ChaCha20-Poly1305 ради добро и без њега. Ваш протокол можда одлучи уместо вас.
Оба назива су 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 кошта мерљив процесор по гигабиту. Ниједна конструкција није слабост; питање је коју ваш хардвер извршава јефтино.
Шта вам протокол заправо дозвољава да изаберете
| 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 |
Обратите пажњу на поделу у OpenVPN-у: контролни канал и канал података преговарају се одвојено, па скуп који видите за TLS не говори ништа о шифри која штити ваш терет. Сажетак сесије пријављује оба, а читање само једног од два је чест извор забуне.
У OpenVPN-у шифра канала података долази са листе data-ciphers на оба краја. Ако се серверска и клијентска листа не секу, веза се или враћа на оно што дозвољава data-ciphers-fallback, или потпуно пада, а тај неуспех се обично приписује погрешном слоју. Поставите исту листу на обе стране, па потврдите преговарани резултат у дневнику уместо да претпостављате да је редослед листе испоштован.
Одлучите на основу три чињенице о постављању
Прво, имају ли крајње тачке AES убрзање? Ако има сваки партнер, AES-GCM је јефтинији избор и подразумевани у већини одржаваних конфигурација. Ако је значајан део мали рутери или старији телефони, ChaCha20-Poly1305 спречава да реп флоте постане граница капацитета.
Друго, нуди ли протокол уопште избор? Код WireGuard-а је одлука донета уместо вас, а користан посао је проверити да алати око њега тихо не подмећу нешто друго. Код OpenVPN-а и IPsec-а одговор је линија конфигурације и преговарани резултат који треба забележити.
Треће, могу ли се обе стране сложити? Шифра коју један партнер не имплементира није одлука о перформансама, него прекид. Зато је листа партнера важнија од било ког мерења: мешовита флота треба пресек могућности, а не склоност најбрже машине.
Ако мерите, држите уређај, крајњу тачку и оптерећење истим и мењајте једну ствар. Тест који пореди два сервера у различитим регијама мери руту, а не шифру, а мерење на лаптопу не говори ништа о хосту контејнера чије су процесорске заставице маскиране. Упоредите, па запишите која је шифра заиста преговарана: тај запис вреди више од мерења.