Безопасность
uTLS и JA3 fingerprint: как VPN обходит DPI в 2026
§ в этой статье — 14 разделов
- Что такое JA3 fingerprint
- Почему стандартные библиотеки палятся
- uTLS — библиотека для подделки JA3
- Какие VPN-клиенты используют uTLS
- Что это даёт пользователю в РФ
- Чего uTLS не умеет
- TLS-in-TLS detection
- Active probing
- Поведенческий анализ
- Будущее: ECH и MASQUE
- ECH (Encrypted Client Hello)
- MASQUE
- Итог
- Связанные статьи
Когда говорят, что «VPN-протокол VLESS Reality неотличим от обычного HTTPS-соединения к microsoft.com», на самом деле речь идёт о двух разных слоях маскировки. Первый — содержимое TLS-handshake’а: SNI, сертификат, ALPN. Второй — fingerprint самого TLS-клиента: какие cipher suites он предлагает, в каком порядке, какие расширения добавляет. Если первый слой не подделать — DPI увидит подозрительный SNI и зарежет. Если не подделать второй — DPI увидит «странный TLS-клиент, который не похож ни на Chrome, ни на Firefox» и тоже зарежет.
В этой статье разбираем второй слой — JA3-fingerprinting и библиотеку uTLS, которая делает VPN-клиенты неотличимыми от настоящего браузера.
Что такое JA3 fingerprint
JA3 — это алгоритм fingerprinting’а TLS-клиента, опубликованный командой Salesforce в 2017 году. Идея простая: разные TLS-клиенты (Chrome, Firefox, OpenSSL, curl, Go-стандартный crypto/tls) формируют ClientHello по-разному. По полям ClientHello — версии TLS, списка cipher suites, расширений, эллиптических кривых и форматов точек — можно вычислить MD5-хэш, который идентифицирует клиент с точностью до версии.
Например (упрощённо):
- Chrome 122 на Windows — JA3 хэш
cd08e31494f9531f560d64c695473da9 - Firefox 124 на Linux —
b32309a26951912be7dba376398abc3b - Стандартный
curlбез флагов —771,4866-4867-... - OpenVPN-client — характерный набор, отличающийся от любого браузера
JA4 — это модернизация 2023 года от FoxIO, с более устойчивым форматом и дополнительными данными (включая ALPN и SNI extension). Стандарт постепенно вытесняет JA3 в DPI-системах.
Для ТСПУ JA3/JA4-fingerprint — один из основных инструментов классификации. Даже если SNI указывает на легитимный сайт, аномальный JA3-хэш (например, JA3 от Go-стандартной библиотеки) выдаёт нестандартный клиент — и соединение режется.
Почему стандартные библиотеки палятся
Большинство VPN-инструментов написаны на Go, Rust или Python. Эти языки имеют свои реализации TLS — crypto/tls в Go, rustls или native-tls в Rust, ssl в Python. Каждая реализация формирует ClientHello своим способом, отличающимся от Chrome.
Конкретные примеры:
- Go
crypto/tls— характерный набор cipher suites в определённом порядке. JA3-хэш стандартного Go-клиента давно известен ТСПУ. curlбез флагов — использует OpenSSL, JA3 как у командной строки. На «обычный браузер» не похож.wget— то же самое.openvpn-client— собственная TLS-реализация поверх OpenSSL с уникальным набором cipher suites.wg-quick(WireGuard) — не использует TLS, но первый UDP-пакет имеет фиксированную сигнатуру (148 байт + magic bytes).
Если VPN-клиент написан «в лоб» на crypto/tls, его TLS-handshake детектируется DPI за миллисекунды, даже если SNI и сертификат идеально замаскированы под легитимный сайт.
uTLS — библиотека для подделки JA3
uTLS — форк Go-стандартной библиотеки crypto/tls, разработанный с 2017 года в проекте refraction-networking. Основной автор — Sergey Frolov (University of Colorado), активно поддерживается контрибьюторами anti-censorship community.
Что делает uTLS: позволяет программно собрать ClientHello, в точности повторяющий fingerprint Chrome / Firefox / Safari / iOS-нативного клиента. Список cipher suites, порядок расширений, эллиптические кривые, размер padding’а — всё конфигурируется так, чтобы JA3-хэш совпадал с известным браузерным.
В библиотеке есть готовые пресеты: HelloChrome_120, HelloFirefox_120, HelloSafari_16_0, HelloIOS_14. Разработчик VPN-клиента подключает uTLS вместо стандартного crypto/tls и одной строкой выбирает, под какой браузер маскироваться:
conn := utls.UClient(rawConn, &utls.Config{...}, utls.HelloChrome_120)
С точки зрения DPI трафик становится неотличим от Chrome’а той же версии — JA3-хэш совпадает, порядок расширений совпадает, ALPN совпадает.
Какие VPN-клиенты используют uTLS
На 2026 год uTLS — стандартная зависимость практически всех современных anti-DPI VPN-движков:
- xray-core — движок для VLESS, Trojan, Shadowsocks. uTLS активно используется в реализации Reality: при handshake к публичному домену (microsoft.com) клиент уподобляется Chrome’у новой версии, и JA3-фингерпринт совпадает.
- v2ray-core — predecessor xray-core. Тоже использует uTLS, но конфигурация чуть сложнее.
- sing-box — универсальный proxy-движок, поддерживает uTLS из коробки для VLESS, Trojan, ShadowTLS.
- Hysteria 2 — использует TLS 1.3 поверх QUIC. uTLS-эквивалент для QUIC — библиотека
quic-goс патчами для подделки fingerprint’а QUIC-handshake’а (поле transport parameters, версия QUIC, размер первого Initial-пакета). - NaiveProxy — proxy от Klzgrad, в чистом виде использует chromium-network-stack (это уже не uTLS, а настоящий Chrome как HTTP/3-клиент, что даёт идеальный fingerprint, но огромный binary).
Все эти движки внутри клиентов вроде AmneziaVPN, Hiddify, NekoBox, V2RayN, Karing обеспечивают, что TLS-handshake VPN-клиента к серверу выглядит как handshake обычного Chrome’а к microsoft.com.
Что это даёт пользователю в РФ
Конкретный пример работы Reality + uTLS на МТС в Москве, 2026:
- Пользователь запускает Hiddify, выбирает Durev VPN или собственный VPS.
- Клиент инициирует TLS-соединение к VPN-серверу. В ClientHello:
- SNI:
www.microsoft.com(один из whitelist-доменов в конфиге Reality). - JA3-fingerprint: идентичен Chrome 124 на Windows (через uTLS preset
HelloChrome_124). - ALPN:
h2, http/1.1— как у обычного браузера.
- SNI:
- Сервер видит ClientHello, проверяет Reality-подпись клиента, признаёт его легитимным.
- Установлен TLS-канал. Внутри — VPN-команды.
- ТСПУ видит TLS-handshake к
www.microsoft.comс JA3 как у Chrome. Никакого повода для блокировки.
Альтернативный сценарий без uTLS: тот же VPN, но клиент использует стандартный crypto/tls. ТСПУ видит SNI www.microsoft.com, но JA3 — Go-style. Это аномалия: обычный пользователь Microsoft не ходит на сайт с Go-клиента. Соединение режется.
Можно сказать так: Reality без uTLS — это маскарад в правильном костюме, но с неправильным лицом. С uTLS — костюм и лицо совпадают.
Чего uTLS не умеет
Подделка JA3 — необходимое, но не достаточное условие неотличимости. Есть несколько классов атак, которые uTLS закрыть не может:
TLS-in-TLS detection
Если внутри TLS-сессии передаётся ещё одна TLS-сессия (классический сценарий: VPN-клиент проксирует HTTPS-запрос пользователя через VPN-туннель), DPI может это заметить по специфической структуре зашифрованного трафика — длины пакетов, тайминги, ритм TCP-сегментов. Эта атака описана академически с 2019 года, и GFW Китая её активно использует.
ТСПУ к 2026 году TLS-in-TLS-эвристики ещё массово не применяет, но это вопрос времени. Защита — на уровне транспорта (padding, fragmentation на стороне xray-core).
Active probing
DPI может сам отправить TLS-handshake к подозрительному серверу и посмотреть, что он отвечает. Если сервер ответит «не как настоящий microsoft.com» (например, не подгрузит ассеты, не вернёт реальную HTML-страницу) — раскроется.
Reality защищается от active probing’а через прозрачный reverse-proxy: если клиент не предоставил валидную Reality-подпись, сервер просто проксирует запрос настоящему microsoft.com. Trojan-GFW защищается через настоящий fallback-веб-сервер (обычно nginx с дефолтной страницей). Без этой защиты любой stealth-протокол палится за неделю.
Поведенческий анализ
Даже если handshake идеален, ритм трафика выдаёт. Обычный пользователь Microsoft заходит на сайт, грузит несколько HTML/CSS/JS, идёт дальше. Пользователь VPN — держит длинное соединение часами, гонит через него весь трафик. По duration + bandwidth + content-pattern можно классифицировать без анализа handshake’а.
Защита частичная: split-tunneling (не весь трафик через VPN), несколько IP-адресов в ротации, фрагментация сессий. Это не маскировка handshake’а, а маскировка поведения.
Будущее: ECH и MASQUE
JA3-fingerprinting — это эпоха TLS 1.2 и раннего TLS 1.3. Следующее поколение протоколов закрывает саму возможность fingerprint’а на уровне стандарта.
ECH (Encrypted Client Hello)
ECH — это расширение TLS 1.3, при котором весь ClientHello (включая SNI, ALPN, расширения) шифруется ключом сервера, опубликованным в DNS. На уровне TLS-handshake’а ТСПУ видит только зашифрованный ClientHello — и не может узнать ни домен, ни fingerprint клиента.
ECH катит Cloudflare с 2024 года, частично — Google и Firefox. На 2026 году ECH остаётся в стадии draft (draft-ietf-tls-esni-22), но движется к финальному RFC. Когда ECH станет универсальным, VPN-клиентам больше не нужно будет подделывать JA3 — настоящий ClientHello будет скрыт от DPI криптографически.
MASQUE
MASQUE — драфт IETF для туннелирования произвольного TCP/UDP через HTTP/3 CONNECT-method. Идея: VPN-туннель становится обычным HTTP/3-соединением к серверу. Cloudflare использует MASQUE в продакшене для WARP с 2024 года.
Если MASQUE станет массовым, любая обфускация уровня JA3 потеряет смысл — VPN-трафик неотличим от любого HTTP/3-трафика, потому что это и есть HTTP/3-трафик.
Итог
- JA3-fingerprint — алгоритм идентификации TLS-клиента по полям ClientHello. ТСПУ использует JA3/JA4 для классификации VPN-трафика.
- uTLS — Go-библиотека, позволяющая VPN-клиенту подделать JA3 любого браузера. Используется в xray-core, sing-box, hysteria-2 — фактически во всех современных anti-DPI движках.
- Без uTLS даже идеальная маскировка SNI и сертификата не работает — Go-style JA3-fingerprint выдаёт VPN-клиент за секунды.
- uTLS не закрывает всё — TLS-in-TLS detection, active probing, поведенческий анализ требуют отдельных защит на уровне xray-core, sing-box и серверной конфигурации.
- Будущее — ECH (Encrypted Client Hello) и MASQUE снимут проблему fingerprint’а на уровне стандарта. На 2026 году оба в стадии разворачивания.
Связанные статьи
читать дальше
Похожие статьи
-
Безопасность
ML-классификаторы против VPN 2026: как нейросети ловят трафик
ТСПУ применяет XGBoost и random forest на packet timings для классификации зашифрованного трафика. Что обходит ML: DAITA, padding, traffic shaping. Технический разбор.
-
Безопасность
Как платить за VPN анонимно в 2026: Monero, Lightning, vouchers
Способы оплатить VPN без раскрытия личности: Monero, Bitcoin Lightning, наличные по почте, ваучеры, prepaid-карты. Mullvad, AzireVPN, IVPN — кто принимает что.
-
Безопасность
Анонимность в интернете 2026: реалистичный гид
Что реально достижимо в плане анонимности в 2026 году: threat models, OPSEC, инструменты. Без алармизма, но и без иллюзий.