劉奇旭 劉心宇 羅 成 王君楠 陳浪平 劉嘉熹
1(中國科學院信息工程研究所 北京 100093)
2(中國科學院大學網絡空間安全學院 北京 100049)
3(中國信息通信研究院 北京 100191)(liuqixu@iie.ac.cn)
隨著瀏覽器的發展,由HTML5,CSS3,ES6等技術的誕生導致的一些安全問題逐漸顯現出來,注冊舞弊審查師協會(Association of Certified Fraud Examiner, ACFE)的一項調查顯示,在安全領域,欺詐行為每年會在全球范圍內造成上萬億美元的損失[1],而虛擬網絡上用戶身份的隱蔽性則是欺詐者立足的根本,這使得身份識別技術成為安全領域的重要研究對象.
許多安卓設備的隱私保護策略并不完善,導致用戶信息泄露以及被跟蹤.另外,隨著市場上智能手機數量的急劇增加,安卓平臺有望成為市場領導者[2].因此,基于安卓設備進行用戶跟蹤研究具有一定的價值.現有的跟蹤機制通常基于標簽或指紋[3].
典型的標簽方法是Cookie,它是存儲在用戶本地終端上的數據.Cookie機制由W3C組織提出,是由服務器端發送至客戶端瀏覽器并保存在客戶端本地的一小段文本信息,作為服務器端識別用戶身份狀態的依據.Cookie機制具有極高的擴展性與可用性,但是在數量和長度上受到限制,一旦被攔截,就會泄露用戶信息.另外,Cookie是一種有狀態的標識,通過瀏覽器的隱私模式訪問網站時,Cookie在訪問結束后會被擦除[4].
瀏覽器指紋技術是2010年由Eckersley[5]提出的概念,指當用戶使用瀏覽器訪問服務器時,服務器獲取瀏覽器特征標識、canvas特征值以及部分硬件信息和系統信息并通過特定的指紋生成算法從而為該用戶使用的瀏覽器生成唯一的字符串標識[6].其中,瀏覽器特征標識是指用戶代理、HTTP頭部信息、用戶使用語言、瀏覽器中的插件等可用于區分用戶瀏覽器的屬性.而canvas特征值是利用HTML5技術中的CanvasRenderingContext2D接口提供的方法繪制呈現上下文的不同字體、表情圖案以及特殊形狀時返回與圖形相關的多個度量.
瀏覽器指紋技術具有較低的碰撞率、容易獲取、用戶多次訪問生成相同指紋、能夠進行跨域識別等特性,這使得它在識別用戶身份領域有著卓越的發展前景.相比于Cookie,瀏覽器指紋是一種無狀態的標識.網站利用JavaScript引擎獲取客戶端的指紋特征并傳遞到服務器端,并且不會在客戶端保留任何痕跡,例如利用Cache緩存到本地等.用戶無法察覺指紋信息正在被網站收集,同時也無法阻止更無法刪除其指紋特征.相比于容易刪除的Cookie,瀏覽器指紋是內在的穩定的信息,不易更改.Englehardt等人[7]的研究結果表明,更受歡迎的網站更可能具有指紋識別腳本,他們在Alexa排名前1 000的網站上發現5.10%的網站具有canvas識別腳本,2.50%的網站具有字體識別腳本,0.60%的網站具有WebRTC腳本.其中,WebRTC是瀏覽器中對等實時通信的框架,通過收集對等體所有可用的候選地址而尋找對等體之間的最佳網絡路徑,從而暴露用戶的本地IP地址作為瀏覽器指紋屬性之一.
早期的指紋研究始于瀏覽器和HTTP協議的特征,并使用散列算法構造指紋[5],這是一種簡單的指紋識別方案.隨著HTML5技術的發展,更多的屬性被用于生成瀏覽器指紋,例如canvas指紋、WebGL指紋[6]、音頻信息[7]等.這些屬性之所以能夠跟蹤用戶,就在于它們的特征值具有多樣性、唯一性以及穩定性.多樣性表現為某屬性在不同瀏覽器或不同設備上存在不同的值,以userAgent屬性為例,userAgent屬性反映的是瀏覽器中的用戶代理信息,由一長串字符串組成.這一字符串中包含操作系統標識、加密等級標識、渲染引擎、瀏覽器名稱和版本信息等.如圖1所示,在不同的瀏覽器中,userAgent中瀏覽器名稱和版本信息有所區別;在不同的設備上,userAgent中操作系統標識有所區別.

Fig. 1 User agent in different devices and browsers
而唯一性體現在用戶的同一瀏覽器中,即在某一確定時刻,對于某一確定的屬性,從用戶的同一瀏覽器中不會收集到2種不同的特征值.穩定性則是指,因不可抗因素導致的屬性特征值變化,應使得發生變化的時間間隔盡可能長,而摒棄特征值發生頻繁更改的屬性.例如時間屬性,當精確到秒時,幾乎每次收集都會產生變化,因此穩定性極差,不適合作為瀏覽器指紋的屬性.
然而,將靜態的Hash值作為瀏覽器指紋并不能滿足服務商對用戶的追蹤需求.盡管在挑選屬性時,選擇的是具有穩定性的屬性,但是存在不可抗拒的因素使得屬性值發生變化.例如瀏覽器升級、系統更新、用戶因旅行或工作需求從A時區前往B時區等,都會使瀏覽器特征值發生改變.除此之外,反指紋追蹤系統也同樣會干擾指紋的生成.例如FP-Block[8]是一種反跟蹤工具,允許用戶自主微調各個站點的指紋.另外,FPRandom[9]在瀏覽器版本特征值的生成中增加了隨機性,為canvas特征和AudioContext指紋添加用戶無法察覺到的噪聲,以使它們為每個瀏覽會話提供略有不同的特征值,從而達到隨著時間的推移“破壞”指紋穩定性的目的.FireGloves[10]是Firefox瀏覽器的一種擴展程序,為了混淆指紋腳本,在網站通過JavaScript引擎獲取用戶的屏幕分辨率,運行瀏覽器的平臺、供應商、版本以及字體數量時,同樣返回隨機值以逃避檢測.洋蔥路由(the onion router, Tor)瀏覽器抵御指紋識別的方法是使所有用戶的指紋都趨于標準化,具體做法包括刪除插件、阻止canvas圖像提取、修改普通屬性并返回相同特征值等[4].
為了應對上述情況中瀏覽器指紋的變更,動態的指紋關聯算法被提出用于持續追蹤用戶.指紋關聯算法通過比較瀏覽器指紋之間的相似程度,將屬于同一瀏覽器實例的指紋進行關聯與標記.其中利用統計分析方法以及傳統機器學習方法進行指紋關聯的相關研究較多,而深度學習方法的相關研究較少.本文提出了一種基于雙向循環神經網絡算法的安卓瀏覽器指紋識別方案.指紋識別的本質是分類問題,即在獲取新指紋后,通過深度學習模型將新指紋與已經存儲在數據庫中的指紋進行成對分類(pairwise classification),將指紋分類成新指紋插入數據庫或者分類成已有指紋并關聯到該指紋對應的用戶ID. pairwise classification是一種典型的二進制分類方法,該方法將類型標記為0或1,以測量新指紋和已有指紋之間的相關性.另外,文中設計了一種全新的具有針對性的屬性預處理方法處理數據集,并訓練指紋識別模型,而不是簡單地構建線性或非線性特征向量作為模型輸入[11-12],最后將深度學習模型與傳統機器學習模型的性能進行了比較.本文的主要貢獻包括4個方面:
1) 提出了一種用于瀏覽器指紋識別的監督學習框架,基于雙向RNN的指紋識別模型(browser fingerprinting based on bidirectional recurrent neural network, RNNBF).RNNBF集成了所有可利用的指紋特征,并使用注意力(attention)機制關注影響指紋波動的主要特征,提高了模型的魯棒性和準確性.據我們所知,RNNBF是第1個針對安卓設備瀏覽器的指紋識別模型.
2) 提供了一種新穎的瀏覽器指紋屬性的預處理方法,而不是通過縫合字符串并進行散列來生成指紋或不經過任何處理直接構造指紋.屬性分為3類:數字、布爾值和字符串.針對字符串的含義和結構,我們提出了3種方法,通過將源字符串的含義嵌入數字中從而將字符串變成與之對應的數字.這是一個創新點,可以減少訓練的復雜度并實質上壓縮指紋記錄的長度.
3) 為了對抗指紋的動態變化以及反瀏覽器指紋技術,在構建基于深度學習的指紋識別模型之前,先進行數據增強.我們參照反瀏覽器指紋系統中采用的更改部分特征的方法,將噪聲添加到訓練集中,以使該模型具有魯棒性.實驗結果表明:針對噪聲和正常數據的混合訓練集,RNNBF模型在面對反瀏覽器指紋的修改時足夠穩定和強大.
4) 提出了一種全新的識別策略,以保持指紋的高度穩定性.與降低RNNBF進行指紋修改的風險不同,該策略利用了漸進式Web應用程序(progressive Web APPs, PWA)的脫機訪問和緩存的優勢,這是瀏覽器指紋與PWA技術結合的首次嘗試.
國內外的研究人員對于瀏覽器指紋進行了全面且深入的研究,研究工作主要集中在利用最新技術構建瀏覽器指紋以及動態鏈接同一瀏覽器實例的指紋這2方面.前者可被細分為單一瀏覽器識別技術以及跨瀏覽器識別技術,而后者可被細分為基于統計分析、傳統機器學習以及深度學習的方法.表1對各方面的研究工作進行了匯總.

