想必你永遠(yuǎn)不會(huì)想到,有一天你也會(huì)被自己的鍵盤出賣。 對,就是你每日敲擊的鍵盤。當(dāng)指尖在鍵盤上跳躍,清脆的噼啪聲此起彼落時(shí),你輸入的所有信息,包括那些情真意切的詞句,那些不欲人知的心事,還有你的網(wǎng)絡(luò)賬戶、銀行密碼…… 全都被它泄露了。 鍵盤,還能被黑??? 前不久,一個(gè)叫做Keytap的 “黑科技” 在國外火了。Keytap 通過監(jiān)聽你敲擊鍵盤的聲音,就能還原出你輸入的內(nèi)容。 而且,只需要通過你電腦里的麥克風(fēng),就能完成聲波采集的任務(wù)。 在一段發(fā)布于網(wǎng)上的 Demo 里,Keytap 作者展示了在 iMac+Filco 機(jī)械鍵盤環(huán)境中,這個(gè)算法的優(yōu)秀程度,請看:
四步偷窺大法
搭建這樣一個(gè) “偷窺” 打字的模型并不難,Keytap 算法也已經(jīng)開源了。跟著做,只要如下四步:
一是,收集訓(xùn)練數(shù)據(jù); 二是,搭建預(yù)測模型,學(xué)習(xí)一下數(shù)據(jù); 三是,檢測出有人在敲鍵盤; 四是,檢測出 ta 在打什么字。
收集訓(xùn)練數(shù)據(jù)
Keytap 收集數(shù)據(jù)時(shí),只保留每次敲擊前后 75-100 毫秒的音頻。 這就是說,并非連續(xù)取樣,兩次敲擊之間有一部分是忽略的。 這種做法是會(huì)犧牲一些信息量的。 從敲下按鍵,到程序受到指令,這之間有隨機(jī)延時(shí),與硬件和軟件都有關(guān)系。 比如,按下 g 鍵的完整波形長這樣:
看圖像可以發(fā)現(xiàn),敲擊時(shí)出現(xiàn)了一個(gè)峰值,而再過大約 150 毫秒,又有一個(gè)按鍵被抬起的小峰值。 這樣說來,100 毫秒之外的信息也可能有用,不過這里為了簡便就忽略了。 最終,收集到的數(shù)據(jù)長這樣:
除此之外,局限性還在于,如果兩次按鍵之間相隔不久,后者落在前者的后 75 毫秒之內(nèi),那數(shù)據(jù)可能就有些混雜了。
搭個(gè)預(yù)測模型
這個(gè)部分是最能發(fā)揮創(chuàng)造力的部分。Keytap 用了一個(gè)非常簡單的方法,分為三步:
1.把收集到的波形的峰值對齊。這樣可以避免延時(shí)帶來的影響。
2.基于相似度指標(biāo) (Similarity Metric) ,更精細(xì)地對齊波形。 需要更精確的對齊方法,是因?yàn)橛袝r(shí)候峰值未必是最好的判斷依據(jù)。 那么,可不可以跳過峰值對齊呢? 之所以第 2 步之前要先做第 1 步,是因?yàn)橄嗨贫戎笜?biāo)的計(jì)算很占 CPU。而第 1 步可以有效縮小對齊窗口 (Alignment Window) ,減少計(jì)算量。
3.對齊后,做簡單加權(quán)平均。權(quán)重也是用相似度指標(biāo)來定義的。 完成第 3 步之后,每一個(gè)按鍵都會(huì)得出一個(gè)平均波形 (a Single Averaged Waveform) ,用來和實(shí)時(shí)捕捉的數(shù)據(jù)做比對。 Keytap 用的相似度指標(biāo)是互相關(guān)(Cross Correlation, CC) ,長這樣:
這里,Ai 和 Bi 都是某個(gè)按鍵的波形樣本,比對就在它們之間進(jìn)行。CC 值越高,表示兩者越相似。 當(dāng)然,也可以用其他相似度指標(biāo)來做。 順便一說,兩次按鍵之間的間隔時(shí)長,其實(shí)也可以用來預(yù)測的,但開發(fā)者怕麻煩就省略了,勇敢的少年可以去源代碼基礎(chǔ)上自行實(shí)驗(yàn)。
檢測出在敲鍵盤
平均波形和比對標(biāo)準(zhǔn)都有了,可是麥克風(fēng)實(shí)時(shí)收錄的聲音連綿不絕,該和哪一段來比對呢? 這就需要從連續(xù)的音頻里,找到敲擊鍵盤的聲音。 Keytap 用了一個(gè)非常簡單的閾值方法,在原始音頻里監(jiān)測敲擊動(dòng)作: 按下去的時(shí)候,會(huì)有一個(gè)大大的峰值,這就是偵測目標(biāo)。 不過,這個(gè)閾值不是固定的,是自適應(yīng) (Adaptive) 的:根據(jù)過去數(shù)百毫秒之內(nèi)的平均樣本強(qiáng)度來調(diào)整的。
檢測打了什么字
當(dāng)系統(tǒng)發(fā)現(xiàn)有人在敲鍵盤,就用相似度指標(biāo)來測到底按了哪個(gè)鍵,CC 值最高的就是答案。方法就像上文說的那樣。 現(xiàn)在,代碼實(shí)現(xiàn)已經(jīng)開源了,傳送門見文底。 不過,作者在博客中說,這個(gè)方法目前只有機(jī)械鍵盤適用。
“薯片間諜”
聽音識(shí)字的研究不止這一個(gè),去年一篇 Don’t Skype & Type!Acoustic Eavesdropping in Voice-Over-IP 的論文,也提出了 Skype & Type(S&T)鍵盤聲音識(shí)別算法。 和這個(gè)研究類似,根據(jù)網(wǎng)絡(luò)電話 Skepe 中傳出的打字按鍵聲音,在了解了被測者的打字風(fēng)格和設(shè)備類型后,系統(tǒng)能復(fù)原敲下了什么。
整個(gè)算法搭建過程只有三步:收集信息、數(shù)據(jù)處理與數(shù)據(jù)分類。 研究人員事先收集語音電話中鍵盤敲擊聲,將這些聲音分為兩類,即按下聲與松開回彈聲,隨后提取它們的特征。 當(dāng)聽到鍵盤聲時(shí),算法先識(shí)別設(shè)備類型,再去識(shí)別為鍵盤中的哪個(gè)鍵。和 Keytap 不同的是,S&T 也能適用于非機(jī)械鍵盤了。
研究人員表示,在預(yù)測的最可能的前 5 個(gè)字母中,包含正確字母的準(zhǔn)確率達(dá)到了 91.7%。 這篇論文發(fā)表在 ACM 亞洲計(jì)算機(jī)和通訊安全大會(huì)(ASIACCS 2017)上,地址: https://www.math.unipd.it/~dlain/papers/2017-skype.pdf 推測人類講了什么,AI 需要甚至只是一包薯片。
什么,覺得太離譜了?Naive。 MIT、微軟和 Adobe 開發(fā)的這種看似天方夜譚的算法,只需高速相機(jī)透過隔音玻璃,拍攝出薯片袋的振動(dòng),算法就會(huì)判斷說話人是男是女,甚至還原出說了什么。
研究人員表示,聲音傳播時(shí)觸碰到周圍的物體,會(huì)震動(dòng)形成一股微妙的視覺信號,肉眼無法識(shí)別,但高速相機(jī)(每秒幀數(shù) 2000~6000 FPS)可以敏銳捕捉。
除了薯片袋子,研究人員還用鋁箔、水杯甚至植物盆栽進(jìn)行了試驗(yàn),效果 “一如既往的好”。
這不是野生研究,相關(guān)論文 The Visual Microphone:Passive Recovery of Sound from Video 還登上了 2014 年的 Siggraph 計(jì)算機(jī)圖形學(xué)大會(huì)。 論文地址(注意科學(xué)前往):http://t.cn/EyZEZYI傳送門方法雖多,如果想自己動(dòng)手搞一個(gè),這些 Keytap 相關(guān)資源還是要收好: 博客地址: https://ggerganov.github.io/jekyll/update/2018/11/30/keytap-description-and-thoughts.html 代碼地址: https://github.com/ggerganov/kbd-audio Demo: https://ggerganov.github.io/jekyll/update/2018/11/24/keytap.html 噓,掩好口鼻,輕聲撤退。
責(zé)任編輯:xj
原文標(biāo)題:一個(gè)讓我感到毛骨悚然的GitHub項(xiàng)目!
文章出處:【微信公眾號:嵌入式ARM】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
-
算法
+關(guān)注
關(guān)注
23文章
4592瀏覽量
92538 -
GitHub
+關(guān)注
關(guān)注
3文章
466瀏覽量
16365
原文標(biāo)題:一個(gè)讓我感到毛骨悚然的GitHub項(xiàng)目!
文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論