OSEN-НИЙ SAAALEСкидка 50% на виртуальный хостинг и VDS
до 30.11.2025 Подробнее
Выберите продукт

TLS 2025: AES‑GCM vs ChaCha20‑Poly1305 на amd64 и arm64

Что выбрать для TLS в 2025: AES‑GCM или ChaCha20‑Poly1305. Разбираем поведение на amd64 и arm64, влияние аппаратных ускорений, особенности OpenSSL/BoringSSL. Даем готовые пресеты для Nginx и HAProxy и показываем, как тестировать и мониторить.
TLS 2025: AES‑GCM vs ChaCha20‑Poly1305 на amd64 и arm64

Вопрос «AES‑GCM против ChaCha20‑Poly1305» регулярно всплывает у админов и девопсов — то на ревью настроек Nginx/HAProxy, то при миграции на новые процессоры. К 2025 году картина стала стабильнее: TLS 1.3 везде, HTTP/3 на подъёме, аппаратное ускорение AES распространено на серверных amd64 и большинстве arm64 платформ. Но нюансов меньше не стало — особенно если у вас смешанный парк клиентов (десктоп, Android, старые устройства) и разные типы серверов (от классических Xeon до Graviton/Ampere).

Коротко: кто быстрее и когда

Если крайне кратко и прикладно:

  • amd64 с AES‑NI (фактически все современные серверные CPU): AES‑GCM заметно быстрее ChaCha20‑Poly1305, особенно на новых поколениях с ускорениями для умножения в поле (PCLMULQDQ) и расширенными векторными инструкциями.
  • arm64 с ARMv8 Crypto Extensions (AES+PMULL) — Neoverse N1/N2/V1/V2, Ampere, Graviton: AES‑GCM обычно сравним или быстрее ChaCha20‑Poly1305. На многих чипах отставание ChaCha20 минимально, но чаще AES‑GCM лидирует.
  • Без аппаратного AES (старый ARM, часть мобильных): ChaCha20‑Poly1305 выигрывает в разы по пропускной способности и энергоэффективности.

Итог: на сервере включайте и AES‑GCM, и ChaCha20‑Poly1305. В TLS 1.3 клиент выбирает шифр, и это почти всегда приводит к оптимальному выбору для его CPU. В TLS 1.2 можно сохранить приоритет AES‑GCM, не ломая совместимость.

Что изменилось к 2025 году

Несколько важных трендов, влияющих на выбор шифров:

  • TLS 1.3 — по умолчанию. Большая часть браузеров и серверов «живёт» на TLS 1.3. В нём шифры ограничены и современны: AES‑GCM (128/256) и ChaCha20‑Poly1305 (плюс CCM‑варианты, но они почти не встречаются в браузерах).
  • Детектирование возможностей CPU на клиенте. Браузеры выбирают порядок шифров с учётом наличия аппаратного AES. На десктопе с AES‑NI первым будет AES‑GCM, на слабом ARM — ChaCha20‑Poly1305.
  • arm64 в проде — норма. Большинство облачных arm64 (Graviton, Ampere) имеют Crypto Extensions, поэтому AES‑GCM там смотрится отлично и часто лидирует.
  • HTTP/3 (QUIC). Всегда на TLS 1.3; состав шифров тот же, что и для TCP/TLS 1.3, картина производительности аналогична.

Криптофон: чем принципиально отличаются AES‑GCM и ChaCha20‑Poly1305

Оба — AEAD (Authenticated Encryption with Associated Data), то есть дают целостность и конфиденциальность одновременно, без отдельного MAC:

  • AES‑GCM — блочный шифр AES в режиме GCM с аутентификацией на базе умножений в поле Галуа. Прекрасно масштабируется с аппаратными ускорениями: AES‑NI, PCLMULQDQ на amd64, AES/PMULL на arm64.
  • ChaCha20‑Poly1305 — потоковый шифр (ChaCha20) плюс Poly1305‑MAC, хорошо оптимизируется в софте и менее критичен к особенностям кэшей и конвейеров. На CPU без AES‑NI часто заметно быстрее AES‑GCM.

В TLS 1.3 главенствует трио: TLS_AES_128_GCM_SHA256, TLS_AES_256_GCM_SHA384, TLS_CHACHA20_POLY1305_SHA256. Формально RFC включает ещё CCM‑варианты, но в вебе они редкость, а по производительности для массовых сценариев уступают.

Сравнение производительности AES‑GCM и ChaCha20‑Poly1305 на amd64 и arm64

amd64: от AES‑NI к ускоренным реализациям GCM

На x86_64 с AES‑NI AES‑GCM обычно быстрее ChaCha20‑Poly1305 уже много лет. С новыми микроархитектурами ускоряется и сам GCM за счёт улучшений в перемножениях в поле и векторных путях. Дополнительно:

  • На загруженных фронтах с TLS‑терминацией ускорение AES‑GCM снижает CPU per connection и tail‑latency.
  • При большом объёме статического трафика (CDN/медиа) AES‑GCM даёт экономию энергопотребления на байт, что важно в облаках.

Практика: на современных amd64 серверные OpenSSL 3.x сборки используют быстрые реализации AES‑GCM; в типичных нагрузках вы получите от +30% до многократного выигрыша над ChaCha20‑Poly1305, особенно при больших буферах.

arm64: Crypto Extensions меняют баланс

На arm64 исторически ChaCha20‑Poly1305 был фаворитом на дешёвых и мобильных CPU без ускорений. Но в облаке и на современных SoC почти всегда есть ARMv8 Crypto Extensions:

  • Neoverse N1/N2/V1/V2, Ampere Altra/Max, AWS Graviton имеют AES и PMULL, что «раскрывает» AES‑GCM.
  • В реальных стендах AES‑GCM часто равен или опережает ChaCha20‑Poly1305, хотя отрыв обычно меньше, чем на x86_64 с AES‑NI.
  • На старом ARM без Crypto Extensions ChaCha20‑Poly1305 остаётся лучшим выбором.

Хотите быстро попробовать arm64 под веб‑нагрузкой — поднимите стенд на VDS и сравните профили CPU/latency на своих сервисах. Для практического бэкграунда по ARM см. также замеры PHP/Node на ARM VDS.

OpenSSL vs BoringSSL: кто за что отвечает

В контексте веб‑серверов и балансировщиков:

  • OpenSSL 1.1.1/3.x — де‑факто стандарт для Nginx и HAProxy в дистрибутивах. Быстрые пути AES‑GCM есть на amd64 и arm64. Конфигурирование TLS 1.3 шифров в Nginx делается через ssl_conf_command.
  • BoringSSL — используется в браузерах и ряде проектов; серверные сборки Nginx на BoringSSL встречаются реже. BoringSSL агрессивнее оптимизирует и динамически учитывает возможности CPU на клиентской стороне.

Ключевая мысль: в TLS 1.3 клиент задаёт порядок шифров. Сервер не может «переприоритизировать» его, в отличие от TLS 1.2. Поэтому на сервере важно просто включить весь «здоровый» набор (AES‑GCM и ChaCha20‑Poly1305) и дать клиенту выбрать оптимум.

FastFox SSL
Надежные SSL-сертификаты
Мы предлагаем широкий спектр SSL-сертификатов от GlobalSign по самым низким ценам. Поможем с покупкой и установкой SSL бесплатно!

Практические рекомендации по наборам шифров на 2025 год

  • TLS 1.3: включить TLS_AES_128_GCM_SHA256, TLS_CHACHA20_POLY1305_SHA256, TLS_AES_256_GCM_SHA384. Не включать CCM для веб‑клиентов, если нет спец‑требований.
  • TLS 1.2: держать только современные AEAD: ECDHE‑ECDSA‑AES128‑GCM‑SHA256, ECDHE‑RSA‑AES128‑GCM‑SHA256, далее ChaCha20‑Poly1305 варианты, затем AES‑256‑GCM. Включить приоритет сервера.
  • AES‑128 vs AES‑256: в большинстве случаев AES‑128‑GCM быстрее и достаточно безопасен. AES‑256‑GCM — для политик, где это обязательно; держите его после AES‑128 и ChaCha20.
  • Отключить: CBC, 3DES, RC4 и прочее наследие. В вебе им не место.

Nginx: безопасные пресеты для OpenSSL

Ниже — аккуратный базовый набор. Обратите внимание: ssl_prefer_server_ciphers on влияет только на TLS 1.2. Для TLS 1.3 используется ssl_conf_command с Ciphersuites.

ssl_protocols TLSv1.2 TLSv1.3;
ssl_session_cache shared:TLS:50m;
ssl_session_timeout 10m;
ssl_session_tickets off;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers on;
ssl_conf_command Ciphersuites TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384;
ssl_ecdh_curve X25519:P-256;

Для сборок на BoringSSL синтаксис ssl_conf_command может отличаться; по умолчанию там и так активны три шифра TLS 1.3.

HAProxy: настраиваем TLS 1.2 и TLS 1.3

В HAProxy различаются параметры для 1.2 и 1.3 — это удобно и прозрачно.

global
  ssl-server-verify none
  tune.ssl.default-dh-param 2048
  ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384
  ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384
  ssl-default-bind-options prefer-server-ciphers no-sslv3 no-tls-tickets

frontend https-in
  bind :443 ssl crt /etc/haproxy/certs/example.pem alpn h2,http/1.1
  default_backend app
FastFox VDS
Облачный VDS-сервер в России
Аренда виртуальных серверов с моментальным развертыванием инфраструктуры от 195₽ / мес

HTTP/3 (QUIC): что учесть

HTTP/3 всегда использует TLS 1.3, состав шифров тот же. Для слабых ARM‑клиентов (часть мобильного сегмента) ChaCha20‑Poly1305 часто будет выбран клиентом, а для десктопа с AES‑NI — AES‑GCM. На сервере достаточно держать весь набор; каких‑то особых QUIC‑исключений по шифрам нет. Подробно о практической стороне см. терминация HTTP/3 (QUIC) в HAProxy.

Примеры команд openssl speed и полей TLS в логах

Производительность на практике: где «бутылочное горлышко»

Важно помнить: шифр влияет на симметричную часть TLS, но не на стоимость рукопожатия. В реальных сценариях задержки и CPU уходят в:

  • ECDHE (P‑256/X25519) в рукопожатии;
  • проверку сертификата у клиента и OCSP у сервера (если включён stapling, он помогает);
  • алгоритм подписи (ECDSA быстрее RSA на современных CPU).

Когда соединений много и они длинные (HTTP/2/3, keepalive), именно скорость AEAD‑шифра на больших блоках определяет утилизацию CPU и энергопотребление. Здесь на amd64/arm64 с ускорениями AES‑GCM чаще фаворит. Если вам нужно быстро оформить выпуск и продление, используйте SSL‑сертификаты с OCSP stapling на фронтах.

Как корректно замерять: OpenSSL speed

Быстрый способ сравнить шифры на конкретном сервере — встроенный бенчмарк. Он не идеален, но даёт ориентир:

# Проверить версию и сборку
openssl version -a
# Сравнить AEAD на вашей платформе
openssl speed -evp aes-128-gcm -evp aes-256-gcm -evp chacha20-poly1305
# Оценить влияние размера буферов (пример 16К)
openssl speed -evp aes-128-gcm -bytes 16384
openssl speed -evp chacha20-poly1305 -bytes 16384

Сравнивайте не только «шифры в вакууме», но и профиль реального трафика: доли коротких ответов и крупных отдач, долю мобильных клиентов, наличие TLS‑терминации для gRPC/HTTP/2/3.

Мониторинг: фиксируем выбранный шифр в логах

Nginx

log_format tls '$remote_addr $host $request_method $uri $status $body_bytes_sent TLSv=$ssl_protocol cipher=$ssl_cipher';
access_log /var/log/nginx/tls.log tls;

HAProxy

defaults
  mode http
  option httplog
  log-format '%ci:%cp [%t] %ft %b/%s %TR/%Tw/%Tc/%Tr/%Ta TLSv=%[ssl_fc_protocol] cipher=%[ssl_fc_cipher] alpn=%[ssl_fc_alpn]'

С недельной выдержкой логи дадут реальную картину: доля TLS 1.2 против 1.3, какой шифр выбирается клиентами, есть ли «хвосты» со старыми стеками.

Частые вопросы

Нужно ли навязывать ChaCha20‑Poly1305 на сервере?

В TLS 1.3 — нет, клиент решает. В TLS 1.2 принудительно ставить ChaCha20 первым на серверах с AES‑аппаратным ускорением обычно невыгодно: вы ухудшите производительность для большинства клиентов, у которых AES быстрый. Лучше оставить AES‑GCM первым и держать ChaCha20 как отличную альтернативу.

AES‑128‑GCM против AES‑256‑GCM

Разница в безопасности для веб‑трафика при корректных параметрах несущественна, а вот разница в скорости — есть. Типовой порядок: AES_128_GCM, затем CHACHA20_POLY1305, затем AES_256_GCM. Если политика требует «только 256», будьте готовы к росту CPU и задержек.

Есть ли смысл включать CCM?

Обычно — нет. Браузерная поддержка слабая, производительность хуже. Для IoT/DTLS‑кейсов — отдельная история, но это вне веб‑фронтов.

Что с HTTP/3 и 0‑RTT?

0‑RTT влияет на семантику и безопасность повторов, но не меняет сравнение AES‑GCM и ChaCha20‑Poly1305. В HTTP/3 используйте тот же набор шифров TLS 1.3.

План внедрения и проверки

  1. Аудит текущего стека: версии Nginx/HAProxy, OpenSSL; включены ли TLS 1.3, H2/H3; какие шифры активны.
  2. Приведение к базовой политике: включить три шифра TLS 1.3; в TLS 1.2 оставить только GCM и ChaCha20; включить приоритет сервера.
  3. Микробенчмарки: openssl speed на ваших amd64/arm64 узлах, на разных типах инстансов.
  4. Canary‑включение: раскатить пресеты на часть фронтов, следить за CPU, p95/p99, ошибками TLS.
  5. Наблюдаемость: добавить поля TLS в логи и дашборды; проверить долю старых клиентов на TLS 1.2 и их шифры.
  6. Оптимизация: если доля слабых клиентов велика, убедиться, что ChaCha20‑Poly1305 доступен. Если почти все — современные, убедиться, что AES‑GCM не ограничен конфигом и сборкой.

Выводы

В 2025 году «соревнование» во многом решено железом и клиентским стеком. На серверных amd64 и arm64 с ускорениями AES‑GCM обычно быстрее и экономичнее, а ChaCha20‑Poly1305 остаётся необходимым для части мобильных и устаревших устройств. Лучшее решение — включать оба и позволить TLS 1.3 клиентам выбирать оптимальный шифр. В TLS 1.2 сохраняем приоритет AES‑GCM, не забывая про ChaCha как надёжную страховку совместимости. Если строите новый фронт или переносите сервисы, проверьте пресеты, метрики и профиль клиентов — это даст и ниже CPU, и ровнее хвосты задержек без компромиссов по безопасности.

Поделиться статьей

Вам будет интересно

Post‑quantum TLS в 2025: гибридный KEM X25519+Kyber без боли для продакшена OpenAI Статья написана AI (GPT 5)

Post‑quantum TLS в 2025: гибридный KEM X25519+Kyber без боли для продакшена

Квантовая стойкость перестала быть теорией: в 2025 гибридный KEM X25519+Kyber уже можно включать на периметре. Разбираем влияние н ...
gRPC 2025: Nginx vs Envoy vs HAProxy — практическое сравнение OpenAI Статья написана AI (GPT 5)

gRPC 2025: Nginx vs Envoy vs HAProxy — практическое сравнение

В 2025 году gRPC давно вышел за пределы экспериментов. Разбираемся, какой прокси выбрать: Nginx, Envoy или HAProxy. Смотрим на HTT ...
Borg vs Restic: что выбрать для бэкапов на VDS OpenAI Статья написана AI (GPT 5)

Borg vs Restic: что выбрать для бэкапов на VDS

Выбираете инструмент для резервного копирования на VDS и сомневаетесь между Borg и Restic? Разбираем архитектуру, дедупликацию, ши ...