Народный

Технологии цензуры

ESNI — Encrypted SNI

Предшественник ECH: первый стандарт TLS-расширения для шифрования SNI. Развёртывался Cloudflare в 2018–2020, заблокирован в Китае и России, заменён на ECH в 2021.

Определение

Encrypted SNI (ESNI) — экспериментальное TLS-расширение, скрывающее имя домена в TLS-handshake путём его шифрования отдельным публичным ключом, опубликованным через DNS. Разработан Cloudflare и Mozilla в 2018 году как ответ на массовое использование SNI для цензуры. Был задеплоен в Firefox 63+ и поддержан Cloudflare CDN, но никогда не достиг RFC-статуса.

ESNI решал лишь часть проблемы: шифровался только SNI, остальные части ClientHello (ALPN, ciphersuites, padding) оставались видимыми и характерными. К 2021 году IETF переключился на более полное решение — ECH (Encrypted ClientHello).

Как работало

  1. Сервер публикует ESNI-публичный ключ через DNS TXT-запись (_esni.example.com).
  2. Клиент перед TLS-handshake запрашивает этот ключ (желательно через DoH/DoT).
  3. В ClientHello клиент кладёт extension encrypted_server_name, содержащий зашифрованное имя домена.
  4. Сервер расшифровывает своим private key и продолжает handshake.

DPI на пути видит только encrypted_server_name = <opaque blob> — реальный домен не виден.

Почему умер

  • DNS-leak: DoH/DoT не были массовыми в 2019–2020. Большинство клиентов получали ESNI-ключ через cleartext DNS — DPI просто наблюдал DNS-запрос _esni.example.com TXT и понимал, к какому домену идёт TLS.
  • Fingerprint: сам факт наличия extension encrypted_server_name уникален. ТСПУ и GFW начали блокировать любые TLS-соединения с ESNI-расширением чохом.
  • Архитектурная ограниченность: ESNI шифровал только SNI, оставляя ALPN и расширения видимыми. Цензору достаточно блокировать «странные» ClientHello.

Блокировка в России и Китае

  • Россия: Роскомнадзор анонсировал блокировку ESNI в августе 2020. ТСПУ режет TLS-handshake с ESNI-extension. С тех пор ESNI в РФ не работает.
  • Китай: GFW блокирует ESNI с 2020 года — TLS reset на любом ClientHello с extension type 0xFFCE.

Преемник: ECH

В сентябре 2020 года Cloudflare публично отказался от ESNI в пользу ECH. ECH шифрует весь ClientHello (inner+outer split), использует HPKE вместо ad-hoc криптографии, и устроен так, чтобы fallback на «обычный» TLS был неотличим.

К 2026 году ECH в draft-22+, поддерживается Chrome, Firefox, Cloudflare. ESNI считается deprecated — никаких новых deployment’ов.

Историческое значение

ESNI важен как первый production-уровневый шаг к полностью зашифрованному TLS-handshake. Он показал и проблемы (DNS-leak, fingerprinting), и направление — без замены SNI на нечто опаковое цензура остаётся тривиальной. Без ESNI не было бы ECH.

Источники

  • draft-ietf-tls-esni-09 — последний ESNI draft перед переходом к ECH.
  • Cloudflare blog 2018-09 — анонс ESNI.
  • IETF 110 (March 2021) — официальный переход к ECH.

Связанные термины

  • ECH — наследник, шифрует весь ClientHello.
  • SNI — что именно скрывается.
  • SNI-блок — основная угроза, на которую ESNI отвечал.
  • TLS 1.3 — handshake-протокол.
  • DPI — общий контекст блокировок.