輸密碼時(shí)一定要靜音!Github上有黑客通過麥克風(fēng)盜取密碼
Github 搜: "ggerganov/kbd-audio"
該項(xiàng)目的原理
主要目標(biāo)是利用按鍵盤按鍵作為副聲道產(chǎn)生的聲音,以便猜測(cè)所鍵入文本的內(nèi)容。為此,該算法將包含音頻記錄的訓(xùn)練集以及在該記錄期間鍵入的相應(yīng)鍵作為輸入。使用此數(shù)據(jù),算法可 了解不同按鍵的聲音是什么,然后嘗試僅使用捕獲的音頻來識(shí)別聲音。從某種意義上講,該訓(xùn)練集是針對(duì)特定的設(shè)置的-鍵盤,麥克風(fēng)和二者之間的相對(duì)位置。更改這些因素中的任何一個(gè)都會(huì)使該方法無效。另外,當(dāng)前的實(shí)現(xiàn)可以實(shí)時(shí)進(jìn)行預(yù)測(cè)。
實(shí)施中涉及的主要步驟如下:
- 收集培訓(xùn)數(shù)據(jù)
- 創(chuàng)建預(yù)測(cè)模型(學(xué)習(xí)步驟)
- 按鍵檢測(cè)
- 預(yù)測(cè)檢測(cè)到的按鍵的按鍵
收集培訓(xùn)數(shù)據(jù)
在當(dāng)前的實(shí)現(xiàn)中,擊鍵之間的聲音被簡單地丟棄。在實(shí)際按下之前和之后,我們僅將音頻保持在75-100毫秒之內(nèi)。這有點(diǎn)棘手,因?yàn)榘存I和程序捕獲的事件之間似乎存在隨機(jī)延遲-最有可能涉及硬件和軟件因素。
例如,這是在鍵盤上按字母“ g”的完整音頻波形如下所示:
從圖中可以看出,在壓力峰值之后不久還有一個(gè)附加的釋放峰值。Keytap只是忽略發(fā)布峰值。這里可能有可能提取其他信息,但是為了簡單起見,數(shù)據(jù)被丟棄。最后,此鍵的訓(xùn)練數(shù)據(jù)如下所示:
顯然,75 ms的窗口對(duì)鍵入速度施加了一定的限制-如果在此時(shí)間段內(nèi)擊鍵重疊,則會(huì)混入不同鍵的訓(xùn)練數(shù)據(jù)。
另一個(gè)觀察結(jié)果是,某個(gè)鍵的可用訓(xùn)練波形越多-越好。組合多個(gè)波形有助于減輕環(huán)境噪聲。此外,根據(jù)用戶按下按鍵的方式,各個(gè)按鍵的聽起來可能略有不同,因此可能會(huì)捕獲各種按鍵可能發(fā)出的聲音。
創(chuàng)建預(yù)測(cè)模型
人們可以在這里獲得很大的創(chuàng)造力-機(jī)器學(xué)習(xí),人工智能,神經(jīng)網(wǎng)絡(luò)等。Keytap 使用非常簡單的方法。對(duì)于每個(gè)培訓(xùn)密鑰,我們執(zhí)行3個(gè)步驟:
- 對(duì)齊收集的波形的峰值。這有助于避免在檢測(cè)到按鍵事件之前進(jìn)行隨機(jī)的時(shí)間延遲(前面已說明)。
- 基于相似性度量的波形更精細(xì)的對(duì)齊。有時(shí),峰值并不是最好的指標(biāo),因此我們使用更精確的方法。
- 對(duì)齊波形的簡單加權(quán)平均。權(quán)重由相似性度量標(biāo)準(zhǔn)定義。
我們不希望直接應(yīng)用步驟2,因?yàn)橄嗨贫戎笜?biāo)的計(jì)算可能會(huì)占用大量CPU資源。因此,步驟1有效地縮小了對(duì)齊窗口的范圍并減少了計(jì)算量。
在第3步之后,我們?yōu)槊總€(gè)鍵最終得到一個(gè)平均波形。稍后將其與實(shí)時(shí)捕獲的數(shù)據(jù)進(jìn)行比較,并用于預(yù)測(cè)最可能的密鑰。
按鍵過程中使用的相似性指標(biāo)是互相關(guān)(CC):
在此,Ai和Bi是被比較的兩個(gè)波形的波形樣本。較高的CC值對(duì)應(yīng)于多個(gè)相似的波形。也可以使用其他相似性度量。
按鍵之間間隔的時(shí)間信息可能會(huì)集成到預(yù)測(cè)模型中。到目前為止,我已經(jīng)避免了這樣的方法,因?yàn)樗鼈兒茈y實(shí)施。
按鍵檢測(cè)
Keytap使用相對(duì)簡單的閾值技術(shù)來檢測(cè)原始音頻中的按鍵事件。顯然,我們希望用戶按下按鍵時(shí)會(huì)出現(xiàn)一個(gè)巨大的峰值,所以這就是我們想要的。該閾值是自適應(yīng)的-它相對(duì)于過去幾百毫秒的平均樣本強(qiáng)度而言。
這種方法絕對(duì)不是完美的,我希望我知道如何做出更可靠的方法來檢測(cè)新聞事件。我也不喜歡與當(dāng)前閾值處理技術(shù)相關(guān)聯(lián)的free參數(shù)。
預(yù)測(cè)檢測(cè)到的按鍵的按鍵
一旦識(shí)別出潛在的按鍵事件,我們就可以確定波形中峰值的位置,并計(jì)算該部分波形與訓(xùn)練數(shù)據(jù)中所有平均波形的相似性度量。我們?cè)试S在峰周圍有一個(gè)小的對(duì)齊窗口(如前所述)。我們期望最高相似性度量將對(duì)應(yīng)于所鍵入的密鑰。
一些觀察
我注意到,當(dāng)算法無法檢測(cè)到正確的密鑰時(shí),它仍會(huì)預(yù)測(cè)附近的密鑰。鄰近,因?yàn)樗挥谡骅€匙旁邊。為此,我可以想到2種解釋:
- 鍵盤上的附近按鍵會(huì)發(fā)出類似的聲音
- 在這種方法中,按鍵相對(duì)于麥克風(fēng)的位置對(duì)于預(yù)測(cè)非常重要
我認(rèn)為選項(xiàng)1不太可能。
另一個(gè)觀察結(jié)果是,與非機(jī)械鍵盤相比,機(jī)械鍵盤更容易受到此類攻擊。
按鍵2
我很確定可以實(shí)現(xiàn)一種根本不需要收集訓(xùn)練數(shù)據(jù)的預(yù)測(cè)方法。假設(shè)用戶以某種已知語言(例如英語)鍵入文本,則與該語言的N-gram有關(guān)的統(tǒng)計(jì)信息與檢測(cè)到的按鍵的相似性度量結(jié)合起來足以檢測(cè)出正在鍵入的文本。實(shí)際上,它歸結(jié)為打破替代密碼。
Keytap2是嘗試演示這種攻擊的一種嘗試。我仍在努力-我停留在根據(jù)其CC對(duì)按鍵進(jìn)行聚類的部分。但是我認(rèn)為至少我已經(jīng)準(zhǔn)備好了替代密碼破解部分。在實(shí)際工作時(shí)會(huì)嘗試提供更多詳細(xì)信息。