Table 1 Browser Fingerprint Related Work Summary
在構建指紋方面,研究者挑選具有多樣性、唯一性以及穩定性的屬性,用于構建瀏覽器指紋.屬性的挑選是一項復雜的工作,研究者依賴JavaScript引擎的API接口,巧妙地構造可區分用戶的屬性,從而為用戶生成獨一無二的標識符以達到追蹤的目的.這些屬性可被分為瀏覽器信息、系統信息以及硬件信息3類,對于單一瀏覽器識別而言,這3類屬性皆可被利用,而對于跨瀏覽器識別而言,主要利用系統信息和硬件信息.
1) 單一瀏覽器識別.現有的構建指紋方面的研究大部分集中在單一瀏覽器識別上.研究者通過搭建網站收集指紋的方式,或者在多個志愿者的設備上直接測試的方式驗證屬性的可行性.Eckersley[5]早在2010年就引入了瀏覽器指紋的概念,他將用戶代理、HTTP接收包的頭部信息、是否允許存儲Cookies、超級Cookies測試、瀏覽器插件這5項瀏覽器屬性值以及屏幕分辨率、時區、系統字體這3項系統屬性值進行簡單地拼接并利用Hash算法生成了瀏覽器指紋.HTML5除了繼承HTML的部分特征外,添加了包括本地存儲特性和網頁多媒體特性在內的新的語法特征,為Web應用提供了免插件的視頻播放、本地存儲等功能.而HTML技術的革新使得canvas元素繪制的2D圖像以及WebGL技術繪制的3D圖像[6]通過固定的指令集渲染后在不同的設備上產生像素精度的差異,而這種差異作為瀏覽器特征在區分用戶方面具有很好的效果.同樣,HTML5技術公開了高級JavaScript的函數調用接口,允許網站訪問設備的硬件.這使得GPU對于圖形渲染的延遲、相機光學傳感器的像素偏差、麥克風的頻率響應和傳感器的線性偏差[19]等特征在理論上都能夠作為構建指紋的屬性.CPU內部時鐘使用的石英晶體振蕩器會產生細微的變化,使時鐘頻率產生微小的差異,從而識別用戶[13].SENSORID利用制造商帶來的設備傳感器的系統誤差來產生校準指紋[14],這些傳感器包括加速度計、GPS單元、音頻信號差異等.
2) 跨瀏覽器識別.跨瀏覽器識別是指當用戶在同一設備上分別使用不同的瀏覽器對網站進行訪問時,網站通過JavaScript引擎對這些不同的瀏覽器所在設備的系統信息和硬件信息進行搜集,從而判斷出這些不同瀏覽器的訪問均來自同一用戶.Cao等人[15]對于跨瀏覽器識別的研究中,除了利用屏幕分辨率、色深、音頻信號處理特征值外,使用canvas元素和WebGL技術繪制了一系列的不同紋理、形狀、透明度、陰影的圖像,根據圖像的像素精度的差異作為跨瀏覽器識別的依據.
但是,無論是單一瀏覽器指紋識別還是跨瀏覽器指紋識別,上述的研究均基于靜態的指紋構建方式,對于發生變更后的指紋追蹤效果較差.
鏈接指紋是指使用指紋關聯算法將同一瀏覽器實例的所有指紋盡可能地關聯到同一個用戶ID,無論該實例的指紋是否發生改變.現有的研究中對于指紋關聯的算法大致可分為基于統計分析、傳統機器學習以及深度學習這3類:
1) 統計分析方法.統計分析方法對于瀏覽器指紋進行大規模的采集與分析整理,根據統計學方法得到數據規律,并根據規律動態鏈接指紋.為了應對隨機更改指紋特征值對追蹤用戶造成的干擾,張良峰等人[11]提出了一種基于統計分析的特征值還原方法,通過對瀏覽器安裝的插件和字體信息進行多次采樣,找到被篡改特征值變化范圍,根據變化的中間值對特征值進行還原,從而得到真實的特征值.FP-STALKER基于規則的變體[4]同樣根據大規模采集到的指紋信息制定靜態規則集,并將滿足規則的瀏覽器實例鏈接到同一用戶.劉瀟峰等人[16]根據指紋各屬性的重要性、變更難度和頻率對其進行評估并賦予權重,然后根據距離算法計算2個指紋之間所有特征值的相似度,進而鏈接指紋.但是,使用統計分析的缺點在于,基于大量數據的分析處理添加了研究者的主觀因素,例如權值的設定、閾值的選擇等,這使得關聯算法的客觀性降低.
2) 傳統機器學習方法.指紋關聯算法在本質上解決的是分類問題,即將待識別的指紋關聯到新的瀏覽器實例或是已存在的瀏覽器實例.而傳統的機器學習算法通過大量的數據訓練模型,將訓練完成的模型用于分類任務能夠達到很好的分類效果.FP-STALKER的另一種變體將規則與隨機森林算法(random forest, RF)結合的模型[4]來學習瀏覽器指紋演化的潛在關系,其中規則由作者根據數據集的統計分析結果與符合實際的規律定義,而隨機森林算法用于定義人為無法定義的規則界限,從而使得指紋追蹤更具有客觀性.Erik[17]嘗試使用樸素貝葉斯和K近鄰算法對變動的指紋進行關聯.傳統機器學習算法的障礙在于需要手動完成特征工程這一步驟,對于傳統機器學習方法研究中的少量特征,特征工程的復雜度較低,能夠較好地實現.但是,隨著對瀏覽器指紋研究的深入展開,新增的可利用屬性被不斷地添加到指紋追蹤的方案中,這使得特征工程所需花費的精力巨大.可以說,傳統機器學習方法不適用于屬性龐大的指紋追蹤方案.
3) 深度學習方法.深度學習方法是機器學習的一個分支,它利用深度神經網絡解決特征構造問題,與傳統機器學習方法的差異在于,深度學習方法不需要人工構造特征并進行特征選擇,而通過神經網絡對特征進行劃分.目前在鏈接指紋方面運用深度學習的方法較少,據調研,目前僅Li等人[18]使用長短時記憶神經網絡(long short-term memory, LSTM)構造指紋追蹤鏈,將特征向量調整為時間序列,從而發掘瀏覽器指紋的演化關系.然而,LSTM模型依賴于輸入向量的特征順序,前序的特征對后序的特征產生一定的影響,而后續特征并不影響前序特征的權重調整.由于指紋的部分特征之間存在相互聯系,例如用戶代理中包含設備名稱,而平臺信息反映設備的系統架構,平臺信息不同則用戶代理必然不同.單向LSTM模型無法體現這種相互聯系,并且很大程度上依賴特征向量中特征的順序,為了消除特征順序對模型的影響,我們使用雙向RNN模型替代了單向LSTM模型,并添加了注意力機制使得模型主要關注“鏈接能力”較強的特征.
針對動態鏈接指紋與傳統機器學習結合時不適用于多維度特征數據集,而與單向LSTM方法結合時受到特征向量中順序的影響,我們提出了基于雙向RNN的指紋識別模型RNNBF.本節首先對模型的重要元素進行定義,然后分別給出瀏覽器指紋識別流程、基于雙向RNN的瀏覽器指紋識別框架以及RNNBF模型中重要的3個模塊.
本節對RNNBF模型中涉及的變量進行了介紹,符號定義如表2所示,對瀏覽器實例、屬性集以及指紋集進行了定義并詳細闡述.
定義1.瀏覽器實例(browser instance).是用戶在訪問某個網站時所使用的瀏覽器.瀏覽器實例之間的區別體現在用戶和瀏覽器2方面,即不同的用戶或者不同的瀏覽器均會產生不同的瀏覽器實例.瀏覽器實例是RNNBF模型在訓練時的依據.Bi表示瀏覽器實例集B中第i個實例,假設當前收集到的瀏覽器指紋分別來自n個瀏覽器實例.
為了區分不同的瀏覽器實例,模型為每個瀏覽器實例分配了獨一無二的標識符,并將其存儲在用戶設備的本地緩存中.對于瀏覽器實例Bi,用IDi表示為其分配的標識符.

