不需要麥克風的音訊指紋辨識

「音訊指紋」聽起來像是透過麥克風錄下的東西,但並不是。它是一個數字,源自你的機器如何處理一段從未播放、從未擷取、也從未離開分頁的合成聲音。
它是如何產生的
腳本建立一個 OfflineAudioContext,它把音訊渲染到記憶體中的緩衝區,而不是喇叭。它連接一個振盪器,通常是固定頻率的三角波,經過動態壓縮器後送到目的地,然後開始渲染。緩衝區就緒後,它讀取其中一小段取樣,通常是幾百個值,並對它們做雜湊。結果是一個簡短的字串,例如 d4f50eb9。
整個操作只需幾十毫秒,而且不需要任何權限,因為沒有擷取任何東西。腳本完成後,OfflineAudioContext 就會被關閉。
為什麼不同機器會有差異
壓縮器和振盪器是以浮點運算實作在瀏覽器的音訊引擎內,確切的輸出取決於引擎版本、作業系統的數學函式庫、CPU 的浮點行為,在某些設定下還取決於音訊硬體的取樣率。差異極其微小,只是小數末幾位的幾個位元,但雜湊會把微小的差異放大成完全不同的字串。和 Canvas 雜湊一樣,它在同一台機器上穩定,在不同機器之間則有所不同。
它的多樣性低於 Canvas:許多使用相同瀏覽器版本和作業系統的機器會產生相同的音訊雜湊值。它主要用來作為確認訊號,以及偵測那些會隨機化輸出的瀏覽器。
瀏覽器怎麼做
Brave 對音訊讀回加入雜訊,做法與 Canvas 相同。啟用 resist-fingerprinting 的 Firefox 會停用部分 Web Audio API,或回傳固定值。Chromium 不會更動輸出。隨機化雜湊值的瀏覽器,每次重新載入都會產生不同的值,診斷頁面只要讓你重新載入並比較,就能把這一點顯現出來。
精確地談隱私
沒有錄下任何聲音,沒有開啟任何麥克風。緩衝區在計算期間存在於記憶體中,之後就被丟棄。唯一可能離開分頁的是雜湊值,而且只有在頁面選擇傳送時才會。診斷頁面在本機計算雜湊值並顯示給你看,讀取的正是追蹤者會讀取的內容,然後什麼也不做。
解讀這個值
有兩件事值得檢查。第一,雜湊值是否存在:「無法使用」代表該 API 被封鎖,有些網站會把這本身視為一種訊號。第二,它是否穩定:重新載入後數值不應改變。若雜湊值在每次載入之間都變,就表示瀏覽器正在注入雜訊,這能防範跨網站追蹤,但也把這個瀏覽器標示為會這麼做的瀏覽器。


