你改掉 User-Agent 沒有用,握手已經先講完了

發表於

改 User-Agent 是最常被推薦的隱私動作之一。裝一個擴充功能,把自己報成別的瀏覽器,看起來就換了一張臉。

問題是那張臉不是第一個被看到的東西。

順序

你打開一個網站,實際發生的順序是這樣:TCP 三向交握,然後 TLS 握手,然後才是 HTTP 請求,最後瀏覽器才開始跑頁面上的 JavaScript。User-Agent 在第三步,擴充功能能動的是第四步。

而 TLS 握手的第一個封包叫 ClientHello,它在第二步。那裡面有一份清單:你支援哪些加密套件、支援哪些擴充、擴充照什麼順序排、橢圓曲線支援哪幾條、簽章演算法有哪些。這份清單不是你選的,是你的瀏覽器編譯進去的。

把那份清單照固定規則湊成一個字串再取雜湊,就是 JA4。

為什麼它認得出你

同一版本的 Chrome,全世界的 JA4 都一樣。Firefox 有 Firefox 的樣子,Safari 有 Safari 的樣子。所以 JA4 認不出你是誰,它認得出你用的是什麼。

真正麻煩的是搭配。如果你的 User-Agent 說你是 Firefox,而你的 JA4 是 Chrome 的,那個矛盾本身就是一個很強的訊號:這個人在偽裝。你不但沒有變得比較普通,還變得比較特別。

反指紋工具改得掉 JavaScript 讀得到的東西。JA4 不在那一層。

CDN 會把它吃掉

這件事有個有趣的副作用。如果一個網站放在 Cloudflare 這類 CDN 後面,TLS 是在 CDN 的邊緣終結的,後面那台伺服器看到的是 CDN 跟它之間的握手,不是你的。

所以「網站看得到你的 JA4」這句話要看情況。多一層 CDN 不會讓你隱形,你的 IP 照樣會用 CF-Connecting-IP 這種標頭傳給後端;但握手指紋確實只有直連的那一方拿得到。

這就是為什麼 WhatYouLeak 有兩個來源:主站在 Cloudflare 後面,另外一台 probe.whatyouleak.com 刻意不放在 CDN 後面,自己終結 TLS。兩邊看到的東西並排比較,差別就是 CDN 吃掉的那一塊。

你能做什麼

老實說不多。JA4 不是設定,是實作。要改它得換瀏覽器,或者用一個會重寫握手的代理,而那通常會讓你的指紋更奇怪而不是更普通。

比較實際的想法是換一個角度:不要試著隱形,而是知道自己在被看什麼。看得到的東西才有辦法決定要不要在意。

看看這些東西在你身上是什麼樣子

回文章列表