v1.5.0
🇷🇺 Что нового (RU)
Что добавляет этот релиз
v1.5.0 — большой апгрейд FakeTLS-фиделити и анти-DPI. Поведение по умолчанию не меняется; все новые опции — opt-in/безопасные. Апгрейд рекомендуется.
Анти-DPI фиделити
- Пост-квантовый key_share
X25519MLKEM768(0x11ec). Большинство реальных browser→CDN ClientHello к 2026 несут гибридную PQ-группу; ответ классическимx25519— пассивный group-downgrade tell. Теперь при offer'е 0x11ec отдаём корректный 0x11ec key_share (1120 байт). - Профиль-матч размера cert-записи (
fake_cert_size). Фейковая cert-запись (AppData) в ServerHello была фиксированной 2878 — а реальный mask-бэкенд отдаёт свой размер: активный пробер видел разные размеры на accept-пути и mask-пути. Задайтеfake_cert_size= реальному размеру первого flight'а вашего бэкенда — оба пути совпадут. (+ парсерfirstAppDataRecordLenкак seam для будущего zero-config авто-зонда.) - Джиттер desync-сплита. Фиксированный зазор 3 мс сам был timing-фингерпринтом → теперь
desync_split_delay_ms+desync_split_jitter_ms(3 + 0..3). - RST-teardown на reject (
reject_rst). Слать TCP RST вместо alert+FIN, под fronted-CDN, которые ресетят плохой хендшейк.
Активное probing
- Dynamic SNI mask-таргет (
mask_sni_safelist). Пробу с SNI из сейфлиста фронтим на сервер этого домена (резолв на старте) — разговор совпадает с заявленным SNI. Никогда не open-relay. - Метрики
mtproto_replay_hits_total+mtproto_unknown_sni_totalна/metrics. - Кэп длительности mask-relay (
mask_relay_max_secs).
Операторский UX
- Само-коррекция часов по HTTP-Date (
clock_sync_url). Кривые часы VPS иначе тихо рубят все хендшейки на проверке time-skew. RFC 7231 парсер, offset зажат ±1 день. - PROXY-protocol v1/v2 (
accept_proxy_protocol). За TLS-терминирующим LB восстанавливаем реальный IP клиента (MSG_PEEK + точный drain).
Проверено
zig build test — 258/258 (новые KAT: PQ-билдер/детектор, IMF-date, template-alloc, record-parser, PROXY v1/v2) + кросс-сборки x86_64-linux/aarch64-linux + zig fmt. THREAT_MODEL.md дополнен PQ-вектором.
🇬🇧 Release notes (EN)
What this release adds
v1.5.0 is a large FakeTLS-fidelity / anti-DPI upgrade from a competitor (telemt) survey + real DPI cases. Defaults are unchanged; every new option is opt-in / fallback-safe. Upgrading is recommended.
Anti-DPI fidelity
- Post-quantum
X25519MLKEM768(0x11ec) key_share. Most real browser→CDN ClientHellos now carry the hybrid PQ group; answering with classicalx25519is a passive group-downgrade tell. When the client offers 0x11ec we now echo a correct 0x11ec key_share (1120 bytes). - Profile-matched cert-record size (
fake_cert_size). The fake cert (AppData) record in the ServerHello was a fixed 2878 while a real mask backend serves its own size — an active prober saw different sizes on the accept vs mask path. Setfake_cert_sizeto your backend's real first-flight size so both match. (+ afirstAppDataRecordLenparser as the seam for a future zero-config auto-probe.) - Jittered desync split. The fixed 3ms gap was itself a timing fingerprint →
desync_split_delay_ms+desync_split_jitter_ms(3 + 0..3). - RST teardown on reject (
reject_rst). Emit a TCP RST instead of alert+FIN for fronted CDNs that reset a bad handshake.
Active probing
- Dynamic SNI mask target (
mask_sni_safelist). Front a safelisted-SNI probe to that domain's own server (resolved at startup) so the conversation matches the claimed SNI. Never an open relay. - Metrics
mtproto_replay_hits_total+mtproto_unknown_sni_totalon/metrics. - mask-relay duration cap (
mask_relay_max_secs).
Operator UX
- HTTP-Date clock self-correction (
clock_sync_url). A skewed VPS clock otherwise silently rejects every handshake on the time-skew check. RFC 7231 parser; offset clamped to ±1 day. - PROXY-protocol v1/v2 (
accept_proxy_protocol). Recover the real client IP behind a TLS-terminating LB (MSG_PEEK + exact drain).
Verified
zig build test — 258/258 (new KATs: PQ builder/detector, IMF-date, template-alloc, record-parser, PROXY v1/v2) + x86_64-linux/aarch64-linux cross-builds + zig fmt. THREAT_MODEL.md gains a post-quantum key_share section.
Changelog
- feat(faketls): PQ key_share, RST teardown, jittered desync split, probe metrics (#347)
- feat(faketls): opt-in SNI-following mask target (#349)
- feat(faketls): clock-sync, mask-relay cap, fake_cert_size, PROXY-protocol (#350)
Full diff: v1.4.4...v1.5.0