👻 uTLS: prizrak-utls
uTLS — библиотека, которая подделывает TLS-отпечаток (ClientHello) под настоящий браузер. От неё зависит, каким браузером выглядит подключение для client-fingerprint и REALITY.
mihomo использует metacubex/utls v1.8.8. Prizrak-Core использует свой форк legiz-ru/prizrak-utls (ветка v1.9.0-mod-meta-mldsa-chr155). Он состоит из трёх частей:
- Основа — ветка
v1.9.0-mod-metaот metacubex. Это более новая линия, чем v1.8.8 в mihomo, со всеми доработками metacubex. - Свежий апстрим refraction-networking/utls: синхронизация с
crypto/tlsиз Go 1.27.1, отпечаток Chrome 155, исправления распаковки сжатых сертификатов, исправления GREASE и PSK, обмен ключами MLKEM1024. Форк при этом по-прежнему собирается на Go 1.20. - REALITY ML-DSA-65 — см. раздел REALITY.
- Ключи всех key share: хранятся ключи каждого классического key share, и сервер может выбрать любой из них (бэкпорт refraction-networking/utls#416, как в Jolymmiles/utls).
Какой браузер означает client-fingerprint
Заголовок раздела «Какой браузер означает client-fingerprint»client-fingerprint | mihomo | Prizrak-Core |
|---|---|---|
chrome | Chrome 133 | Chrome 155 |
firefox | Firefox 120 | Firefox 148 |
safari | Safari 16.0 | Safari 26.3 |
ios, android, edge, 360, qq | без изменений | без изменений |
В Prizrak-Core отпечатки firefox и safari тоже содержат постквантовый обмен ключами X25519MLKEM768, как у настоящих браузеров этих версий. В mihomo он есть только у chrome.
randomized, random и Firefox против P-256
Заголовок раздела «randomized, random и Firefox против P-256»randomizedвсегда предлагаетX25519MLKEM768вместе с его ключом. uTLS дважды и независимо решал, предлагать ли группу и слать ли её key share. Часть процессов слала группу без ключа: REALITY такие ClientHello отклонял, а сервер, предпочитающий постквантовый обмен, отвечал HelloRetryRequest, который uTLS не проходил. Часть слала ключ без группы, и OpenSSL такое отклоняет. Теперь hello всегда предлагает и группу, и ключ и шлёт key share только дляX25519MLKEM768иX25519, как Chrome. Это то же исправление, что в Jolymmiles/Xray-core.randomбольше не выбираетios.ios(iOS 14) не шлётX25519MLKEM768, а серверы REALITY в Xray такие ClientHello отклоняют, поэтомуrandomна части запусков с ними не работал. Теперь он выбираетchrome,safariилиfirefox.firefoxпротив серверов, выбирающих P-256. Отпечатки Firefox шлют key share дляX25519иP-256, а uTLS хранил ключ только первого: если сервер выбирал P-256, рукопожатие падало сtls: invalid server key share. Теперь хранятся ключи всех key share (пункт 4 выше). ClientHello не меняется.