タイミング攻撃(Timing Attack)とは、システムや暗号化プロセスの処理時間のわずかな違いを観察・分析することで、秘密情報を推測する攻撃手法です。サイドチャネル攻撃の一種で、システムが異なる入力データに対して異なる時間をかけて処理を行う性質を利用し、その処理時間から暗号鍵やパスワードといった機密情報を推測します。タイミング攻撃は、システムの動作時間や通信ラグなど微細な時間の違いに依存するため、特に注意が必要です。
タイミング攻撃は、暗号アルゴリズムが演算時間に依存する場合に効果的で、特にRSAやAES、ECDSAなどの暗号システムで脆弱性として問題視されています。
タイミング攻撃の仕組み
タイミング攻撃は、以下の仕組みで機密情報を推測します。
- 処理時間の測定
攻撃者は、暗号化や認証プロセスに対して複数の入力を送り、その処理にかかった時間を測定します。この処理時間は入力内容によってわずかに異なることが多いため、その違いに注目します。 - データの相関分析
測定した処理時間を、攻撃対象となるデータ(例:暗号鍵のビット値や入力データ)と関連付けて分析します。たとえば、特定のビットが「1」の場合と「0」の場合で処理にかかる時間が異なると、ビットの状態が処理時間に反映されるため、この相関関係からデータを推測します。 - 統計的な推測
測定データが多いほど、攻撃者は処理時間の違いから機密情報のビット値を高精度で推測できるため、統計的な手法でデータを解析し、情報を特定します。
タイミング攻撃の実行例
以下に、タイミング攻撃が利用される代表的な例を挙げます。
1. RSA暗号へのタイミング攻撃
RSA暗号では、特定のビットの状態によって、処理に要する時間がわずかに異なる場合があります。RSAの鍵を構成するビットごとの処理時間を観察し、ビットごとの差異を統計的に分析することで、秘密鍵の推測が可能になります。
2. パスワード認証のタイミング攻撃
サーバーがパスワードを確認する際、入力された文字列を正しいパスワードと一文字ずつ比較することで、文字ごとの比較にかかる時間が異なる場合があります。この時間の違いから、パスワードの部分的な情報を特定し、パスワード全体を解明することが可能です。
3. AES暗号へのタイミング攻撃
AES暗号化処理でも、一部の実装においてタイミング攻撃の影響を受ける場合があります。たとえば、AESのキーやサブキーの計算にかかる時間がわずかに異なる場合、そのタイミングを観察することで、暗号鍵の推測につながることがあります。
タイミング攻撃のリスクと影響
タイミング攻撃が成功すると、暗号システムや認証情報が漏洩し、以下のような影響が生じる可能性があります。
- 暗号システムの脆弱化
タイミング攻撃によって暗号鍵が漏洩すると、暗号化データの解読が可能となり、システム全体のセキュリティが破られるリスクが生じます。 - 認証情報の窃取
パスワードやPINコードがタイミング攻撃で盗まれると、なりすましによる不正アクセスが可能になり、被害が拡大します。 - 不正アクセスの増加
特にWebアプリケーションにおいて、タイミング攻撃により特定のIDやパスワードの一部が漏洩すると、不正ログインや不正アクセスの可能性が大幅に増加し、システムやサービスの信頼性が損なわれます。
タイミング攻撃に対する対策
タイミング攻撃に対しては、以下の対策が有効です。
- 一定時間の処理時間を保つ
演算処理の時間を入力に依存しないように一定にすることで、処理時間から情報が漏れないようにします。たとえば、暗号化処理や認証処理を一定時間で行う設計に変更することで、タイミング攻撃のリスクを低減できます。 - ランダムな遅延の導入
処理時間にランダムな遅延を加えることで、タイミング攻撃者が観測する時間パターンを無意味にし、推測を困難にします。 - コンスタントタイムのアルゴリズムを採用
RSAやAESなどの暗号アルゴリズムの中には、コンスタントタイム(処理時間が一定になる)で動作する実装が存在します。コンスタントタイムのアルゴリズムを採用することで、タイミング攻撃への耐性が向上します。 - サイドチャネル防御の導入
タイミング攻撃はサイドチャネル攻撃の一種であるため、物理的なサイドチャネル防御を強化することで、外部からの観察を困難にします。たとえば、電磁波解析攻撃や電力解析攻撃に対する対策を合わせて実施することで、包括的な防御体制を構築できます。
まとめ
タイミング攻撃は、処理時間のわずかな差異を解析して秘密情報を推測するサイドチャネル攻撃の一種であり、暗号システムや認証システムに対する大きなリスクとなります。特にRSAやAES、パスワード認証システムなどで、処理時間が秘密情報に依存する場合に脆弱性が生じやすいです。タイミング攻撃のリスクを軽減するためには、処理時間を一定にする、ランダムな遅延を導入する、コンスタントタイムのアルゴリズムを採用するなどの対策が有効です。