行動瀏覽器指紋與桌面不同:裝置像素比、感測器訊號,以及 WebView 與 Safari 的差異,讓手機 GPU 與字型熵值更低。
大多數指紋識別研究與工具都是以桌面瀏覽器為出發點設計的,但如今超過一半的網路流量來自手機。行動裝置指紋識別並不只是把桌面技術搬到小螢幕上執行——量產化硬體壓平了部分訊號,同時觸控、感測器與平台強制指定的瀏覽器引擎,又開啟了新的訊號來源。本文將梳理,當被指紋識別的裝置變成你口袋裡的手機時,究竟發生了哪些變化。
核心要點
- 手機出廠時使用的硬體與軟體組合遠少於 PC,因此 Canvas、WebGL 與字型訊號在行動裝置上攜帶的熵值低於桌面端。
- 行動裝置也帶來了桌面大多不具備的高價值訊號:
devicePixelRatio、精確的螢幕尺寸、觸控點數量,以及動作/方向感測器。 - 在 iOS 上,蘋果要求所有瀏覽器——包括「Chrome」與「Firefox」——都必須運行在 WebKit 之上,因此算繪引擎本身幾乎無法透露正在使用哪款 App;而 Android 應用程式則會內嵌基於 Chromium 的 WebView,其 User-Agent 中會帶有
wv標記。 - 電信業者級 NAT(CGNAT)意味著許多行動用戶本就共用同一個 IP 位址,這使得裝置層級的指紋識別,在行動網路上相對固定寬頻而言,對追蹤者更具價值。
- 你可以透過 BrowserInsight 的指紋檢查在手機瀏覽器上直接查看自己的螢幕指標、GPU 算繪器與 WebView 偵測結果等訊號。
為何行動裝置的指紋與桌面不同
指紋識別的核心機制在任何裝置上都相同:組合足夠多的獨立訊號,交集就會收斂到唯一一個瀏覽器。行動裝置真正改變的,是這個熵預算的形狀。桌面 PC 由大量各自獨立選購的零件組裝而成——顯示卡、螢幕、字型、安裝的軟體——因此 Canvas 與 WebGL 的算繪輸出在不同機器之間差異極大。手機則恰恰相反:同一型號的手機出廠時就搭載固定的 GPU、固定的預裝字型集,以及一塊由蘋果或廠商替你決定物理尺寸的螢幕。這種一致性壓低了單一裝置算繪訊號的熵值,卻不會降低可識別性——它只是把識別資訊的來源轉移到了別處。
裝置像素比、螢幕與感測器訊號
由於手機螢幕只有有限幾種物理尺寸可選,CSS 像素尺寸與 devicePixelRatio 的組合,在行動裝置上的識別度遠高於桌面端等值數字所能達到的水準。一份 393×852、裝置像素比為 3 的回報,可不只是「某塊手機螢幕」——這個確切的數值對應著某一批特定的 iPhone 機型,再結合瀏海或動態島帶來的安全區域內距,指令碼往往在讀取任何一項算繪訊號之前,就已經能把猜測範圍收斂到寥寥幾代裝置。
觸控帶來第二重結構性線索。navigator.maxTouchPoints 與 CSS 媒體特性 (pointer: coarse) 能區分觸控優先裝置與滑鼠驅動裝置,絕大多數行動瀏覽器即使手指沒有碰觸螢幕,也會穩定回報一個非零的觸控點數量。動作與方向訊號則更進一步、也更敏感:DeviceOrientationEvent 與 DeviceMotionEvent API,作為 W3C Generic Sensor API 系列標準的一部分,會暴露即時的加速度計與陀螺儀讀數。自 iOS 13 起,蘋果就要求這類 API 必須先取得使用者明確授權才能存取,此後各瀏覽器也持續收緊存取權限;在這些資料仍可免授權直接讀取之處,加速度計讀數中細微、依裝置而異的校準漂移,本身也能充當一種低層級的硬體特徵。
Android WebView、Chrome 與 iOS Safari 的差異
究竟由哪種引擎算繪一個行動頁面,取決於平台而非應用程式本身,而兩大平台在這一點上採取了截然相反的強制方式。
在 Android 上,任何應用程式都能內嵌 Google 基於 Chromium 的 WebView 元件,在自己的介面內算繪網頁內容——分享面板預覽、應用內瀏覽器、登入流程都是常見場景。這類內嵌 WebView 通常會在其 User-Agent 中附加一個 wv 標記(例如 Mozilla/5.0 (Linux; Android 14) ... Chrome/124.0.0.0 Mobile Safari/537.36 wv),網站與分析工具正是靠這個標記,把「真正的 Chrome」與應用內瀏覽器區分開來。Chrome 官方的多裝置 WebView 文件說明了這個元件如何獨立於宿主應用程式進行版本管理與更新——這代表同一台 Android 裝置上,不同應用程式背後實際運行的 WebView 版本,可能同時存在好幾個不同版本。
在 iOS 上,蘋果的 App Store 規則強制所有第三方瀏覽器都必須使用 WebKit——與 Safari 相同的引擎——因此「iOS 版 Chrome」與「iOS 版 Firefox」實際上都是包裹在蘋果算繪程式碼外層的 WebKit 外殼,而非它們在桌面端所暗示的 Blink 或 Gecko 引擎。iOS 上的應用內瀏覽行為本身也有區別:使用 SFSafariViewController 的應用程式會共享 Safari 的 Cookie 與已儲存的登入狀態,而內嵌純 WKWebView 的應用程式則會取得一個隔離的、與 Cookie 分離的環境。這項區別對追蹤而言很重要——某個社群應用程式內的 WKWebView 工作階段看不到你在 Safari 中的瀏覽紀錄,但它依然可以被獨立進行指紋識別。蘋果的 WebKit 反追蹤文件描述了適用於這些不同環境的儲存分割規則。
為何行動裝置的 GPU 與字型熵值更低
由於同一型號的手機只搭載一款 GPU、一套字型,這些訊號本身貢獻的原始獨特性在行動裝置上更低——但數值本身卻更能揭露具體的裝置型號。像 Apple GPU 這樣的 WebGL 算繪器字串,結合其回報的 GPU 系列編號,可以對應到某個特定範圍的 iPhone 與 iPad 晶片;Android 上高通 Adreno 或 ARM Mali 系列的算繪器字串,同樣對應特定的 SoC 世代。字型枚舉在行動裝置上的價值遠低於桌面端,因為無論 iOS 還是 Android,都不允許一般應用程式像 Windows 與 macOS 那樣安裝系統層級的字型——大多數手機向每個頁面暴露的都是同一份系統預裝的小型字型清單。這使得桌面端熵值最高的訊號之一,在行動裝置上被壓平到近乎為零,這也正是為何上述螢幕、感測器與觸控訊號,在行動裝置上承擔了更大比例的識別權重。
| 訊號 | 桌面端熵值 | 行動端熵值 | 差異原因 |
|---|---|---|---|
| Canvas / WebGL 算繪 | 高 | 較低 | 每款機型只出貨固定、有限的 GPU 型號 |
| 已安裝字型 | 高 | 極低 | iOS/Android 上應用程式通常無法新增系統字型 |
| 螢幕尺寸 + 裝置像素比 | 低 | 高 | 物理螢幕尺寸對應特定的裝置型號 |
| 觸控點數量 / 指標類型 | 不適用 | 中等 | 確認是否為觸控優先硬體,桌面裝置大多不具備 |
| 動作/方向感測器 | 不適用 | 中等 | 即時加速度計/陀螺儀資料,受權限限制 |
| User-Agent / WebView 標記 | 中等 | 高 | 區分原生瀏覽器、應用內 WebView 與具體應用程式身分 |
電信業者與應用程式能看到什麼、看不到什麼
以上所有訊號都運行在用戶端,也就是頁面自身的 JavaScript 內部——這是一個網站能了解到造訪它的手機的資訊,從來不會自動送到伺服器。行動電信業者或承載 WebView 的應用程式所看到的,是另一幅網路層面的畫面:你的 IP 位址、User-Agent 標頭,以及——就電信業者而言——是哪座基地台與哪個閘道轉發了你的流量,而不是你的 Canvas 雜湊值或感測器讀數。行動網路還讓以 IP 為基礎的追蹤更加複雜,因為電信業者會把大量用戶經由電信業者級 NAT(CGNAT)匯集到少數閘道之下,此刻可能有成千上萬支手機共用同一個對外可見的公用 IP。這對位置隱私是好事,但從追蹤者的角度看,這使得 IP 位址在行動裝置上作為識別碼的可靠性,遠不如固定家用寬頻——這也正是為何上述裝置層級與瀏覽器層級的訊號,對於唯一識別一位行動訪客而言,比它們對坐在自己專屬 IP 後方的桌面訪客更加重要。
檢查你自己的行動裝置訊號
想快速了解自己手機瀏覽器的暴露程度,最簡單的方法就是直接在手機上開啟 BrowserInsight 的指紋檢查。它會回報你的螢幕與裝置像素比組合、GPU 算繪器字串、User-Agent 中是否帶有 WebView 標記,以及一個整體的匿名性評估——接著再到某個應用程式的應用內瀏覽器裡跑一次,看看那個環境的回報結果有多麼不同。
常見問題
行動裝置指紋識別比桌面端更容易還是更難?
準確來說,兩者只是形狀不同。由於硬體與軟體更加標準化,Canvas、WebGL 與字型訊號在行動裝置上攜帶的熵值更低。但螢幕指標、觸控、感測器以及 WebView/應用程式環境,又增添了桌面裝置大多不具備的訊號,因此行動訪客依然可以被有效地縮小識別範圍——只是最具價值的訊號換了一批。
在 iPhone 上使用 Chrome 或 Firefox,指紋會和 Safari 不一樣嗎?
在引擎層級幾乎沒有差別。蘋果要求所有 iOS 瀏覽器都使用 WebKit,因此「iOS 版 Chrome」算繪頁面所用的引擎與 Safari 相同。這些應用程式在 User-Agent 字串、擴充功能支援與預設設定上仍可能有所不同,但深層的算繪訊號——Canvas 與 WebGL 輸出——在所有應用程式中都來自同一套底層 WebKit 程式碼。
網站能判斷出自己是運行在應用內 WebView 而非真正的瀏覽器中嗎?
通常可以。Android WebView 一般會在其 User-Agent 字串中附加 wv 標記,而兩大平台上的應用內瀏覽器,往往缺少完整瀏覽器應用程式才有的某些 API 或擴充功能支援,或暴露出不同的可視區域/安全區域設定。真正在意這一點的網站(用於廣告驗證或機器人偵測)會專門檢查這些破綻。
手機的加速度計等感測器真的會被用來做指紋識別嗎?
在那些仍然無需權限提示就能暴露動作資料的瀏覽器裡,它可以貢獻一個較弱的訊號,因為製造公差會為每台裝置留下輕微、卻一致的校準漂移。相較於螢幕與 GPU 資料,這只是一個次要訊號,而且自 iOS 13 起蘋果就要求必須取得明確授權才能讀取——這已經封堵了蘋果裝置上這項手段的靜默版本。
VPN 能防止行動裝置瀏覽器指紋識別嗎?
不能,原因和桌面端一樣:VPN 改變的是你的 IP 位址,而不是螢幕指標、GPU 算繪器、感測器或 WebView 特徵。它有助於解決網路層面與電信業者層面追蹤這個另外的問題,但無論 VPN 通道是否開啟,指紋識別指令碼讀取到的裝置訊號都完全相同。
總結
行動裝置指紋識別並不是桌面端指紋識別的縮小版——它以放棄桌面端部分熵值最高的訊號為代價,換來了一套同樣有效的新訊號。標準化的硬體壓平了 Canvas、WebGL 與字型的熵值,但精確的螢幕幾何資訊、觸控與感測器資料,以及原生瀏覽器與內嵌 WebView 之間的區別,都足以彌補這個落差,甚至更多。任何建構或評估行動流量指紋偵測系統的人,都需要對這些訊號賦予與桌面訪客不同的權重——而任何想了解自身暴露程度的人,都應該去檢查手機實際回報了什麼,而不是想當然地照搬桌面端的經驗。
推薦閱讀:


