從應用端到服務端,裝置指紋生成演算法大變革

網易易盾發表於2021-03-02

裝置指紋是用來標識手機或者瀏覽器的唯一 ID。基於這個 ID,我們能夠精確定位一個裝置,將使用該裝置的全部資料進行關聯。結合更加多樣化的資料,黑產裝置的識別準確性也將大幅提升。

裝置指紋從何而來?一般而言,我們先在裝置上整合一個 SDK,透過 SDK 採集裝置多個維度的資料,選擇其中一些能夠唯一標識一臺裝置的資料,再利用一定演算法生成裝置指紋。

為了保證裝置指紋的準確性,我們會選取唯一性和穩定性較高的欄位來生成,並且要儘可能防止這些欄位被惡意篡改而導致裝置指紋發生變化。

01 如何判斷裝置指紋是否優質?

衡量裝置指紋優劣的最重要指標是唯一性和穩定性。

唯一性:不同裝置生成的裝置指紋一定不會重複。這一指標幫助我們確認裝置使用者身份的唯一性。如果裝置指紋的唯一性不足,則可能導致不同裝置的裝置指紋發生碰撞,在一些風控策略較嚴格的場景下,可能會導致正常使用者被誤判。

穩定性:裝置系統升級或少量資料變更時,裝置指紋不會發生變化。如果裝置指紋的穩定性不佳,則同一個裝置的裝置指紋一直變化,對黑產的識別效果會減弱。

02 如何生成裝置指紋?

裝置指紋生成演算法是指根據採集的資料,利用一定的演算法計算出一個值來標識該裝置。其基本原理可根據機率論來解釋。

2.1 單個欄位條件機率分析

所謂裝置指紋的唯一性,就是在已知某個裝置資料的情況下,計算這個裝置屬於某個 Sid 的條件機率:

從應用端到服務端,裝置指紋生成演算法大變革

實際上,這裡機率很難精確統計出來,但是可以根據大資料統計分析進行估算。當對總量1000w的資料進行統計時:

以 idfv 聚合統計為例,發現每個 idfv 都指向一個不同的裝置,即知道 idfv 後,就能唯一確定是哪臺裝置。換而言之,idfv 的唯一性很高,其區分度等於100%,其條件機率如下:

從應用端到服務端,裝置指紋生成演算法大變革

以 ip 為例,220.170.50.207這個 ip 指向208個不同的裝置,即知道 ip 之後,還是有可能不能完全確定是哪個裝置,但是範圍已經從1千萬縮小到208個,其區分度相對較低,其條件機率如下:

從應用端到服務端,裝置指紋生成演算法大變革

2.2 多個欄位組合的條件機率分佈

上文直觀地描述了多個欄位的唯一性會增強,下面將解釋如何計算唯一性。假設多個欄位變數獨立分佈,那麼:

從應用端到服務端,裝置指紋生成演算法大變革

如果我們選擇 M 個隨機變數,每個變數的取值有 N 個,那麼:

從應用端到服務端,裝置指紋生成演算法大變革

假設 M=10, N=10,那麼唯一性就非常大:

從應用端到服務端,裝置指紋生成演算法大變革

根據這個機率值,我們可以計算碰撞的機率。在允許的碰撞機率之中,如果多個聯合欄位的機率小於這個值,就認為是符合唯一性要求,將兩個裝置關聯上。

2.3 多個欄位組合的裝置指紋唯一性

從裝置上採集的欄位中,有的欄位的唯一性高,有些欄位的唯一性低。根據上述原理,我們可以透過聯合多個低唯一性欄位,從而得到一個高唯一性的組合欄位。

假設對裝置指紋的唯一性要求是碰撞機率小於1/100000000000,而 ip,手機型號,系統版本,儲存空間等欄位的碰撞機率均為1/10000,那麼這幾個欄位的聯合起來的機率值可能就超過要求的碰撞機率,即這些欄位組合起來即可當做一種裝置指紋的生成演算法。當然這裡只是一種近似的演算法,實際中用到的組合條件和權重複雜很多。


從應用端到服務端,裝置指紋生成演算法大變革


2.4 組合欄位選擇

上文從條件機率角度介紹了“唯一性”的含義。如果一個欄位中每個取值的機率不一樣,加上特徵數量較多,則很難人工選取適合的分類組合。決策樹的作用就是透過訓練迭代的方式,找到最佳的分類特徵及其分界點,使得總體的條件機率最大化。可以使用熵衡量分類的誤差(本質上就是條件機率最大化):

從應用端到服務端,裝置指紋生成演算法大變革

還是以上面的例子說明,p(sid|idfv)=1,這時候資訊熵為0,表示"確定性很強"。P(sid|ip = 220.170.50.207) = 1/208 ,這時候熵的計算公式,這個值比較大,說明“不確定”很強:

從應用端到服務端,裝置指紋生成演算法大變革

不同欄位的條件機率可透過歷史資料統計後得出,如下圖所示:


從應用端到服務端,裝置指紋生成演算法大變革


因此,諸如 IDT、RF、GBDT 這類決策樹的本質,就是透過已有的樣本,選擇最優的分類特徵及其分界點,得到最優的分類樹。

