Компания Mozilla объявила о включении для пользователей стабильной ветки Firefox поддержки механизма ECH (Encrypted Client Hello), продолжающего развитие технологии ESNI (Encrypted Server Name Indication) и предназначенного для шифрования информации о параметрах TLS-сеансов, таких как запрошенное доменное имя. Изначально код для работы с ECH был добавлен в выпуск Firefox 85, но был отключён по умолчанию. В Chrome поддержку ECH начали постепенно включать, начиная с выпуска Chrome 115.
Так как помимо соединения с сервером утечка сведений о запрошенных доменах происходит через DNS, для полноценной защиты кроме ECH необходимо применение технологии DNS over HTTPS или DNS over TLS для шифрования DNS-трафика. Firefox не будет использовать ECH без включения DNS over HTTPS в настройках. Проверить поддержку ECH в браузере можно на данной странице.
Одним из факторов активации по умолчанию поддержки ECH в Firefox стало включение несколько дней назад компанией Cloudflare поддержки ECH в своей сети доставки контента. С практической стороны, так как данные о запрошенных хостах при применении ECH скрыты от анализа, для фильтрации и блокировки неугодных сайтов, использующих CDN Cloudflare, теперь потребуется блокировка всей сети Cloudflare, блокировка всех запросов с ECH (для отката на старую схему) или организация перехвата HTTPS при помощи подставных корневых сертификатов на системе пользователя.
Изначально для организации работы на одном IP-адресе нескольких HTTPS-сайтов применялось TLS-расширение SNI, при котором имя запрошенного хоста указывалось в сообщении ClientHello, передаваемом до установки шифрованного канала связи. Подобная особенность давала возможность на раннем этапе обработки соединения распределять запросы по виртуальным хостам, но также позволяла на стороне интернет-провайдера выборочно фильтровать HTTPS-трафик и анализировать какие сайты открывает пользователь, что не позволяло добиться полной конфиденциальности при применении HTTPS.
Для решения данной проблемы и исключения утечки сведений о запрашиваемом сайте позднее было предложено расширение ESNI, реализующее шифрование данных с именем хоста. В процессе внедрения ESNI было выявлено, что предложенный механизм не охватывает все возможные источники утечки данных о хосте и его применения недостаточно для обеспечения полной конфиденциальности HTTPS-сеансов. В частности, при возобновлении ранее установленного сеанса имя домена в открытом виде продолжало указываться в числе параметров TLS-расширения PSK (Pre-Shared Key). Кроме того, попытки внедрения ESNI выявили проблемы с совместимостью и масштабированием, которые мешали повсеместному распространению ESNI.
С учётом выявленных недостатков ESNI был разработан новый универсальный механизм ECH, допускающий шифрование параметров любых TLS-расширений. Технически главное отличие ECH от ESNI в том, что вместо отдельных полей шифруется сразу всё сообщение ClientHello. ECH подразумевает наличие двух типов сообщений ClientHello – шифрованное сообщение ClientHelloInner и незашифрованное базовое сообщение ClientHelloOuter. Если сервер поддерживает ECH и смог расшифровать ClientHelloInner, то он продолжает использовать данный тип для TLS-сеанса. В противном случае данные берутся из ClientHelloOuter.
ECH также использует иную схему распространения ключа для шифрования – информация об открытом ключе передаётся в DNS записи httpSSVC, а не в записи с типом TXT. Для получения и шифрования ключа применяется аутентифицированное сквозное шифрование на основе механизма HPKE (Hybrid Public Key Encryption). ECH также поддерживает безопасную повторную передачу ключа с сервера, что может применяться в случае ротации ключей на сервере и для решения проблем при получении устаревших ключей из кэша DNS.