Технологии цензуры
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).
Как работало
- Сервер публикует ESNI-публичный ключ через DNS TXT-запись (
_esni.example.com). - Клиент перед TLS-handshake запрашивает этот ключ (желательно через DoH/DoT).
- В ClientHello клиент кладёт extension
encrypted_server_name, содержащий зашифрованное имя домена. - Сервер расшифровывает своим 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.