Table 2 Concepts and Symbol Definitions of RNNBF
定義2.屬性集(attribute set).屬性集是瀏覽器指紋的組成部分,瀏覽器指紋由每一項屬性對應的特征值構成,而瀏覽器指紋的特征值則作為深度學習網絡輸入向量的基本單元.Ak表示屬性集A中第k個屬性,假設屬性集中的屬性共有m個.
定義3.指紋集(fingerprint set).指紋集是所有已收集到的瀏覽器指紋的集合,用F表示.RNNBF模型的訓練集和測試集均從指紋集F中選取,而F由來自n個瀏覽器實例的指紋F(i,j)組成,其中i表示該指紋來自瀏覽器實例Bi,而j表示該指紋是瀏覽器實例Bi的第j(j∈[1,3])條指紋.
考慮到對于同一瀏覽器實例而言,當前的瀏覽器指紋與時間間隔越近的瀏覽器指紋相似程度越高,而與時間間隔越遠的瀏覽器指紋相似程序越低.所以只取每一瀏覽器實例中按時間順序排在最后的3條指紋保存在指紋集中.

瀏覽器指紋識別的流程由3個實體構成,分別是位于客戶端的瀏覽器、位于服務器端的網站以及數據庫.圖2表示了用戶在訪問網站的過程中,網站用瀏覽器指紋標識用戶的過程.其中Browser表示一個瀏覽器實例,即某用戶在訪問網站時使用的瀏覽器;Website表示部署了瀏覽器指紋跟蹤腳本的網站;而SQL表示位于服務器端的數據庫,其中存儲了已收集的指紋集.
指紋識別的具體步驟是:①用戶通過瀏覽器向網站發起訪問請求;②網站響應用戶的請求,并將html,css和js等文件發送到客戶端;③瀏覽器解析網站發送到客戶端的html文件;④由于html文件中鏈接了指紋收集腳本js文件,因此,⑤瀏覽器加載并解析該js文件;而在瀏覽器完成解析js文件后,⑥立即將該瀏覽器實例的指紋特征值傳遞到服務器端;此時⑦在數據庫的指紋集中查詢該指紋特征并進行匹配;⑧如果成功匹配到指紋集中的某項瀏覽器實例,則在該瀏覽器實例對應的行為特征中持續添加用戶行為,即步驟⑨;但是如果沒有成功匹配到指紋集,則認為該指紋屬于新的瀏覽器實例,則在指紋集中插入新實例的ID與指紋,并通過步驟⑨記錄用戶行為特征.
在步驟②網站發送給客戶端的js文件中包含指紋特征收集函數,這些函數由網站開發人員自行定義.對于簡單的特征,可通過API直接獲取,例如用戶代理可直接利用navigator對象的userAgent屬性獲取,屏幕分辨率可通過Screen對象的width和height屬性獲取.對于需要進行邏輯判斷的特征,同樣先利用API獲取,然后再進行比較,例如判斷用戶是否篡改了屏幕分辨率,需要獲取Screen對象的height以及availHeight屬性,若height屬性值小于availHeight,則認為瀏覽器篡改了屏幕分辨率,因為availHeight屬性聲明了顯示瀏覽器的屏幕的可用高度,不包括分配給半永久特性的垂直空間,那么在正常情況下,availHeight屬性值小于等于height.另外,對于復雜的特征,沒有可以直接利用的API,那么需要開發人員自行定義獲取特征值的邏輯,例如CPU時鐘信號特征測試設備執行指令所花費的時間,而該指令由開發人員自行定義,一條指令不足以體現CPU執行指令所花費時間的差異,所以需要構造的往往是一個復雜的指令集,使得CPU運行足夠長的時間來放大時鐘信號差異.在本次研究中,我們在發送給客戶端的js文件中包含了對64項特征值的收集,具體的屬性在2.4節中進行詳細介紹.
步驟⑧是我們的重點研究對象,在靜態指紋構建的方法中,該過程通常將收集到的指紋特征值轉換成字符串形式并進行拼接,拼接后的字符串通過散列算法變成固定長度的數字,該數字就是傳統意義上的靜態指紋.通過靜態指紋匹配用戶固然在很大程度上節省了時間成本與計算開銷,但是由于特征值的變化頻率問題,靜態指紋對于用戶的追蹤時間往往十分短暫.因此在本次研究中,我們基于深度學習算法提供了動態鏈接指紋的方案.與靜態指紋相比,動態鏈接指紋并不通過散列算法生成,而是直接由各項特征值構成指紋.同樣地,在進行指紋匹配的過程中,動態鏈接指紋對指紋的每一項特征值都進行比較,并設置一個標準,當待匹配指紋與指紋庫中的某項指紋達到這一標準后,則認定兩者匹配,否則將待匹配指紋作為新指紋插入指紋庫中.生成標準的方法很多,例如統計分析方法、距離算法、隨機森林算法、LSTM算法等.而在本次研究中,我們通過雙向RNN模型訓練已有指紋集得到該標準.
對于步驟⑨,網站記錄用戶行為特征的方法和目的不在本文的討論范圍內.2.3節介紹基于雙向RNN的瀏覽器指紋識別框架,即RNNBF模型框架.
本節介紹RNNBF模型框架,在整個框架中,我們省略了對圖2中通用步驟的描述,例如解析html、加載js等,而專注于對動態指紋鏈接策略的描述.圖3表示了RNNBF模型框架,其中Server表示服務器端,在這里進行指紋的匹配與識別;而Client表示客戶端,用戶通過瀏覽器訪問網站并為網站提供指紋,另外,網站為用戶分配的瀏覽器實例ID也存儲在客戶端的Cache中.

