キーストロークの全体像:基本定義から生体認証・セキュリティ対策・フォレンジックまで
キーストロークとは — 基本定義
「キーストローク(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/アプリのイベント処理、タイピングの統計的特徴、セキュリティ・プライバシーの観点など多面的に理解する必要があります。特に個人認証や侵害検出、フォレンジクスの領域では、キーストロークの時間的特徴が重要な情報源となる一方で、漏洩や不正取得が重大なリスクを生むため、技術的・組織的な対策が求められます。
参考文献
- MDN Web Docs: KeyboardEvent(日本語)
- USB Implementers Forum: HID Usage Tables (HID Usage Tables for USB)
- SRLabs: BadUSB(BadUSB研究)
- Monrose, F., & Rubin, A. D. (1997) — Authentication via Keystroke Dynamics(初期研究例)
- Killourhy, K. S., & Maxion, R. A. (2009) — Keystroke dynamics comparison
- Wikipedia: キーボード(日本語) — ロールオーバーや仕組みの概説