03 傳統裝置指紋存在哪些問題?

傳統的裝置指紋主要採用客戶端生成的方案。隨著黑產的對抗能力不斷增強,裝置指紋被破解的情況越來越頻繁,主要是由於暴露在外的 SDK 有可能被人逆向破解,裝置指紋的穩定性難以保證。

客戶端生成的方案更難被破解,黑產對抗的成本也更高。每次被破解後都需要修改 SDK,升級版本,而 APP 版本升級成本很高,時效性低,在與黑產的對抗中處於不利局面。於是,我們開始轉換思路,推出基於服務端計算裝置指紋的方案。

04 服務端生成方案

在服務端生成方案中,指裝置指紋透過服務端的演算法計算得到,不再是在客戶端進行計算。服務端裝置指紋演算法的主要過程如下:

4.1 演算法過程

使用服務端計算裝置指紋時,可不侷限於單一的計算演算法,可同時採用多種演算法計算出不同的裝置指紋,每種裝置指紋的唯一性都已達到要求,穩定性各有高低。舉個例子,裝置指紋 A 在條件 A 下會發生變化,在條件B下不會變化。裝置指紋 B 在條件 A 下不會發生變化,但在條件 B 下會發生變化。當我們綜合2者之後,找回演算法可以保證,不管是 A 傳送變化,還是 B 發生變化,最終生成的裝置指紋都可以保持不變。演算法如下圖所示:


從應用端到服務端,裝置指紋生成演算法大變革


假設有2種裝置指紋生成演算法 F1 和 F2,分別使用A和B欄位進行計算,得到2個不同的裝置指紋。該演算法會綜合兩者結果,返回一個最終的裝置指紋,用 Sid 進行表示。當我們使用同一個裝置多次修改後欄位 A 和 B 後,計算過程如下所示:

1)當該裝置第一次訪問時,假設 A=0,B=0,此時:

從應用端到服務端,裝置指紋生成演算法大變革

由於 IDA0 和 IDB0 此前都未出現過,所以將其當做新裝置,隨機生成一個裝置指紋分配給它:SID0 ,並且記錄 IDA0 屬於 SID0 ,IDB0 也屬於 SID0 ,即

從應用端到服務端,裝置指紋生成演算法大變革

2)當該裝置第二次計算時,如果 A 和 B 沒有變化,還是為0,那麼計算出來的結果與第一次完全一樣,仍未出現 IDA0 和 IDB0,但此時根據歷史資料可知,IDA0 和 IDB0 對應的裝置指紋為 SID0,所以返回的裝置指紋是 SID0;

3)假設當裝置發生變化時,比如 A 發生變化,此時A=1,B=0,計算如下:

從應用端到服務端,裝置指紋生成演算法大變革

此時F1計算得到的裝置指紋已傳送變化,但 F2 計算的仍然不變,我們透過 IDB0 得到該裝置的裝置指紋仍為 SID0,並且將 IDA1 也加入到 SID0 庫中,即

從應用端到服務端,裝置指紋生成演算法大變革

4)同理當 B 欄位傳送變化時,假設此時 A=1,B=1,計算過程如下:

從應用端到服務端,裝置指紋生成演算法大變革

此時 F2 計算得到的裝置指紋已傳送變化,但仍然可以透過 IDA1 查詢到當前裝置的裝置指紋為 SID0,同時將 IDB1 也加入到 SID0 的庫中,即

從應用端到服務端,裝置指紋生成演算法大變革

從上述過程可以看到,當裝置資訊 A、B 均傳送變化的情況下,服務端透過歷史資料可以進行回溯,從而確保最終生成的裝置指紋保持不變。需要注意的是,上面只是簡單的描述過程,實際情況下欄位變化的情況往往更加複雜。

4.2 實際效果

從上述生成演算法可知,相對客戶端計算,服務端計算方案可以同時採用多種生成演算法,利用歷史資料回溯的方式進行找回,相較於單一生成演算法,裝置指紋的穩定性有較大提升,能保證在部分裝置資料變化的情況下,生成的裝置指紋保持不變。

另外,由於裝置指紋透過服務端計算生成,不對客戶端暴露,安全性有所提升。同時演算法升級較為方便,只需要服務端更新演算法即可,客戶端無需升級版本,從而降低使用成本。

根據線上執行一段時間後的統計,透過新老演算法生成的結果如下:找回比例達8.9%,裝置指紋的穩定性提升明顯。


從應用端到服務端,裝置指紋生成演算法大變革


05 總結

本文主要介紹了易盾在裝置指紋對抗上的經驗,在客戶端 SDK 對抗的基礎上,使用服務端生成方式,既保證生成演算法的安全性,又利用大資料技術,對篡改的裝置進行找回,進一步提高裝置指紋的穩定性。

裝置指紋作為黑產對抗的基礎武器,也是對抗最為激烈的戰場,保證裝置指紋的唯一性和穩定性是關鍵的一環。易盾也會持續的進行最佳化迭代,不斷提高裝置指紋的效果。


相關文章