Fig. 3 RNNBF model framework
為了增強瀏覽器指紋追蹤的效果,我們為所有訪問過網站的瀏覽器實例生成了獨一無二的標識符,我們稱之為瀏覽器實例ID,當用戶首次訪問網站時,其使用的瀏覽器自動將ID存入本地磁盤.RNNBF框架的識別流程為:
① 瀏覽器通過加載網站的指紋收集js文件,將指紋屬性特征值發送到服務器端.另外,我們將對本地磁盤進行搜索,若磁盤中緩存了瀏覽器實例ID,則將ID與特征值共同發送到服務器端.但是如果用戶首次通過該瀏覽器訪問網站或將網站存儲于本地的ID清除,即無法在本地緩存中搜索到瀏覽器實例ID,則僅發送指紋屬性特征值.
② 服務器端預處理接收的指紋特征值,在進行預處理時,為了雙向RNN模型能夠更好地提取特征中的信息,預處理模塊將所有非數值型的特征值轉換成數值型.在此關注的主要是字符串形式的特征值并將其通過3種特定的方式轉換成數值型特征值,此項內容將在2.5節的預處理模塊中具體介紹.
③ 將該瀏覽器實例對應的特征值與指紋庫中已有的指紋特征值進行匹配,匹配的情況分為3類:
Ⅰ. 在步驟①中攜帶瀏覽器實例ID并且待匹配指紋特征值與指紋庫中相同ID對應的最后一條指紋的特征值完全一致,則無需進行后續的步驟④~⑥.
Ⅱ. 步驟①中攜帶瀏覽器實例ID但是待匹配指紋特征值與指紋庫中相同ID對應的最后一條指紋的特征值有所不同,則在指紋庫中相同ID對應的指紋集的末位添加待匹配指紋并將其標記為F(i,j),表示該指紋來自瀏覽器實例Bi,并且在所有Bi鏈接的指紋中,該指紋排在第j位.若因待匹配指紋的加入,使得Bi的指紋集中有4條指紋,則刪除F(i,1),并將剩余指紋的j值減1.此情況下,同樣無需進行后續的步驟④~⑥.
Ⅲ. 步驟①中不攜帶瀏覽器實例ID,則進入步驟④.
④ 將待匹配指紋與指紋庫中的所有指紋進行深度匹配.此步驟利用已訓練的雙向循環神經網絡(Bi-RNN)與注意力機制結合的分類模型,利用二分類方法將待匹配指紋與指紋庫中所有指紋進行匹配,若待匹配指紋與指紋庫中的某一指紋F(i,j)達到了匹配的閾值,則在步驟⑤將待匹配指紋添加到瀏覽器實例Bi對應的指紋集中,同樣確保指紋集中最多只有3條指紋.并且在步驟⑥中返回Bi對應的IDi,在步驟⑦中將IDi保存在客戶端.若待匹配指紋與指紋庫中所有指紋均不匹配,則在步驟⑤添加瀏覽器實例Bnew(new表示瀏覽器實例在指紋庫中的索引,假設在添加新實例前指紋庫中已存在x項瀏覽器實例,則new的值為x+1),并為Bnew分配唯一標識符IDnew,同時將待匹配指紋添加到Bnew對應的指紋集中,標識為F(new,1).并且在步驟⑥中返回Bnew對應的IDnew,在步驟⑦中將IDnew保存在客戶端.
在整個RNNBF模型框架中,至關重要的模塊分別是特征收集模塊、預處理模塊以及Bi-RNN深度匹配模塊.特征收集模塊決定了構成指紋的具體特征,特征集的全面與否關乎RNNBF模型對用戶追蹤的效果.預處理模塊預處理非數值型的特征值,并將其轉換成數值型特征,使Bi-RNN深度匹配模塊能夠更好地提取特征中的信息并進行指紋匹配.Bi-RNN深度匹配模塊將雙向循環神經網絡與注意力機制結合,提取指紋特征之間的關聯性,并重點關注能夠有效追蹤用戶的特征.接下來對這3個模塊進行詳細介紹.
在廣泛地、綜合地調研了商用軟件使用的指紋方法和理論上可行的識別方法之后,我們總結了一些可用于指紋識別的屬性,共計64種,并將這個屬性集運用在特征收集模塊中,這些屬性對應的特征值構成了一個瀏覽器實例對應的指紋.這些屬性被粗略地分為4類:瀏覽器信息、系統信息、硬件信息和canvas指紋.
1) 瀏覽器信息.我們參考了Eckersley[5]提出的指紋方案,并選擇了諸如HTTP頭部信息、用戶代理、語言、瀏覽器使用的字體之類的屬性.有關這些瀏覽器的基本信息主要反映了瀏覽器之間的差異以及不同用戶對瀏覽器功能的追求.除此之外,我們還研究了瀏覽器的欺騙方法和存儲方式等.
① AddBehavior方法.IE5.0中提出的方法,僅在IE瀏覽器中受到支持,不需要通過使用層疊樣式表就能將行為綁定到對象上.
② 瀏覽器欺騙.部分瀏覽器為了保護用戶隱私,會對瀏覽器名稱、語言、操作系統和分辨率進行篡改.通過把用戶代理中的瀏覽器名稱、瀏覽器首選語言、platform中的系統名稱、可用分辨率與瀏覽器給出的信息進行對比得出結果.
③ 存儲方式.判斷瀏覽器是否支持IndexedDB,localStorage,sessionStorage和本地數據庫這些存儲方式.
④ 插件數量.插件作為瀏覽器功能的擴展,是由一組應用程序接口編寫的程序,能夠為原生瀏覽器增添原本不具備的功能程序.
2) 系統信息.系統信息反映了系統型號、屏幕分辨率和色深、系統安裝的字體數量以及時區信息.通過用戶使用的系統和個人習慣以及地理位置來區分用戶.
已安裝的字體數量.通過JavaScript引擎探測字體的存在,首先創建字體庫,要求在div元素中呈現具有特定字體的字符串的尺寸、陰影等屬性,并與默認字體進行對比,若不相同則證明該字體庫中的字體存在[20].統計設備中存在的字體總數.
3) 硬件信息.Englehardt和Narayanan提出了利用不同機器或瀏覽器上處理的音頻信號作為音頻指紋[7].Yue在論文中表示可以利用智能手機運動傳感器數據來破壞移動網絡用戶的隱私和安全[21].這給了我們啟發,從而添加了設備傳感器的信息作為屬性.Iskander等人提出利用計算機內部的時鐘信號差異作為設備的硬件指紋[13].我們將論文中提出的這些屬性進行匯總并復現.
① 音頻指紋.提取設備的音頻采樣率、通道數、最大通道數、輸入接口數、輸出接口數、通道計數模式和混頻方式作為音頻指紋的屬性.其中音頻采樣率是指設備每秒對聲音信號進行的采樣次數.在離散采樣后,模擬信號被轉換成數字信號,以方便電子設備處理.
② 設備傳感器.檢測設備是否存在距離傳感器、磁力傳感器、光線傳感器、角速度傳感器以及設備的最大同時接觸點等.由于不同瀏覽器對于檢測函數的兼容性不同,因此檢測函數不僅能用于區別設備,也能用于區別瀏覽器.
③ 時鐘信號差異.測試設備執行指令所花費的時間,這些時間取決于所需的時鐘周期數以及每個周期的持續時間.內部時鐘使用基于石英晶體的振蕩器,這些晶體中的微小變化可導致時鐘頻率的極小但可測量的差異[13].通過使用正則表達式函數,當重復足夠次數的時候,可以用來放大不同時鐘之間的微小差異.在此,對時間格式進行正則表達式匹配1 000次,測量設備的指令序列執行時間.
4) canvas指紋.canvas指紋最早由Keaton等人提出[22].不同設備的瀏覽器對于圖像的渲染會產生像素級的差異,這些差異可用于指紋一臺設備.此外,使用canvas.toDataURL()方法能夠返回canvas繪制圖片的base64編碼字符串,可用作對用戶的唯一標識.在這里,我們將canvas指紋的2D屬性與3D屬性分離,其中2D圖形由JavaScript引擎繪制,而3D圖形由WebGL引擎繪制.
① 2D屬性.用canvas繪制平面圖像,包括曲線、文字、emoji等,將形成的圖片用PNG格式的base64編碼導出.
② 3D屬性.利用three.js繪制canvas 3D圖像,涉及圖像的透明度、紋理、陰影等屬性,形成的3D圖像同樣用PNG格式的base64編碼導出.用不同瀏覽器繪制圖像的不同像素值來區別設備.
圖4所示的是4類瀏覽器指紋屬性在所有屬性中所占的比例.另外,我們根據用戶的訪問順序生成獨一無二的瀏覽器實例ID,并將其保留在瀏覽器的localStorage中.瀏覽器實例ID與用戶的設備信息被同時發送到服務器端的數據庫進行存儲,其中ID能夠用作判斷指紋是否來自同一瀏覽器實例的依據,作為計算瀏覽器指紋算法識別率的參照值.

