日本語

開発者ツール · SHA ハッシュ計算ツール

衝突、プリイメージ、および 2 番目のプリイメージ: 3 つのハッシュ セキュリティ目標

· 背景

しゃ-256 暗号化 セキュリティ

プリイメージ耐性、第 2 プリイメージ耐性、および衝突耐性を示す 3 つの図
オリジナル ToolAcre ベクトル イラスト

アドバイザリーには、アルゴリズムに衝突の問題があるため、使用が影響を受けるかどうかを知る必要があると記載されています。この投稿では、3 つの耐性プロパティを定義し、どのユースケースがどれに依存するかを示し、それらを SHA-1 に適用します。

私の使用には影響がありますか? — 勧告が直接答えることはほとんどない質問

SHA-1 に衝突の問題があるため、システムをアップグレードする必要があるという通知が届きました。しかし、システムが SHA-1 をメッセージの認証ではなくキーの導出のみに使用している場合はどうなるでしょうか? SHA-1 が、信頼性を証明するためではなく、同一のファイルを重複排除するためにのみ使用される場合はどうなるでしょうか? 「私のシステムは影響を受けていますか?」という質問実際にハッシュ関数のどのプロパティが壊れているのか、また、ユースケースがどのようなプロパティに依存しているのかを理解しなければ、答えることはできません。

ハッシュ関数は、プリイメージ耐性、第 2 プリイメージ耐性、および衝突耐性といった複数のセキュリティ プロパティを提供します。あるプロパティが壊れても別のプロパティが壊れることはなく、一部のユースケースは安全なままのプロパティにのみ依存します。 ToolAcre SHA ハッシュ計算ツールは、アルゴリズムとそのダイジェスト幅、各セキュリティ目標の境界を決定するプロパティを表示します。これらのプロパティを理解することは、アドバイザリがシステムに影響を与えるかどうかを判断するための最初のステップです。

プリイメージ抵抗 — ハッシュが与えられた場合、それを生成する入力が見つからない

プリイメージ耐性とは、ダイジェストが与えられた場合、そのダイジェストを生成する入力を見つけることが不可能であることを意味します。パスワードのハッシュを受け取り、そのパスワードを推測したいとします。これはプリイメージ攻撃です。 2 番目のプリイメージ耐性は、メッセージとそのハッシュが与えられた場合、同じハッシュを持つ別のメッセージを見つけることが不可能であることを意味します。ダウンロードしたファイルとその SHA-256 チェックサムがあります。攻撃者は、そのファイルを同じハッシュを持つ別のファイルと交換しようとします。これは 2 回目のプリイメージ攻撃です。

衝突耐性とは、同じハッシュを持つ 2 つの異なるメッセージを見つけることが不可能であることを意味します。あなたは文書に署名しています。攻撃者は同じ署名を持つ別のドキュメントを作成しようとします。これは衝突攻撃です。これら 3 つのシナリオでは、攻撃者に必要な作業量が異なり、セキュリティ境界も異なります。前像耐性は最も強力な特性であり、壊れることはほとんどありません。ダイジェストが与えられた場合、プリイメージを見つけるには、可能な入力の空間を総当たり的に検索する必要があります。ダイジェスト幅は一般的な検索スペースに影響しますが、この記事では操作数を導出して攻撃モデルを定義するまでは述べていません。

2 番目のプリイメージ抵抗 — 入力が与えられた場合、同じハッシュを持つ別の入力を見つけることはできません

2 番目のプリイメージ耐性は次に強力であり、単独で壊れることもほとんどありません。メッセージとそのハッシュが与えられた場合、同じハッシュを持つ別のメッセージを見つけるには、ダイジェスト サイズの指数関数的な作業も必要になります。 2 番目のプリイメージ検索と衝突検索では、攻撃者にさまざまな選択肢が与えられるため、それらの一般的な境界は交換可能ではありません。ここでは定性的な区別で十分です。インライン導出がなければ数値限界はアサートされません。ブルートフォースを必要としない構造的攻撃がある場合、アルゴリズムは 2 番目のプリイメージ耐性を失います。

耐衝突性は 3 つの特性の中で最も弱く、最も頻繁に破損したり曲がったりする特性です。他の 2 つの目標とは異なり、衝突検索では攻撃者が両方の入力を選択できるため、異なる一般的な境界が存在します。この記事では、誕生日限定の数字とハードウェア タイムラインを意図的に省略しています。これは、それらの導出とソースが検証済みの資料の範囲外であるためです。

衝突耐性 — 同じハッシュを持つ 2 つの入力が見つかりません。これが 3 つの入力の中で最も弱い理由

3 つのセキュリティ プロパティをユース ケースにマッピングすると、各タスクにどのプロパティが必要かがわかります。重複排除は、2 つのファイルが同じハッシュを持つ場合、それらは同じファイルであるという前提に基づいています。これには衝突耐性が必要です。衝突の可能性がある場合、攻撃者は同じハッシュを持つ 2 つの異なるファイルを作成し、重複排除の不変条件を破ることができます。ただし、理論的には衝突が可能であっても、実際の衝突は非常にまれであるため、これは弱い要件です。

