描述
該工具的主要目標是利用敲擊鍵盤時產生的聲音作為一種邊通道攻擊來猜測輸入文字的內容。為了達到這個目標,該演算法以訓練集作為輸入,這個訓練集包括音訊記錄和記錄期間你敲了哪些鍵盤按鍵。通過這些資料,該演算法可以學習到不同按鍵敲擊的聲音,之後就可以通過捕獲的音訊來嘗試識別敲鍵盤的聲音。訓練資料集的收集非常具體,採集收據的根據也就是鍵盤、麥克風還有兩者之間的相對位置。任何因素發生了變化,這個方法就變得毫無意義了。不過好在,當前的方法可以進行實時**。
這個方法涉及到的主要步驟如下:
收集訓練資料收集訓練資料這個收集訓練資料的方法已經忽略了兩次鍵盤敲擊之間的聲音。我們只保留實際按鍵前和按鍵後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公式對按鍵進行聚類分析的部分。但我認為至少我已經準備好了置換密碼破解工作。如果在實際中破解成功的話,我將會提供更多的細節。
結束語
戒指戴在不同手指上的含義
按西方人的傳統習慣來說,左手上顯示的是上帝賜給你的運氣,它是與心相關聯的,因此,將戒指戴在左手上才是有意義的!國際上比較流行的戴法 1.食指 想結婚,表示未婚 2.中指 已經在戀愛中 3.無名指 已經訂婚或結婚 4.尾指 獨身 至於右手,在傳統上也有一手戴戒指時是有意義的,就是無名指。據說戴在這裡,...
手指在螢幕上滑動,紅色的小球始終跟隨手指移動。
實現的功能 手指在螢幕上滑動,紅色的小球始終跟隨手指移動。實現的思路 1 自定義view,在ondraw中畫圓作為小球 2 重寫自定義view的ontouchevent方法,記錄觸屏座標,用新的座標重新繪製小球 3 在布局中引用自定義view布局,執行程式,實現跟隨手指移動效果。關鍵技術點 自定義v...
手指上幾乎全沒有月芽兒
甲上的健康秘密 一 什麼是半月痕 在指甲下方五分之一處,出現一條白色弧形的痕跡,這就是半月痕,也有稱之為小太陽。指甲半月痕是陰陽經脈界線,是人體精氣的代表,故也稱為健康圈。半月痕的發育,要受營養 環境 身體素質的影響,當消化吸收功能久佳時,半月痕就會模糊 減少,甚至消失。半月痕的狀況,顯示出人體健康...