Fig. 4 Proportion of four types of fingerprint attributes
屬性的3種數據類型分別是數值型、布爾型和字符串型.可以將數值型特征值直接輸入訓練模型中,將布爾型特征值簡單地轉換為二進制表示形式.然而,為了符合數據的邏輯性和合理性,字符串型特征值的轉換對于數據預處理來說是一個棘手的問題.字符串類型屬性包含有關用戶代理名稱、設備版本、時區等的詳細信息.因此,我們在預處理過程中提取關鍵信息,并用數字表示這些關鍵信息,從而達到將字符串型特征值轉換為數值型特征值的目的.另外,針對canvas指紋過長而導致用戶屬性值的總長度至少為50 KB的問題,我們提出了一種方法對canvas指紋進行壓縮.總而言之,字符串轉換方法分為3類.
2.5.1 枚舉
枚舉法適用于處理穩定的,有限的且不可更改的字符串類型屬性,例如語言、平臺、GPU供應商和渲染器等.首先,我們創建一個空列表.當列表中不存在的特征值出現時,將此值插入列表中,然后將其在列表中的索引作為新值返回;當列表中已經存在該特征值,則省略插入列表的步驟,直接返回該特征值在列表中的索引.以平臺信息為例,枚舉法實現的示意圖如圖5所示.
枚舉方法具體算法實現如算法1:
算法1.枚舉算法.
輸入:待處理的特征F的特征值數據集;
輸出:特征值列表L.
① letL=?;
② while any unprocessed data inFdo
③ if the value is inLthen
④ return the index of the value;*返回value在列表L中的索引*
⑤ else
⑥ add the value toL;*將value添加到列表L中*
⑦ return the index of the value;*返回value在列表L中的索引*
⑧ end if
⑨ end while
⑩ returnL.

Fig. 5 Taking platform as an example, a schematic diagram of enumeration
2.5.2 屬性細分
在用navigator對象的userAgent屬性獲取用戶代理信息時,返回的是一長串字符串.這一字符串中包含操作系統標識、加密等級標識、渲染引擎、版本信息等.為了提取其中的關鍵信息并將長字符串轉換為數值型,我們使用了一個名為ua-device的工具對userAgent進行處理[23].這個工具能夠從userAgent里面解析出設備生產廠家、設備型號、操作系統名稱、操作系統版本、瀏覽器名稱、瀏覽器版本等重要信息共17項.我們把這些信息稱為userAgent的子屬性.
如圖6所示,對布爾型的子屬性進行數值化處理時,即將FALSE轉換為0、TRUE轉換為1.對字符串型的子屬性進行同2.5.1節的枚舉處理.我們對所有子屬性按照重要性進行人為排序,并為每一項屬性賦權值,其中每一項子屬性的權重如表3所示.最后對所有子屬性值加權求和作為該userAgent的特征值.

Fig. 6 Schematic diagram of sub-attributes of userAgent to construct eigenvalues

Table 3 Sub-attributes and Weight of userAgent
2.5.3 CRC替換
HTML5中提供canvas元素用于繪制圖形,我們將在canvas上繪制的圖形保存為PNG格式的圖片.而該圖片的base64編碼被視為canvas指紋.我們知道,PNG格式的圖片由文件頭數據塊(IHDR)、調色板數據塊(PLTE)、圖像數據塊(IDAT)、圖像結束數據塊(IEND)等數據塊構成.其中IHDR是唯一的,它是PNG圖片數據流中的第1個數據塊;IDAT可能在圖片數據流中多次出現;IEND同樣是唯一的,它是圖片數據流中的最后一個數據塊.
如表4所示,在PNG文件中,每個數據塊由長度、數據塊類型碼、數據塊數據以及循環冗余檢測這4個部分組成.其中循環冗余校驗碼CRC是對數據塊類型碼和數據域中的數據進行計算得到.因此我們先將搜集到的canvas指紋進行base64解碼,然后根據每個數據塊的類型碼對它們進行定位.

