本文會講解一些關於keytap工具的技術細節。我也會分享一些本身關於這個項目的幾點想法。這個項目已經開源,源碼在這裏能夠下載。 |
描述算法
該工具的主要目標是利用敲擊鍵盤時產生的聲音做爲一種邊信道攻擊來猜想輸入文本的內容。爲了達到這個目標,該算法以訓練集做爲輸入,這個訓練集包括音頻記錄和記錄期間你敲了哪些鍵盤按鍵。經過這些數據,該算法能夠學習到不一樣按鍵敲擊的聲音,以後就能夠經過捕獲的音頻來嘗試識別敲鍵盤的聲音。訓練數據集的收集很是具體,採集收據的根據也就是鍵盤、麥克風還有二者之間的相對位置。任何因素髮生了變化,這個方法就變得毫無心義了。不過好在,當前的方法能夠進行實時預測。
這個方法涉及到的主要步驟以下:安全
收集訓練數據 建立預測模型,不斷學習 檢測到鍵盤輸入 預測具體的每個輸入鍵
收集訓練數據網絡
這個收集訓練數據的方法已經忽略了兩次鍵盤敲擊之間的聲音。咱們只保留實際按鍵前和按鍵後75-100ms的音頻。這樣作可能會有點不太精確,由於鍵盤敲擊的延遲時間是隨機的,程序捕獲這種事件,也會受到硬件和軟件因素的影響。
舉個例子,下圖是敲擊我鍵盤上的字母「g」的完整聲波:
從圖中能夠看到,在按鍵峯值以後,還有一個釋放按鍵的峯值。而keytap直接忽略了這個釋放峯值。這個可能會提取到額外的信息,不過爲了簡單起見,釋放峯值的這個數據就直接放棄不用了。因此,最終字母「g」這個按鍵的訓練數據聲波圖以下:
固然,這個75ms的間隙對打字速度有必定的限制,若是在這個時間段內,按鍵有重疊的話,不一樣按鍵的訓練數據就會混雜在一塊兒。
從上圖中還能夠觀察到一點就是某個按鍵的訓練聲波圖越多越好,結合多個聲波圖,能夠幫助減小環境噪音。並且,每一個人按鍵的聲音可能稍有不一樣,這就取決於用戶按鍵的方式了。因此,你可能會捕獲到某個按鍵的不一樣的聲音。機器學習
建立預測模型工具
這時候就體現出人們的非凡創造性了,能夠經過機器學習,人工智能和神經網絡等技術來建立預測模型。不過keytap使用了最簡單的一種辦法。對於每個訓練按鍵,咱們執行如下3個步驟:
1.對齊收集到的波形峯值。這有助於避免檢測按鍵以前的隨機延遲時間,前面解釋過了。
2.基於類似性度量來優化聲波的對齊方式,由於有時候,聲波的峯值並非最佳指標,因此咱們要選擇一個更加精確的方法。
3.對其波形進行簡單加權平均。權重由類似性度量定義。
咱們並無直接跳到步驟2,而是要先執行第一步,由於類似性度量的計算是很吃CPU的。而步驟1已經有效的縮小了對齊的範圍並減小了計算量。
步驟3以後,咱們最終會獲得每一個按鍵的平均波形。以後會將其與捕獲到的數據進行對比並預測最有可能的輸入按鍵。
keytap中使用的類似性度量是交叉相關(CC),公式以下:
這裏的Ai和Bi是被比較的兩種波形的波形樣本。CC值越高,波形越類似。固然也可使用其餘的類似性度量的測試方法。
不一樣按鍵之間間隔的計時信息其實也能夠加入到預測模型中,不過我避免了使用這種方法,由於它更加難以實現。學習
檢測鍵盤輸入測試
keytap使用相對簡單的閾值技術來檢測原始音頻中的按鍵事件。顯然,當用戶敲擊按鍵時,咱們預計會有一個很高的峯值,這也正是咱們想要的效果。閾值相對於過去幾百毫秒的樣本平均強度而言是自適應的。
這個方法並非十分完美,但我如今還不知道更有效的方法來檢測按鍵事件。優化
預測敲了哪些按鍵人工智能
一旦肯定了可能的按鍵事件,咱們就能夠定位到波形的峯值位置,計算該部分波形與訓練數據中全部平均波形的類似性度量。咱們容許在峯值附近有小範圍的調整(前面提到過)。咱們認爲類似性度量最高的將對應的是敲擊的按鍵。blog
幾點觀察
我注意到即時這個算法沒有檢測到敲擊的正確按鍵,它仍然可以預測到附近的按鍵,意思也就是定位到了正確鍵的下一個鍵。對於這個現象,我認爲有下面兩種解釋:
1.鍵盤上相鄰的按鍵發出的聲音相似
2.在這個方法中,鍵相對於麥克風的位置對預測起着決定性的做用
我認爲第一種解釋不太可能,因此極可能是第二種解釋。
另外,我還觀察到機械鍵盤比非機械鍵盤更容易遭受這種鍵盤竊聽攻擊。
keytap2
我很篤定確定有一種實現預測的方法是根本不須要收集訓練數據的。假如用戶使用某種已知語言來輸入文本,好比英語,那麼關於該語言的N元模型統計信息和按鍵檢測的類似性度量值結合起來就足夠檢測出輸入的文本了。實際上,歸根到底這其實就是破解置換密碼的一種攻擊。
keytap2嘗試着去證實這種攻擊。我也在作這方面的研究,可是我卡在了基於他們的CC公式對按鍵進行聚類分析的部分。但我認爲至少我已經準備好了置換密碼破解工做。若是在實際中破解成功的話,我將會提供更多的細節。
結束語
科學文獻上,關於這個主題的論文有不少。其中有一篇論文中的一個特別的方法給了我很大的啓發,就是Don’t Skype&Type!你們有興趣的能夠看看。但大多數狀況下,我都是本身獨立解決了問題,沒有閱讀別人論文中的細節和他們的研究成果,我以爲本身解決問題更有意思,更有挑戰性。 老實說,真沒想到這篇文章會受到巨大的關注,徹底在乎料以外。這一切始於我在一篇Hacker News中發佈的一條評論,而後被一個著名的開發工程師注意到了。而後,個人Twitter消息就炸了。 無論怎樣,但願這篇文章對你們有所幫助,謝謝!