例証
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/06/17 17:29 UTC 版)
冪剰余(modular exponentiation)で使用される平方乗算アルゴリズム(より詳しくはSquare-and-multiply algorithm)の実行時間は、キー内の「1」ビットの数に応じて線形に依存する。「1」ビットの数だけでは鍵の発見を容易にするのに十分な情報ではないが、同じ鍵と異なる入力で繰り返される実行では、受動的攻撃者(英語版)でさえも、タイミング情報の統計的な相関分析を実行して鍵を完全に復元することだろう。 観測されたタイミング測定には、しばしばノイズ(その源としてはネットワーク遅延や、アクセス移行によるディスクドライブアクセスの違い、伝送エラーから回復するために使用されるエラー訂正技術など)が含まれる。にもかかわらず、タイミング攻撃は、RSA暗号、ElGamal暗号、デジタル署名 アルゴリズムを含む多くの暗号化アルゴリズムに対して実用的である。 2003年にダン・ボネア(英語版)とデビット・ブラムリー(英語版)が、SSL対応のWebサーバーに対する実践的なネットワークベースのタイミング攻撃を実演し、それは中国の剰余定理最適化を伴うRSAの使用によるものとは異なる脆弱性に基づいていた。実験における実際のネットワーク距離は小さかったが、その攻撃は見事に数時間でサーバー秘密鍵を復元した。この実演は、SSL実装における幻惑技術(英語版)の普及と使用をもたらした。この文脈内で、幻惑(Blinding)とは鍵と暗号化時間との間の相関を取り除くことを意図している。 いくつかのバージョンのUnixでは、8文字のパスワードを11文字の文字列にハッシュするために、比較的高価な暗号ライブラリ関数を実装している。旧式のハードウェアでは、この算出には計測可能な程の長い時間がかかり、場合によっては2-3秒かかった。Unixの初期バージョンのログインプログラムは、システムによりログイン名が認識された場合に限り暗号関数(crypt関数)を実行した。これは、パスワードが間違っていたとしても、ログイン名の有効性に関するタイミングを通して情報漏洩となる。攻撃者は、まずブルートフォースをかけて有効だと分かったログイン名のリストを作成し、次にこれらの名前だけを、頻繁に使用されることが知られている大量のパスワードセットと組み合わせてアクセスを試みる。ログイン名の有効性に関する情報がなくても、そうしたアプローチの実行に必要とされる時間は桁違いに増加し、効果的にそれを無効状態にしていく。Unixの以後のバージョンでは、ログイン名の有効性にかかわらず、常にcrypt関数を実行することでこの漏洩を修正している。 キャッシュメモリまたは仮想メモリの両方を用いた単一のシステム上で実行されている安全に分離されたプロセスは、意図的にページフォールトおよび/またはキャッシュミスを1つのプロセスで発生させ、その結果生じるアクセス時間の変化をもう一方から監視することにより通信を可能にする。同様に、アプリケーションは信頼できるものの、そのページング/キャッシングが分岐ロジックの影響を受ける場合においては、アクセス時間の変化を監視することにより分岐条件で比較されたデータの値を決定することが、第2アプリケーションで可能となり得る。極端な例では、これが暗号鍵ビットの復元を可能にさせてしまう。 CPU製造業者(インテル、AMD、ARM、IBMを含む)にCPUの再設計を強いることになった2017年のMeltdownとSpectre攻撃は、どちらもタイミング攻撃に依拠したものである。 2018年の初頭に、世界のほぼ全てのコンピュータシステムがSpectreに襲われたが、それがタイミング攻撃の歴史上最も強力な例となっている。 以下のVisual Basicコードは、文字の不一致があると即座に検査を停止する、安全性に欠けた典型的なデータ列(string)比較を表したものである。例えば、これは "ABCDE"と "ABxDE"を比べる時に3回のループ反復後に(結果を)返すことになる。 Function InsecureCompare(StrA As String, StrB As String, length As Integer) As Boolean Dim result As Boolean For i = 1 To length If Mid(StrA, i, 1) <> Mid(StrB, i, 1) Then Exit For Next result = (i > length) InsecureCompare = resultEnd Function 比較すると、次のバージョンは全ての文字を検査し、ビット演算を使用して条件付きジャンプなしで検査することにより、一定時間で実行される。 Function SecureCompare(StrA As String, StrB As String, length As Integer) As Boolean Dim result As Boolean For i = 1 To length result = result Or (Asc(Mid(StrA, i, 1)) Xor Asc(Mid(StrB, i, 1))) Next SecureCompare = Not resultEnd Function
※この「例証」の解説は、「タイミング攻撃」の解説の一部です。
「例証」を含む「タイミング攻撃」の記事については、「タイミング攻撃」の概要を参照ください。
「例証」の例文・使い方・用例・文例
品詞の分類
- >> 「例証」を含む用語の索引
- 例証のページへのリンク