

キーボードで入力したキーを検出されれば、パスワードを解析されるなどの被害に遭いかねません。PCのマイクを使ってキータイピングの音を検出し、リアルタイムで入力キーを予測するソフト「kbd-audio」がGitHubで公開されています。



GitHub - ggerganov/kbd-audio: Tools for capturing and analysing keyboard input paired with microphone capture

https://github.com/ggerganov/kbd-audio



kbd-audioは機械学習によってキー入力の音を学習することで、入力したキーをリアルタイムで推測するソフトです。キーボード入力の音を拾えるマイクが備わったPCであれば、キーを予測できます。kbd-audioではブラウザで利用できる「Live demo」版も公開されているので、さっそく試してみました。





kbd-audioはWebAssemblyのThreadsが有効化されている必要があるので、Live demoのためにブラウザは「Google Chrome Canary」を使いました。



まず、WebAssemblyのThreadsを有効にするために、Chrome Canaryのアドレスバーに「chrome://flags/#enable-webassembly-threads」と入力して、ハイライトのあたった「WebAssembly threads support.」を「Enabled」に変更してブラウザを再起動します。





次に、以下のLive demoページを開きます。



Keytap: acoustic keyboard eavesdropping | C++ and stuff

https://ggerganov.github.io/jekyll/update/2018/11/24/keytap.html



マイクの使用許可を求められるので、「許可」をクリック。





WebAssembly Threadsを有効化するまで表示されていなかった「Demo」のウィンドウが表示されていればOKです。





kbd-audioでキー入力を予測するには、最初にタイプ音を学習させる必要があります。キーは一つずつしっかりと音が出るようにして入力していき、ほとんどのキーを押し終えたら「Predict」をクリック。





なお、キー入力中に、Demoウインドウ下の「Standard output」にログが表示されて入ればキー音を取得できています。反応がない場合はキー音を認識できていないので、マイクの設定などを見直す必要があります。





入力されたデータを使ってトレーニング作業が行われるので、しばらく待ちます。





Demoウインドウに、仮想キーボードが表示されたらテスト可能な状態になります。





試しにキーボードでキー入力すると、仮想キーボード上で候補となるキーが緑色で反応します。いくつかある候補の中で、キーが赤色表示されているものが最も可能性の高い「予想」のようです。





なお、「Main」の下には、検出された音の波形が表示されています。





入力するキーによって波形が微妙に違うため、ここから入力されたキーを予測している模様。





肝心の精度はというと、キー入力を認識できないことも多く、うまく認識した場合でもキーをズバリ正解させる頻度はそれほど高くありませんでした。テストで使ったのがノートPC(レッツノートCF-SZ6) であり、パンタグラフタイプのキーボードなのでそれほどキー入力音が大きくないことや、Live Demo起動時に冷却ファンがうなりをあげてしまい音を拾うことが難しくなること、周囲の騒音もゼロではないことなど、環境による要因もあるかもしれません。



環境次第では以下のようなキー入力推測も可能になるようです。



Detect pressed keys via microphone audio capture in real-time. Uses training data captured by typing first. Very neat!https://t.co/fIVbftye7D



Based on ideas in this classic traffic analysis paper: Timing Analysis of Keystrokes and Timing Attacks on SSH https://t.co/9r3gLRZIDg pic.twitter.com/IIWij54jlK

Detect pressed keys via microphone audio capture in real-time. Uses training data captured by typing first. Very neat!https://t.co/fIVbftye7D



Based on ideas in this classic traffic analysis paper: Timing Analysis of Keystrokes and Timing Attacks on SSH https://t.co/9r3gLRZIDg pic.twitter.com/IIWij54jlK — Feross (@feross) 2018年11月29日

(@feross) 2018年11月29日