キーストロークの全体像:基本定義から生体認証・セキュリティ対策・フォレンジックまで

キーストロークとは — 基本定義

「キーストローク(keystroke)」は、キーボード上のキーを押す(押下)および離す(離鍵)という一連の操作を指す用語です。一般には「1 回のキー入力動作」を意味しますが、技術的にはキーの押下(keydown)・押し続け(hold)・離鍵(keyup)など複数の状態を含むことが多く、時間的な特徴(例:押下時間、キー間時間)も重要な要素になります。

キーストロークの技術的要素

  • 物理レイヤー(スイッチとマトリクス)

    ほとんどのキーボードはキーごとにスイッチを持ち、スキャンマトリクス(行列配線)を通じてどのキーが押されたかを検出します。スイッチは機械式、メンブレン、静電容量式などがあり、アクチュエーション(反応するストローク深さ)、トラベル(総移動量)、作動荷重(押下に必要な力)などの特性が異なります。

  • デバウンス(チャタリング対策)

    物理スイッチは接点の跳ね返り(チャタリング)を起こすため、ハードウェアまたはファームウェアでデバウンス処理を行い、短時間の重複信号を無効化して安定したキーストローク判定を行います。

  • スキャンコードとプロトコル

    キー入力はスキャンコード(物理キーに対応するコード)として送られます。古い PS/2、現在主流の USB HID(Human Interface Device)などのプロトコルがあり、USB HID では標準の使用テーブル(HID Usage Tables)に従ってキーが報告されます。

  • イベントモデル(OS・ブラウザ)

    オペレーティングシステムやブラウザは低レイヤーのスキャンコードを解釈して高レベルのイベント(keydown、keyup、かつての keypress)を生成します。ウェブでは DOM の KeyboardEvent(.key、.code、以前は .keyCode)があり、挙動はブラウザやロケールに依存します(.keyCode は非推奨)。

  • ロールオーバーとゴースティング

    複数キー同時押し時の認識能力は「N キーロールオーバー(NKRO)」で示されます。マトリクス設計次第では同時押しで別のキーが誤検出される「ゴースティング(ghosting)」が起こることがあります。

測定と指標 — WPM、KPM、ホールドタイムなど

キーストロークに関する計測指標は用途により異なります。タイピング速度を評価する指標としては WPM(words per minute)や KPM(keys per minute)が一般的です。セキュリティや生体認証で重要になるのは時間的特徴で、代表的なものは次の通りです:

  • ホールドタイム(Dwell time):あるキーを押してから離すまでの時間。
  • フライトタイム(Flight time / Inter-key latency):あるキーの離鍵から次のキーの押下までの時間(または隣接キー間の押下差)。
  • エラー率・修正パターン:バックスペースの使用頻度や修正方法の傾向。

キーストローク・ダイナミクス(生体認証)

キーストローク・ダイナミクスは、ユーザごとのタイピング習慣を特徴量として用いる生体認証技術です。ホールドタイムやフライトタイム、キーの組み合わせごとの統計的特徴を用い、機械学習や統計モデルで本人かどうかを判定します。利点はソフトウェアのみで導入できる点や非侵襲性ですが、環境や入力機器、入力内容の違いで精度が変動します。重要な研究例には Monrose & Rubin(1997)やその後の多数の比較研究があります。

セキュリティとプライバシー:キーロガーと攻撃手法

キーストロークは機密情報(パスワード、クレジット番号等)と直結するため、攻撃対象になります。主な手法:

  • ソフトウェアキーロガー:マルウェアとして動作し、ユーザ空間やカーネル空間でキーストロークを傍受して送信・保存します。
  • ハードウェアキーロガー:USB コネクタ間に挟むデバイスやキーボード内部に仕込む小型装置。
  • ファームウェア攻撃(BadUSB 等):キーボード等のファームウェアを書き換えることで、正規デバイスが攻撃者のインジェクション装置になるケースがあります。
  • 無線傍受:無線キーボードの通信が暗号化されていない場合や脆弱である場合、信号を復号/再構成してキー入力を取得できることがあります。

対策としてはアンチマルウェア、USB ポート管理、ファームウェアの更新、通信暗号化、2要素認証の導入など複合的な防御が求められます。オンスクリーンキーボードや入力マスキングは一部のキーロガーを回避できますが、スクリーンキャプチャ型や API フック型には無効な場合があります。

法的・倫理的観点

無断で他者のキーストロークを記録する行為は多くの国で不正アクセスやプライバシー侵害、通信の秘密の侵害などに該当する可能性が高く、刑事罰や民事責任が生じます。組織内での監視目的でのキーストローク記録は、労働法や個人情報保護法に基づく明確な根拠と被監視者の通知・同意が必要です。

開発者向けの注意点(Web と OS)

  • Web 開発:JavaScript の KeyboardEvent でキー入力を扱う際は .key(生成される文字)と .code(物理キー)を用途に応じて使い分けます。.keyCode は非推奨で互換性のために残っています。キーイベントはユーザのロケールや入力メソッド(IME)に左右されるため、国際化に注意が必要です。MDN のドキュメントを参照してください。
  • 排他制御とアクセシビリティ:キーボードだけで操作するユーザや支援技術(スクリーンリーダー)を考慮して、キーボードフォーカス管理や適切なキー割り当てを行うべきです。
  • ログ記録時の配慮:キーストロークをログに残す場合、個人情報保護・暗号化・保持期間の最小化・アクセス制御など厳格なポリシーが必要です。

モバイル・ソフトキーボードの違い

スマートフォンやタブレットのソフトキーボードでは、物理スイッチがないため「キーストローク」は画面タップやスワイプに相当します。予測変換やキーリマップ、入力方式(フリック、スワイプ入力)により、時間特性やパターンは物理キーボードと大きく異なります。さらに、ソフトウェアキーボードはアプリ側からアクセスされ得るため、入力プライバシーのリスクも異なる点に注意が必要です。

フォレンジックと監査での利用

システムフォレンジックではキーストロークの痕跡(キーボードドライバのログ、アプリケーションログ、ネットワーク送信ログ、あるいはハードウェアキーロガーの保存領域)が重要な証拠になります。タイムスタンプ付きのキーストロークデータは行為の再構成や不正操作の証明に役立ちますが、改ざん防止や収集プロセスの適正性(チェーン・オブ・カストディ)確保が不可欠です。

実務上の推奨対策

  • 重要認証時は多要素認証(MFA)を必須にする。
  • キーロギングを検出するための EDR(Endpoint Detection and Response)やアンチウイルスを導入する。
  • USB デバイスの管理とファームウェア更新を徹底する(BadUSB 対策)。
  • ログや入力データの収集は最小限にし、暗号化とアクセス制御を厳格にする。
  • 開発者は KeyboardEvent の仕様や国際化、アクセシビリティ対応を学び、テストを行う。

まとめ

キーストロークは単なる「キーを押す行為」以上の意味を持ち、ハードウェア設計、プロトコル、OS/アプリのイベント処理、タイピングの統計的特徴、セキュリティ・プライバシーの観点など多面的に理解する必要があります。特に個人認証や侵害検出、フォレンジクスの領域では、キーストロークの時間的特徴が重要な情報源となる一方で、漏洩や不正取得が重大なリスクを生むため、技術的・組織的な対策が求められます。

参考文献