Table 4 Composition of Each Chunk in the PNG File

Fig. 7 Bi-RNN deep matching model
我們發現所有安卓用戶的canvas圖片中僅存在IHDR,IDAT和IEND這3類數據塊.其中IDAT數據塊數量不定,而IHDR和IEND均唯一.我們考慮選取PNG文件的最后一個IDAT數據塊的CRC校驗碼代替該canvas指紋.由于IDAT數據塊的長度具有可變性,我們利用IEND數據塊類型碼對CRC校驗碼進行定位.
最后,我們對所有預處理后的屬性值進行檢驗.兩兩比較了所有數據的字符串型屬性,統計預處理前后屬性值是否均相同或均相異.如果存在2條數據預處理前的屬性值相同,但處理后的屬性值相異,則說明預處理的效果是不理想的.同理,如果存在2條數據預處理前的屬性值相異,但處理后的屬性值相同,也說明預處理的效果不理想.但是檢驗后發現不存在上述的2種情況,這說明我們提出的預處理方法能夠用數值很好地替換字符串.
馮胥睿瑞等人[24]曾將雙向RNN與注意力機制進行結合,用于提取惡意軟件的行為特征,并訓練惡意軟件檢測分類器.在此,我們同樣利用注意力機制和雙向RNN的組合框架來匹配指紋.指紋匹配在本質上是分類問題,但是,多分類問題將使模型構建更加復雜,并增加瀏覽器實例所屬類別過多所導致的錯誤分類的風險.在多分類的情況下,需要將每個瀏覽器實例都視為不同的類別,而分類模型綜合考慮指紋屬于每個類別的概率,選擇最大概率的類別作為指紋的歸屬類,否則當最大概率值小于閾值時將該指紋劃為新增的類.對于模型而言,多分類的任務量巨大.在實際情況下,用戶的數量可能是千萬級別,這將導致模型誤判率極高.相比之下,二進制分類更適用于實際情況,即分別將待檢測指紋與數據集中的每一項指紋進行比較,如果被判斷為同一用戶,它將被標記為1,否則將被標記為0.
將待匹配指紋表示為F(i1,j1),F(i1,j1)與指紋庫中的每一個指紋進行匹配,直到找到匹配程度大于閾值的指紋,在Bi-RNN模型中體現為,輸出標簽為1的指紋.將指紋庫中與F(i1,j1)進行匹配的指紋標記為F(i2,j2).其中i2表示F(i2,j2)來自瀏覽器實例Bi2,j2表示F(i2,j2)是Bi2對應指紋集中第j2個指紋.而輸出標簽表示為T(i1,j1)-(i2,j2),當T(i1,j1)-(i2,j2)=0時,表示F(i1,j1)與F(i2,j2)不匹配;當T(i1,j1)-(i2,j2)=1時,表示F(i1,j1)與F(i2,j2)匹配.用F(i1,j1),F(i2,j2)表示即將進行匹配的指紋對,將指紋對中的2個指紋的所有特征值求差,求差后的所有特征構成了差值指紋F(i1,j1)-(i2,j2).Bi-RNN框架的示意圖如圖7所示.