デジタル署名には、強力な形式での衝突耐性が必要です。署名者が文書のハッシュの署名を作成し、後で検証者がその署名をチェックする場合、両者は同じハッシュをチェックする必要があります。衝突が容易な場合、攻撃者は署名された文書との衝突を見つけて、別の文書の署名を偽造する可能性があります。これは、証明書の SHA-1 から SHA-256 へのアップグレードを引き起こした攻撃です。 CA によって署名された証明書と、同じ署名を持つ偽造証明書は、ハッシュに衝突がある場合、両方とも検証に合格します。

衝突耐性はプリイメージの目標とは異なります。誕生日に限定された数字は導出なしでは表示されません

コンテンツ アドレス ストレージは、検索キーとしてハッシュを使用します。ファイルがそのハッシュによって決定された場所に保存され、後で同じハッシュを使用して取得される場合、2 つの操作は同じファイルに到達する必要があります。これには、アクティブな攻撃者がいる場合には衝突耐性が必要ですが、攻撃者が受動的である場合には、2 番目のプリイメージ耐性のみが必要です。受動的な攻撃者は衝突を引き起こすことができません。正当なファイルが偶然に衝突するかどうかを観察することしかできません。

ダウンロード検証では、チェックサムを使用して、インターネットから取得したファイルが破損していないことを確認します。チェックサムは通常、信頼できるソースからファイルと一緒に公開されます。ダウンロードしたファイルを変更する攻撃者は、信頼できるソースにアクセスしないとチェックサムを更新できません。この使用例では、2 番目のプリイメージ耐性が必要です。元のファイルとそのチェックサムが与えられた場合、攻撃者は同じチェックサムを持つ別のファイルを作成できません。 SHA-1 番目のプリイメージ抵抗は、衝突が中断されたにもかかわらず依然として堅固です。

整合性と命名規則を必須プロパティにマッピングします。プレーン ハッシュはパスワードの保存場所ではありません

パスワード ストレージは、ハッシュ関数が適切なツールではない 1 つの使用例です。パスワードが SHA-256 ハッシュとして保存されており、ハッシュ データベースが漏洩した場合、攻撃者は辞書攻撃を実行できます。つまり、何百万もの推測をハッシュし、保存されているハッシュと一致するものがあるかどうかを確認します。攻撃者が必要とするのはパスワードごとに 1 つのプリイメージだけであり、高速関数により、攻撃者はアプリケーション レート制限のない効率的なオフライン比較ループを利用できます。

パスワードには、Argon2id、scrypt、または bcrypt など、意図的に遅く、メモリに負荷がかかる、ユーザーごとのソルト関数が必要です。ユーザーごとに固有のソルトにより、同一のパスワードでも異なる保存レコードが生成されますが、パスワード機能に設定されたメモリと時間のコストにより、各候補のコストが意図的に高くなります。正確なパラメータにはローカルのベンチマークが必要ですが、ここでは規定しません。 ToolAcre SHA ハッシュ計算ツールはパスワード ハッシュを実行しません。ガイド ドキュメントには、SHA-256 がこの使用例に適さない理由が説明されています。

実用的な例 — Git リポジトリの SHA-1 と証明書の SHA-1 へのマッピングの適用

動作する例: Git リポジトリ内の SHA-1。すべての Git コミットには、オブジェクト ID として SHA-1 ハッシュがあります。 SHA-1 衝突耐性が壊れている場合、Git リポジトリは脆弱ですか?答えは「おそらく」です。攻撃者は、既存のコミットと同じ SHA-1 を持つコミットを作成し、それをリポジトリ サーバーにプッシュし、その後、異なるクライアントに異なるコミットを提供する可能性があります。ただし、これには特定のターゲットを選択して衝突を計算する必要があり、SHA-1 が壊れていてもコストがかかります。

Git プロジェクトのメンバーは、SHA-256 に移行するためのロードマップを公開していますが、実際の攻撃には衝突技術とサーバー侵害の両方が必要であるため、緊急性は中程度です。 「Git リポジトリのセキュリティは SHA-1 衝突耐性に依存していますか?」という開発者の質問に対して。答えは「はい」ですが、実際のリスクは他のセキュリティ脅威に比べて低いです。 ToolAcre SHA ハッシュ計算ツールは、適切にラベル付けされた SHA-1 と SHA-256 の両方を提供するため、開発者はどちらかを計算して違いを理解できます。

要点: パニックになる前にプロパティに名前を付けてください — ToolAcre SHA ハッシュ計算ツールを使用すると、各アルゴリズムの境界を設定するダイジェスト長を確認できます

SHA-1 を使用するシステムの場合、アップグレードするかどうかは、ユースケースで壊れている特定のプロパティが必要かどうかによって決まります。ユースケースがデジタル署名またはアクティブな攻撃者に対する重複排除である場合、衝突耐性が必要であり、SHA-1 は壊れているため、すぐに SHA-256 にアップグレードしてください。ユースケースがコンテンツアドレス指定のストレージまたはチェックサムである場合、2 番目のプリイメージ耐性が必要であり、その目的では SHA-1 が依然として安全ですが、将来の保証のために SHA-256 が推奨されます。

ユースケースがキー導出またはパスワード検証である場合、プリイメージ耐性が必要ですが、キー導出には高速な関数の方が適しているため、このツールキットの何も使用しないでください。 ToolAcre SHA ハッシュ計算ツールを使用すると、開発者はダイジェストを計算し、実際のプロパティを確認できます。これら 3 つのプロパティを理解し、それらをユースケースに適合させることは、実際のシステムで安全な暗号を選択するための基礎となります。