VPN 改變的是你的 IP,不是你的瀏覽器。本文說清楚 VPN 為何擋不住指紋識別、什麼時候反而弄巧成拙,以及真正能降低暴露程度的做法。
不能。VPN 改變的是你的流量出口 IP 位址——這是網路層的事實。而瀏覽器指紋是由瀏覽器渲染與回報的內容組合而成的——canvas 輸出、字型、螢幕參數、WebGL、時區,以及 JavaScript 能讀取的其他幾十項屬性。VPN 完全不會碰到這些,因為它運作的層級,位於指紋識別發生的層級之下。打開 VPN 就期待指紋隨之改變,等於是在要求一項工具去解決它從一開始就看不見的問題。
核心要點
- VPN 運作在網路層(你的 IP 位址與顯示出的所在地)。瀏覽器指紋則組裝於應用層,來自瀏覽器渲染與回報的內容——VPN 沒有任何機制能碰到它。
- VPN 會改變:你的 IP、ASN/所屬組織、地理位置。VPN 不會碰:canvas/WebGL 渲染輸出、已安裝的字型、螢幕與裝置參數、時區、語言,以及硬體並行數。
- 當 VPN 製造出訊號矛盾時,它反而會讓你更容易被識別,而不是更難——一個國家的 IP 配上另一個國家的時區與語系,正是一個眾所皆知的一致性破綻。
- VPN 真正能幫上忙的地方:切斷 IP 作為跨站關聯鍵的作用,並對本地網路隱藏你的造訪目的地——這是一項真實、獨立的好處,只是跟指紋防護無關。
- 真正能降低指紋識別風險的做法,是讓自己融入一個龐大的匿名集,而不是試圖藏起某一個值——你可以用 BrowserInsight 的指紋檢測與 VPN/代理檢測查看自己目前的暴露情況。
兩個不同的層,兩份不同的工作
這種混淆情有可原:「VPN」與「指紋識別」都被歸在「網路隱私」這把大傘下,人們自然會期待一項隱私工具能同時管好兩件事。但它們運作在連線的不同層級上,一層的防護對另一層不會自動生效。
- 網路層關心的是你的流量從哪裡出發。你的 IP 位址由你所連接的網路分配,而這正是 VPN 替換掉的東西——你的流量改由 VPN 供應商的伺服器出口,而不是你的 ISP,因此目標網站看到的是 VPN 的 IP,而不是你的。
- 應用層關心的是你的瀏覽器向頁面透露了什麼。無論是否使用 VPN,連線一旦建立,你開啟的頁面就能執行 JavaScript,向瀏覽器詢問幾十個問題:裝了哪些字型、GPU 如何渲染一個 canvas 元素、作業系統回報的時區是什麼、有多少個 CPU 核心。這些答案來自你桌面上的瀏覽器與作業系統,而身處他方的 VPN 伺服器沒有任何辦法伸手去改動它們。
一個有用的類比:VPN 就像在信封上換了一個寄件地址。它改變了信件看起來是從哪裡寄出的,但不會碰到信封裡的筆跡、紙張材質,或信封本身留下的指紋——而指紋識別腳本讀取的,恰恰就是這類細節,而不是寄件地址。
VPN 會改變什麼,不會改變什麼
| 層級 | 訊號 | VPN 會改變它嗎? |
|---|---|---|
| 網路層 | IP 位址 | 會——替換為 VPN 伺服器的 IP |
| 網路層 | ASN / 託管組織 | 會——變為顯示 VPN 供應商 |
| 網路層 | 地理位置(國家/城市) | 會——跟隨 VPN 伺服器所在地 |
| 網路層 | 本地網路可見性(ISP、咖啡廳 Wi-Fi) | 會——流量經過通道加密 |
| 瀏覽器層 | Canvas / WebGL 渲染輸出 | 不會——來自你真實的 GPU 與驅動程式 |
| 瀏覽器層 | 已安裝的字型 | 不會——來自你真實的作業系統 |
| 瀏覽器層 | 螢幕解析度、色深、裝置像素比 | 不會——來自你真實的顯示器 |
| 瀏覽器層 | 時區與語系 | 不會——來自作業系統設定,不來自網路 |
| 瀏覽器層 | 硬體並行數、記憶體 | 不會——來自你真實的裝置 |
左邊一欄就是全部真相:VPN 的職責恰好在網路層結束的地方停下。指紋識別腳本真正讀取的一切,都活在高出一層的地方——這也是為什麼表格裡這兩組訊號從不重疊。
反直覺的部分:VPN 可能讓你更顯眼
這一點最出乎意料。使用 VPN 不僅無助於對抗指紋識別——它還可能反過來對你不利,因為它引入了一種先前不存在的層間矛盾。
在沒有 VPN 之前,你的 IP、時區與語言指向的是同一個地方,因為它們全都來自同一個物理事實:你,身處某一個位置。這是絕大多數訪客正常、平淡無奇的狀態,不會引起任何注意。
一旦連上位於另一個國家的 VPN 出口,你的 IP 現在顯示的可能是「荷蘭」——但瀏覽器的 JavaScript 時區仍然回報你真實的作業系統設定,Accept-Language 請求頭仍然列出你真實使用的語言。一個會交叉核對這些訊號的偵測系統,會看到一個荷蘭 IP 配上 America/Chicago 的時區和 en-US 的語言請求標頭——足足七小時的矛盾,找不出任何尋常的解釋,不像旅行者自然產生的那種小幅度時差。我們在時區與語系洩漏與指紋一致性兩篇文章裡詳細說明了這項偵測的具體原理,以及代理服務嘗試(往往也失敗地)掩蓋它的方式。
原理很簡單:一份自洽的指紋(所有訊號都指向同一個可信的故事)是常見且平淡的。一份帶著新鮮、無法解釋的矛盾的指紋則更為罕見——而「罕見」正是追蹤器或反詐騙系統被設計來捕捉的東西。VPN 一旦用得不夠小心,就可能把一個平凡無奇的訪客,變成一個更容易被挑出來的訪客。
VPN 真正能幫上忙的地方
這並不代表 VPN 毫無用處——它代表 VPN 解決的是另一個問題,而不是指紋識別,值得公平地說清楚那個問題是什麼:
- 切斷 IP 作為跨站關聯鍵的作用。 沒有 VPN 時,同一個 IP 位址出現在多個網站上,是追蹤器可以拉出來串聯你各處造訪紀錄的又一條線索。VPN——尤其是會輪換出口 IP 的那種——會移除這條特定的線索,儘管底層的瀏覽器指紋可能依然可被識別。
- 對本地網路與 ISP 隱藏你的造訪目的地。 你的 ISP,以及與你共用 Wi-Fi 的任何人,通常都能看到你連上的是哪些網站。VPN 會對這部分流量做通道加密,因此在本地只能看到「已連上某個 VPN」,看不到你實際到達的網站。
- 改變你顯示出的所在地,以造訪地區限制內容或取得區域定價。 這是一個真實、平常、完全合法的使用情境,和抵抗追蹤毫無關係。
這些都是網路層上真實存在的好處。它們只是不會向上延伸到瀏覽器層——把 VPN 當成一套完整的隱私解決方案才是問題所在,而不是使用 VPN 這件事本身。
還有一點值得點明,同樣發生在網路層:上述這些好處,都建立在「通道確實帶走了全部流量」這個前提上。WebRTC 可能繞開通道,走另一條路去問 STUN 伺服器「你看到我的位址是什麼」;DNS 查詢也可能漏到你 ISP 的解析器手裡——任何一種,都可能把 VPN 本該替換掉的那個 IP 原封不動地交出去。以 Chromium 為基礎的瀏覽器如今會用隨機化的 mDNS 主機名稱遮住內網位址,堵上了過去那個內網 IP 洩露的缺口,但公網 IP 洩露與 DNS 洩露仍然屬於「要實測、不能假定」的事。我們在 WebRTC 洩露防護與 DNS 洩露防護兩篇裡分別談了這兩件事,BrowserInsight 的 VPN/代理檢測也會在你的瀏覽器裡直接執行這兩項檢查。
真正能撼動指紋識別的是什麼
如果 VPN 碰不到指紋識別,那什麼能?老實說:沒有什麼能讓你隱形,但你可以讓自己變得不起眼。指紋防護的原理,是縮小你這一組特定訊號組合的可識別程度——也就是你的匿名集:在追蹤器眼中,目前與你看起來完全相同的那一群人。
大致有兩種思路:
- 一致化。 像 Firefox 的
resistFingerprinting與 Tor 瀏覽器這樣的工具,會把瀏覽器回報的內容標準化——相同的取整時區、相同的有限字型清單、相同的 canvas 行為——統一套用於該工具的所有使用者,讓你的指紋融入一個龐大、彼此相同的人群,而不是作為唯一值突顯出來。 - 認知與測量。 你無法防護一個你不知道自己正在廣播的訊號。測試自己的設定,能看出哪些屬性貢獻了最多的熵值,這樣你才知道某項變動究竟是真的有幫助,還是只是新增了一處矛盾。
VPN 完全可以作為更大防護方案裡合理的一部分——比如,挑選一個時區與系統設定大致相符的出口地點,而不是讓兩者徹底矛盾——但它從設計之初,就不是用來單獨解決指紋識別問題的。
查看你自己設定的真實情況
這兩個層是彼此獨立的,檢查它們需要兩項獨立的工具:
- BrowserInsight 的 VPN/代理檢測會告訴你網路層的情況——你的連線是否被標記為 VPN、代理或 Tor 出口,以及網站會看到怎樣的 IP/ASN/位置資訊。
- BrowserInsight 的指紋檢測會告訴你瀏覽器層的情況——canvas、WebGL、字型與裝置訊號中,腳本能讀到什麼,整個過程完全在客戶端本地執行。
分別在開啟與關閉 VPN 的情況下執行這兩項檢測並互相比較。你通常會看到網路層的結果完全變了樣,而瀏覽器層的結果幾乎紋風不動——這正是這篇文章想說的道理,在你自己的螢幕上被直接看見。若想針對即時參考資料集做更全面的自我測試,可以用 EFF 的 Cover Your Tracks 工具,它會估算你的瀏覽器暴露了多少位元的可識別資訊;他們的資訊理論與隱私入門說明了為什麼「熵的位元數」才是正確的思考框架,而不是數一數洩漏了多少條具體事實。
常見問題
使用 VPN 後,網站還能追蹤我嗎?
能,如果追蹤依賴的是瀏覽器指紋而不是你的 IP 位址。VPN 會隱藏你的 IP,並對你的 ISP 加密你的流量,但指紋識別腳本讀取的是瀏覽器與裝置屬性,與你的網路連線毫無關係,因此網站仍然可以在多次工作階段之間識別出你的瀏覽器。
一個好的 VPN,至少能稍微降低一點我的指紋嗎?
一般不能——VPN 的工作完全在網路層,而瀏覽器指紋屬性並不屬於網路層屬性。有些 VPN 應用程式會搭配一個獨立的瀏覽器擴充功能,附帶做一些指紋偽裝,但那是搭在 VPN 旁邊的一項獨立功能,並非 VPN 通道本身提供的能力。
既然擋不住指紋識別,我該停用 VPN 嗎?
不必。VPN 依然把自己的本職工作做得很好——對目標網站隱藏你的 IP,對你的 ISP 與本地網路隱藏你的瀏覽行為。錯誤的想法在於期待它順帶也解決指紋識別問題;把它用在它真正擅長的地方,如果指紋防護是另一個獨立目標,再搭配專門應對指紋的工具。
使用時區與語言不相符的 VPN,會比完全不用 VPN 更糟嗎?
單就指紋識別而言,一個剛出現的 IP/時區/語言矛盾,確實可能比一次完全自洽的非 VPN 連線更顯眼——但這只對會核對一致性的偵測系統才有意義,並不會影響 VPN 本身真正的好處(對網站隱藏你的 IP、對 ISP 加密流量),這些好處無論哪種情況都照樣成立。
結語
VPN 與瀏覽器指紋識別活在連線的不同層級上,再多網路層的防護,也碰不到指紋識別腳本讀取的瀏覽器層訊號。這並不是 VPN 的缺陷——只是單純超出了它的職責範圍。把 VPN 用在它真正擅長的地方:隱藏你的 IP,對 ISP 與本地網路加密你的流量。如果降低指紋識別度是一個獨立的目標,它需要一套獨立、刻意為之的做法——一套圍繞「融入龐大人群」而非「更換地址」建構的做法。