hd(t)=σ(WidI+Whdhd(t-1)+b1),
(1)
其中,d∈{l,r}.當d=l時,表示前向隱藏層;當d=r時,表示后向隱藏層.在Bi-RNN的隱藏神經元中,ReLU函數被用作激活功能.
輸出向量hl和hr將被饋入注意力模塊.注意力機制是Bi-RNN指紋識別模型的核心.注意力機制的實質是從人類視覺注意機制中獲得啟發[25].當執行預測任務時,它允許神經網絡更多地關注輸入特征中較為重要的部分,而較少關注輸入特征中重要性較低的部分.在我們的模型中,利用注意力機制使RNNBF專注于具有不變性的瀏覽器特征.注意力模塊與Bi-RNN模塊連接,Bi-RNN前向、后向隱藏層的輸出將被輸送到注意力模塊中作為輸入.令Y向量表示Bi-RNN模塊對前向、后向隱藏層輸出向量進行加權求和的結果.令Wa,b,T(i1,j1)-(i2,j2)表示注意力模塊隱藏層的權重、偏置和輸出標簽.
(2)
在注意力模塊的隱藏神經元中,ReLU函數被用作激活功能.最后得到的T(i1,j1)-(i2,j2)即為分類標識,Bi-RNN模型在本質上是一種二分類模型,輸出結果只有2種情況:1)F(i1,j1)與F(i2,j2)匹配,此時預測標簽T(i1,j1)-(i2,j2)=1;2)F(i1,j1)與F(i2,j2)不匹配,此時預測標簽T(i1,j1)-(i2,j2)=0.
當Bi-RNN的分類結果為1時,在瀏覽器實例Bi對應的指紋集中添加F(i,j),并記作F(i,j+1)(當Bi的指紋集中存在4條指紋時,刪除F(i,1)并將該指紋集中其他指紋的索引值減1).當Bi-RNN的分類結果為0時,繼續匹配指紋庫中的下一條指紋,直到指紋庫的最后一條指紋.若指紋庫中的所有指紋均不匹配,則在指紋庫中開辟新的瀏覽器實例Bnew(new值為瀏覽器實例在指紋庫中的索引,從0開始計數),Bnew的唯一標識符記作IDnew,并將Fnew添加到Bnew對應的指紋集中,記作F(new,1).
本節我們介紹了Bi-RNN模型的訓練與測試結果.作為對比實驗,分別比較了Bi-RNN模型與隨機森林模型和單層LSTM模型.為了測試Bi-RNN模型的性能,分別從訓練集的選取、特征集的選取以及對不同訓練集測試消耗的時間這3方面評估了模型.接下來分別從實驗設置、評估指標、數據集與開放式場景實驗這4方面介紹實驗過程.
本次實驗采用華碩K401作為實驗機器,CPU為Intel?CoreTMi5-5200U@2.20 Hz 2核,GPU為NVIDIA GeForce 940M,機器內存為8 GB.Bi-RNN深度匹配模型基于Keras實現.在注意力模塊中,我們使用全局注意力機制,其中使用了隱藏層中的所有狀態來計算最終狀態的權重.為了防止不同量級的數據使網絡不平衡,我們引入了“批量歸一化”功能來歸一化上一層的線性輸出,并將其發送到激活函數之后的下一層.另外,網絡中采用了dropout和梯度裁剪來防止過度擬合和梯度爆炸.
本次實驗在開放式場景下進行,模擬在真實的環境中進行指紋識別.在開放式場景下,指紋識別算法的任務是對指紋進行二分類.在開放式場景中進行指紋識別時,指紋不匹配的概率遠大于匹配的概率.不平衡的二分類問題使得準確率并不能很好地衡量模型性能.為此,我們使用精確率(Precision)和召回率(Recall)的調和平均值(F1-Score)、受試者工作特征(receiver operating characteristic, ROC)曲線與x軸圍成的面積(AUC)來衡量模型性能.
在一個具有t個正樣本、f個負樣本的數據集中,用TP表示正樣本被分類為正樣本的個數、FP表示負樣本被分類為正樣本的個數、TN表示正樣本被分類為負樣本的個數、FN表示負樣本被分類為負樣本的個數.精確率是指所有被分類為正樣本的樣本中,被正確分類的比例.召回率是指在所有被正確分類的樣本中,被分類為正樣本的比例.
(3)
(4)
F1-Score則是Precision和Recall的調和平均數:
(5)
AUC值是指在t×f個樣本對中,成功預測正樣本的概率大于錯誤預測負樣本的概率的可能性.其中,pt表示在一個正負樣本對中,將正樣本預測為正樣本的概率;pf表示在一個正負樣本對中,將負樣本預測為正樣本的概率.
(6)
其中,
(7)
F1-Score的數值越大,表示模型對于精確率和召回率的平衡效果越好,即模型對于正樣本和負樣本都能夠準確地分類.F1-Score更關注模型對正樣本的分類準確率.AUC值是對模型的另一種衡量標準,數值越大則模型分類效果越好.當AUC=1時,模型為完美分類器;當AUC=0.5時,模型與隨機分類器效果相同,不具備分類價值.AUC值具有容忍樣本傾斜的能力,當數據集中正負樣本的分布發生變化時,AUC值仍能夠保持穩定.在后續實驗中,我們分別使用F1-Score和AUC值評估模型.
3.3.1 數據采集
由于涉及隱私問題,我們在網上并沒有找到開源的瀏覽器指紋數據集,因此我們開發了一個Web應用程序供用戶查閱他們的瀏覽器指紋,并在他們知情的情況下收集指紋.該網站基于JavaScript引擎,通過調用HTML5接口實現用戶特征提取.它利用了Google于2016年提出的PWA技術[26]更改了用戶訪問策略并設置了緩存策略方便用戶離線訪問網頁,并將網站分配的瀏覽器實例ID保存在本地磁盤中.我們邀請了131名志愿者訪問網站并提供他們的瀏覽器指紋.最后,收集了147個非重復指紋.另外,我們通過數據增強的方法解決了數據量太少而無法訓練深度學習神經網絡模型的問題.
3.3.2 數據增強
本節介紹一種增強數據集的方法,以模擬特征由于客觀因素被動修改或由于反追蹤插件主動篡改的情況.指紋攔截器會隨機生成唯一的指紋,以防止在用戶多次訪問同一網站時進行跟蹤.但是,阻止程序會修改某些最有效特征,也就是最能夠體現用戶身份獨特性特征中的一部分,例如字體、插件等,其原因一方面是修改這些特征具有極高的效率,修改成本較低,另一方面是因為它們是穩定的不易更改的特征.例如FireGloves無法更改可用于Flash的API,Flash應用程序仍可以發現真實的操作系統和真實的屏幕分辨率[10].另外,阻止者試圖確保用于欺騙跟蹤器的指紋看上去盡可能真實,后者會根據某種規則對原始指紋進行輕微修改.從另一面解釋的原因是,隨機替代品很容易暴露于跟蹤器,并且信息不匹配導致的指紋不一致反而造成了更有效的跟蹤[4].
數據增強是基于假設:阻止者會更改一部分原始特征,這些原始特征會受到規則的約束,而這些規則可以應用于真正的指紋變化.我們參考了FP-STALKER[4]中的一些規則,并總結了數據集中所有可能的值,這些值的替代項被限制在一定范圍內.但是,根據阻止者的欺騙手段,我們放寬了對更改規則的限制,例如允許更改瀏覽器版本、操作系統或平臺,因為阻止者非常重視這些特征.我們適當地在canvas指紋、音頻指紋中添加噪聲,因為Laperdrix等人[9]曾提出一種在這2項屬性中添加噪聲的方法,有效地欺騙了指紋追蹤器.此外,瀏覽器的版本會在合理范圍內隨機變化,而不是隨時間增加,以應對阻止者的篡改.我們以此作為約束,允許原始指紋最多修改3個功能.根據這些規定,阻止者熱衷更改的特征被選擇和更改,從而更接近真實情況的模擬指紋被阻止者修改的情況.最終,原始數據集增加到6倍,新的數據集被稱為增強數據集.
3.3.3 訓練集與測試集
增強數據集中共有777 924個指紋對,從增強數據集中提取一部分指紋對作為訓練集.當指紋對的標簽為1時,我們將該指紋稱為正樣本;否則,我們將其稱為負樣本.但是,在增強數據集中,正樣本和負樣本所占的比例為1∶118,分布極不均衡.如果訓練集中的負樣本所占比例過大,將導致結果偏向負樣本的標簽0.為了解決這個問題,我們在3.4.1節測試了不同正負樣本比例的訓練集對于模型分類性能的影響.并選用12 000個最優比例的正負樣本作為后續實驗的訓練集,從真實數據集中隨機抽取3 000個指紋對作為測試集.

Fig. 8 Performance of Bi-RNN training different epochs on different training sets
3.4.1 不同訓練集對模型分類性能的影響
考慮到訓練集中正負樣本分布不均衡,而不同訓練集中不同比例的正負樣本可能對模型的分類性能產生一定程度的影響,我們在增強數據集中按不同比例隨機抽取正樣本和負樣本共12 000個,而測試集相同.在不同訓練輪次(epoch取值2~60)下,測試Bi-RNN模型的F1-Score和AUC值,測試結果如圖8所示.其中,50%,60%,70%,80%,90%分別為負樣本在樣本集中的占比.
可以看出,當負樣本在訓練樣本集中的占比為90%時,Bi-RNN模型在不同訓練輪次上的訓練效果較為穩定,沒有較大偏差,并且在綜合程度上,訓練效果優于其他比例的訓練集.因此,在后續的實驗中,訓練集中負樣本的占比均設置為90%.
3.4.2 匹配指紋的時間開銷
本實驗中模擬了在不同指紋庫大小的情況下,匹配待識別指紋與指紋庫中指紋所花費的時間.不像靜態指紋在指紋匹配過程中僅需比較字符串或數字,動態鏈接指紋在指紋匹配的過程中根據鏈接算法計算待識別指紋與指紋庫中指紋的相似程度,這一過程通常需要較大的時間開銷.在訓練完成的Bi-RNN模型中,分別測試了在指紋庫中具有400~5 000條指紋的情況下匹配待識別指紋的時間開銷,測試結果如圖9所示:

Fig. 9 Time overhead of matching fingerprints in fingerprint libraries of different sizes
可以看出,指紋庫中的指紋越多,匹配時間所需時間越長,而當指紋庫中的指紋數量為5 000條時,匹配指紋的時間開銷仍不足0.7 s.
3.4.3 Bi-RNN與單層LSTM模型比較
我們比較了單層LSTM模型[18]與結合了注意力機制的雙向RNN模型的分類性能.為了控制變量,我們在2個模型中設置相同的隱藏層節點個數與激活函數,并保證相同的訓練集和測試集.2個模型的不同之處在于Bi-RNN模型比單層LSTM模型多了一層反向隱藏層,Bi-RNN模型隱藏層的輸出向量作為注意力模塊的輸入向量,經由注意力模塊后得到分類標簽.
其中,訓練集仍由12 000項指紋對構成,從增強數據集中隨機抽取的負樣本占90%、正樣本占10%.測試集的樣本由真實數據集中隨機抽取的3 000項指紋對構成.在訓練輪次為2~60的情況下進行測試,測試結果如圖10所示:

Fig. 10 Performance comparison between Bi-RNN and single-layer LSTM models

Fig. 11 Importance of all attributes
當以F1-Score為評估標準時,Bi-RNN模型的分類效果明顯優于單層LSTM.而當以AUC值為評估標準時,Bi-RNN模型的分類效果與單層LSTM不相上下,在不同的訓練輪次上均能達到99.50%以上.相比于AUC值,F1-Score更關注將正樣本分類正確的情況,在指紋識別模型中,體現在準確地將待識別指紋正確鏈接到指紋庫中已有的瀏覽器實例.Bi-RNN模型對于鏈接指紋庫中已有指紋更具有優勢,而兩者的模型性能在不同的訓練輪次上表現穩定.
3.4.4 Bi-RNN與隨機森林模型比較
FP-STALKER的一種變體[4]使用隨機森林模型鏈接瀏覽器指紋.在此,我們比較了Bi-RNN模型與隨機森林模型的指紋識別性能.由于本實驗旨在比較模型之間的性能,所以對于特征集的選取均相同.

(8)
為了減少由隨機采樣引起的誤差,算法會重復10次以計算每個屬性的重要性并獲取其重要性的平均值.所有屬性的平均重要性度量,如圖11所示.
將所有屬性按重要性從大到小進行排列,分別抽取前5~64個重要性最高的屬性組成特征集.分別測試Bi-RNN與隨機森林模型在不同大小的特征集上的分類性能.訓練集與測試集中指紋對的組成根據特征集的大小進行更改,即將特征集中對應的特征值組成新的瀏覽器指紋對,并按正負樣本1∶9的比例隨機抽取12 000個指紋對作為訓練集,隨機抽取3 000個指紋對作為測試集.將Bi-RNN模型的訓練輪次設置為20,RF模型中的決策樹個數設置為10,而最大深度設置為8.測試結果如圖12所示:

Fig. 12 Performance comparison of Bi-RNN and RF on different feature sets
當以F1-Score為評估標準時,Bi-RNN模型的分類效果明顯優于隨機森林模型.而當以AUC值為評估標準時,Bi-RNN模型的分類效果與隨機森林模型不相上下.當特征集中只有一個特征時,無論在Bi-RNN模型還是RF模型中,訓練效果均不理想,但是當特征集中的特征達到5個及以上時,2個模型均能達到較好的識別效果.
可以看出,特征集的大小對于Bi-RNN有一定的影響,但是影響較小,而對于RF模型的影響較大.這說明Bi-RNN在特征集上的穩定性優于RF模型.當僅有一個特征作為輸入時,Bi-RNN模型的F1-Score仍然能夠達到50%以上,而RF模型的F1-Score卻在20%以下.當特征集中的特征個數達到5個及以上時,Bi-RNN模型的F1-Score不再變化.特征集的構造方式根據重要性從大到小排列并進行選擇,另外,在本次實驗中,Bi-RNN模型的訓練輪次被固定在20,這兩者在一定程度上影響了Bi-RNN模型在特征集上的穩定性.綜合而言,Bi-RNN模型的指紋鏈接效果優于隨機森林模型.
漸進式Web應用程序由Google在2016年提出,現已被安卓系統上的Web程序廣泛使用.一個PWA是指比傳統Web程序具有更多功能的Web應用程序,例如推送通知服務、脫機操作等.目前,PWA是收集瀏覽器指紋的最有效工具之一.PWA的優點之一是脫機緩存和及時加載,可以在識別中充分利用.
在manifest.json文件中配置PWA程序的名稱、圖標、URL等信息后,通過Chrome瀏覽器可以將該PWA添加到用戶的主屏幕.當用戶從主屏幕啟動一個PWA程序時,服務工作者組件會立即從本地緩存中加載該程序而不受網絡環境的影響.及時加載的前提是用戶曾經在連接了網絡的情況下訪問過該PWA,并且網頁編寫者將頁面緩存邏輯寫入本地.服務工作者組件類似于客戶端代理,控制緩存策略以及響應資源請求邏輯,通過預緩存關鍵性的資源消除Web程序對網絡的部分依賴,從而為用戶提供即時可靠的體驗.
PWA的離線加載機制使得它比普通的瀏覽器緩存能夠更好地跟蹤用戶.借助PWA的脫機訪問,即使設備處于脫機狀態,腳本也可以連續記錄或更新本地緩存的指紋,因為當用戶首次訪問我們的網站時,腳本已經在本地緩存了.因此,只要用戶持續訪問我們的PWA,被更新后的特征將被本地緩存,也就是說,PWA能夠記錄離線時的瀏覽器指紋,完善了指紋跟蹤鏈.結合PWA的指紋識別方案如圖13所示:

Fig. 13 The model of identification based on PWA
相比于靜態指紋,RNNBF模型能夠動態地鏈接指紋,從而持續地跟蹤用戶.然而在RNNBF模型中存在一定的局限性.在征集志愿者的瀏覽器指紋時,并非隨機采樣,而是通過社交媒體進行宣傳,這使得采樣群體傾向于青年用戶.另一方面,由于多數用戶對于隱私保護的重視,他們并不愿意參與試驗提供瀏覽器指紋,這使得數據集的原始樣本較少,如果能夠收集更多的瀏覽器指紋,RNNBF模型的識別效果能夠更卓越.
本文提出了一種基于深度學習框架的瀏覽器指紋識別模型,改進了單向LSTM在識別瀏覽器指紋中的不足,嘗試添加注意力機制且得到了很好的識別效果.另外,本文提出了針對瀏覽器指紋各屬性的特性進行預處理的方法,能夠將所有特征值轉化為數值類型并且不影響其原本包含的信息.最后,我們嘗試將瀏覽器指紋與PWA技術相結合,提供了一種追蹤用戶的新思路.
本文我們提出RNNBF的模型,該模型在用戶訪問特定網站時起著重要作用,旨在防止用戶的身份信息泄露并保護網站免受攻擊風險.RNNBF模型由特征收集模塊、預處理模塊和Bi-RNN模塊組成.在特征收集模塊中,我們綜合了現有研究中使用的瀏覽器指紋屬性并選取共64項屬性作為RNNBF模型的特征集.在預處理模塊中提出了一種新穎的特征值預處理方法,將所有特征轉換為數值類型,并顯著縮短指紋長度、提高可計算性.Bi-RNN模塊的核心是注意力機制,它使RNNBF在指紋匹配的過程中專注于具有不變性的指紋特征,從而提高動態鏈接指紋的性能.實驗表明,RNNBF模型的在動態鏈接指紋方面的效果優于單層LSTM模型以及隨機森林模型.最后,我們從戰略層面討論了PWA技術與瀏覽器指紋相結合的可能性.