Обидві назви — це конструкції 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 відповідь — рядок конфігурації та узгоджений результат, який треба записати.

По-третє, чи можуть обидві сторони домовитися? Шифр, який один партнер не реалізує, — це не рішення про продуктивність, а простій. Тому список партнерів важливіший за будь-який бенчмарк: змішаному парку потрібен перетин можливостей, а не перевага найшвидшої машини.

Якщо ви міряєте, тримайте пристрій, кінцеву точку й навантаження однаковими та змінюйте одну річ. Тест, що порівнює два сервери в різних регіонах, міряє маршрут, а не шифр, а замір на ноутбуці нічого не каже про хост контейнерів, чиї прапорці процесора приховані. Порівняйте, а потім запишіть, який шифр фактично узгоджено: цей запис цінніший за бенчмарк.

Схожі статті