基於用戶擊鍵特征的身份鑒別系統


簡單來說,我們要做的就是一種通過用戶敲擊鍵盤的習慣進行身份鑒別的系統。國內外之前有一些相關研究,但是通常是數千條數據訓練,而且不能隨意改變敲擊的字符串,或者是有的要求采用帶有壓力傳感器的鍵盤,難以實用和推廣。我們做一個比較簡單的根據匹配相似度的系統,采用普通鍵盤即可使用,其算法實現很簡單。

關於該領域的介紹推薦看這篇綜述及其引用:https://www.hindawi.com/journals/tswj/2013/408280/

首先說我們的一個應用場景:我們可以在各種網站的登錄界面部署系統,當用戶輸入密碼時,不止驗證密碼是否正確,同時將這次密碼輸入同注冊時的密碼輸入習慣進行匹配,如果相似度較低,則增加驗證方式,如手機驗證碼。那么針對這種場景,我們想了一點方法。

數據采集處理

我們需要考慮從鍵盤輸入我們能得到什么,最基本的能得到多個三元數據,分別為(鍵盤碼,時間點,按鍵類型)。通過鍵盤碼我們可以確定按鍵的字符,按鍵類型指的是鍵盤被按下還是抬起。

例如某次輸入一個字符串,我們所得到的基本數據:

key time type
65 0 0
65 101 1
80 151 0
80 241 1
83 260 0
83 350 1
76 421 0
76 601 1
75 670 0
75 740 1
81 770 0
87 871 0
81 961 1
87 994 1

key為鍵盤碼,time單位為ms,type=0為按下,type=1為抬起

采集數據后,我們要考慮鍵盤按鍵事件之間的關系。采用前面提到的那篇綜述的一張圖
image1

在這里,可以看出能提出兩種特征,一種是駐留時間特征(dwell time),另一種是飛躍時間特征(flight time)。駐留時間特征是說一個按鍵被按下后持續的事件,飛躍時間特征有圖中的四種定義,我們采用的是從某個按鍵被抬起到下一個按鍵被按下之間的時間差作為飛躍時間特征。(即圖中的\(F_{type1}\)

從前面那個例子提出的駐留時間特征為(101,90,90,60,80,70,90),為什么沒有標出是哪些按鍵的駐留時間,是因為在這個應用場景中,我們的密碼不會變化,這樣的話我們就無需考慮記錄對應位置。
相應地,提出的飛躍時間特征如下:{“65-80”:50, “80-83”:19, “83-76”:71, “76-76”:40, “76-75”:69, “75-81”:30,“81-87”:-90},與駐留時間特征不同的是,駐留時間是一個向量,其每一項的含義特定,而飛躍時間特征為一個鍵值對的集合,假設出現多個鍵值對的鍵值相同時,我們就將其取平均值。而且注意到,最后一個“81-87”這一項對應的值為負數,並不是bug,這種情況是非常常見的現實情況,讀者可以想想是什么情況出現了。

從鑒別的角度來看,實驗中飛躍時間特征對於區分用戶的作用非常明顯,應該說相比於飛躍時間特征,駐留時間特征對於系統貢獻微乎其微,如果有想實現這種系統的讀者,建議先用飛躍時間特征。(純粹的經驗啦,可能不正確,也沒什么論文支撐)

匹配算法

至此,我們拿到了兩種特征。我后面僅以飛躍時間特征為例(若想綜合駐留時間特征的信息,可以分別去按照下面的算法計算相似度,然后做加權平均)。

我們假設由注冊時采集的用戶密碼輸入得到的特征為\(F_A\),其是一個鍵值對集合,登錄時同樣可得到類似的特征\(F_B\)。我們將其對應鍵的值排好,分別生成兩個序列
\(A = v_{A1},v_{A2},....,v_{A_n}\)
\(B = v_{B1},v_{B2},....,v_{B_n}\)

for(i = 1;i < n;i++){
B[i] = \(\lambda * B[i] * \frac {sum_B - sum_A} {n*sum_A}\)
}
這里我加了一個系數\(\lambda\),其實是一種懲罰系數,因為實驗發現如果密碼輸入過快或者密碼過短,通常的匹配方式都會出現過高的相似度,導致漏檢率較高。在我們的實驗中,發現通常取2到3之間效果不錯。

\(m = \frac {\Sigma_{i=1}^n v_{Ai} * v_{Bi} } {\sqrt {\Sigma_{i=1}^n v_{Ai}^2} * \sqrt {\Sigma_{i=1}^n v_{Bi}^2}}\)

S = m if m > 0 else 0
將S輸出,即為我們給出的輸入習慣相似度。

Demo系統

我們基於這個算法做的Demo系統,鏈接:
https://www.keystroke.cn/keytrace/toSignup.action

使用JavaScript作為鍵盤事件采集,后台用Java實現的算法。

一起完成這個的小伙伴的github:
https://github.com/WindInWillows
https://github.com/hitcxy
https://github.com/s65b40
https://github.com/chuxiuhong //我


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM