手指上的安全

導讀 本文會講解一些關於keytap工具的技術細節。我也會分享一些自己關於這個項目的幾點想法。這個項目已經開源,源碼在這裏可以下載。

描述

該工具的主要目標是利用敲擊鍵盤時產生的聲音作爲一種邊信道攻擊來猜測輸入文本的內容。爲了達到這個目標,該算法以訓練集作爲輸入,這個訓練集包括音頻記錄和記錄期間你敲了哪些鍵盤按鍵。通過這些數據,該算法可以學習到不同按鍵敲擊的聲音,之後就可以通過捕獲的音頻來嘗試識別敲鍵盤的聲音。訓練數據集的收集非常具體,採集收據的根據也就是鍵盤、麥克風還有兩者之間的相對位置。任何因素髮生了變化,這個方法就變得毫無意義了。不過好在,當前的方法可以進行實時預測。
這個方法涉及到的主要步驟如下:

收集訓練數據
創建預測模型,不斷學習
檢測到鍵盤輸入
預測具體的每一個輸入鍵

收集訓練數據

這個收集訓練數據的方法已經忽略了兩次鍵盤敲擊之間的聲音。我們只保留實際按鍵前和按鍵後75-100ms的音頻。這樣做可能會有點不太精確,因爲鍵盤敲擊的延遲時間是隨機的,程序捕獲這種事件,也會受到硬件和軟件因素的影響。
舉個例子,下圖是敲擊我鍵盤上的字母“g”的完整聲波:
手指上的安全手指上的安全
從圖中可以看到,在按鍵峯值之後,還有一個釋放按鍵的峯值。而keytap直接忽略了這個釋放峯值。這個可能會提取到額外的信息,不過爲了簡單起見,釋放峯值的這個數據就直接放棄不用了。所以,最終字母“g”這個按鍵的訓練數據聲波圖如下:
手指上的安全手指上的安全
當然,這個75ms的間隙對打字速度有一定的限制,如果在這個時間段內,按鍵有重疊的話,不同按鍵的訓練數據就會混雜在一起。
從上圖中還可以觀察到一點就是某個按鍵的訓練聲波圖越多越好,結合多個聲波圖,可以幫助減少環境噪音。而且,每個人按鍵的聲音可能稍有不同,這就取決於用戶按鍵的方式了。所以,你可能會捕獲到某個按鍵的不同的聲音。

創建預測模型

這時候就體現出人們的非凡創造性了,可以通過機器學習,人工智能和神經網絡等技術來創建預測模型。不過keytap使用了最簡單的一種辦法。對於每一個訓練按鍵,我們執行以下3個步驟:
1.對齊收集到的波形峯值。這有助於避免檢測按鍵之前的隨機延遲時間,前面解釋過了。
2.基於相似性度量來優化聲波的對齊方式,因爲有時候,聲波的峯值並不是最佳指標,所以我們要選擇一個更加精確的方法。
3.對其波形進行簡單加權平均。權重由相似性度量定義。
我們並沒有直接跳到步驟2,而是要先執行第一步,因爲相似性度量的計算是很吃CPU的。而步驟1已經有效的縮小了對齊的範圍並減少了計算量。
步驟3之後,我們最終會得到每個按鍵的平均波形。之後會將其與捕獲到的數據進行對比並預測最有可能的輸入按鍵。
keytap中使用的相似性度量是交叉相關(CC),公式如下:
手指上的安全手指上的安全
這裏的Ai和Bi是被比較的兩種波形的波形樣本。CC值越高,波形越相似。當然也可以使用其他的相似性度量的測試方法。
不同按鍵之間間隔的計時信息其實也可以加入到預測模型中,不過我避免了使用這種方法,因爲它更加難以實現。

檢測鍵盤輸入

keytap使用相對簡單的閾值技術來檢測原始音頻中的按鍵事件。顯然,當用戶敲擊按鍵時,我們預計會有一個很高的峯值,這也正是我們想要的效果。閾值相對於過去幾百毫秒的樣本平均強度而言是自適應的。
這個方法並不是十分完美,但我現在還不知道更有效的方法來檢測按鍵事件。

預測敲了哪些按鍵

一旦確定了可能的按鍵事件,我們就可以定位到波形的峯值位置,計算該部分波形與訓練數據中所有平均波形的相似性度量。我們允許在峯值附近有小範圍的調整(前面提到過)。我們認爲相似性度量最高的將對應的是敲擊的按鍵。

幾點觀察

我注意到即時這個算法沒有檢測到敲擊的正確按鍵,它仍然能夠預測到附近的按鍵,意思也就是定位到了正確鍵的下一個鍵。對於這個現象,我認爲有下面兩種解釋:
1.鍵盤上相鄰的按鍵發出的聲音類似
2.在這個方法中,鍵相對於麥克風的位置對預測起着決定性的作用
我認爲第一種解釋不太可能,所以很可能是第二種解釋。
另外,我還觀察到機械鍵盤比非機械鍵盤更容易遭受這種鍵盤竊聽攻擊。

keytap2

我很篤定肯定有一種實現預測的方法是根本不需要收集訓練數據的。假如用戶使用某種已知語言來輸入文本,比如英語,那麼關於該語言的N元模型統計信息和按鍵檢測的相似性度量值結合起來就足夠檢測出輸入的文本了。實際上,歸根到底這其實就是破解置換密碼的一種攻擊。
keytap2嘗試着去證明這種攻擊。我也在做這方面的研究,但是我卡在了基於他們的CC公式對按鍵進行聚類分析的部分。但我認爲至少我已經準備好了置換密碼破解工作。如果在實際中破解成功的話,我將會提供更多的細節。

結束語

科學文獻上,關於這個主題的論文有很多。其中有一篇論文中的一個特別的方法給了我很大的啓發,就是Don’t Skype&Type!大家有興趣的可以看看。但大多數情況下,我都是自己獨立解決了問題,沒有閱讀別人論文中的細節和他們的研究成果,我覺得自己解決問題更有意思,更有挑戰性。
老實說,真沒想到這篇文章會受到巨大的關注,完全在意料之外。這一切始於我在一篇Hacker News中發佈的一條評論,然後被一個著名的開發工程師注意到了。然後,我的Twitter消息就炸了。
不管怎樣,希望這篇文章對大家有所幫助,謝謝!

原文來自: https://www.linuxprobe.com/safety-on-fingers.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章