2016 年の初日、Mozilla は Firefox Web ブラウザーの SHA-1 と呼ばれる弱体化セキュリティ技術のサポートを終了しました。一部の古い Web サイトへのアクセスが遮断されるため、ほぼ即座に決定を撤回しました。しかし、2017 年 2 月、彼らの懸念はついに現実になりました。研究者たちは 、初めて現実世界の衝突攻撃 を作成することで SHA-1 を破りました。それが何を意味するかは次のとおりです。
SHA-1とは何ですか?
SHA-1 の SHA は Secure Hash Algorithm の略で、簡単に言えば、入力されたデータをスクランブルする一種の数学問題または手法と考えることができます。これは米国 NSA によって開発され、インターネット上の重要な通信の暗号化に使用される多くの技術の中核コンポーネントです。一般的な暗号化方式 SSL と TLS は聞いたことがあるかもしれませんが、SHA-1 などのハッシュ関数を使用して、ブラウザのツールバーに表示される署名付き証明書を作成できます。
SHA 関数の数学とコンピューター サイエンスについては詳しく説明しませんが、基本的な考え方は次のとおりです。 「ハッシュ」は 、任意のデータの入力に基づく一意のコード です。 SHA-1 のようなハッシュ関数に入力された小さくてランダムな文字列であっても、長い設定された数の文字が返されるため、文字列を元のデータに戻すことが (潜在的に) 不可能になります。これが通常、パスワードの保存方法です。パスワードを作成すると、パスワード入力はサーバーによってハッシュ化されて保存されます。戻ってパスワードを入力すると、パスワードが再度ハッシュされます。元のハッシュと一致する場合、入力は同じであるとみなされ、データへのアクセスが許可されます。
ハッシュ関数が役立つのは、主に、入力 (ファイルやパスワードなど) が変更されたかどうかを簡単に判断できるためです。入力データがパスワードのように機密である場合、ハッシュを元に戻して元のデータ (「キー」とも呼ばれる) を復元することはほぼ不可能です。これは、暗号と秘密鍵を使用して、 後でスクランブルを解除する目的でデータをスクランブルすることを目的とする 「暗号化」とは少し異なります。ハッシュは単にデータの整合性を確保すること、つまりすべてが同じであることを確認することを目的としています。オープン ソース コードのバージョン管理および配布ソフトウェアである Git は、 まさにこの理由から SHA-1 ハッシュを使用します 。
これには多くの技術情報がありますが、簡単に言うと、ハッシュは ファイルが変更されたかどうかを識別するために使用される ため、暗号化と同じものではありません。
このテクノロジーは私にどのような影響を与えますか?
Web サイトにプライベートでアクセスする必要があるとします。銀行、電子メール、Facebook アカウントさえも、送信するデータのプライバシーを守るために暗号化を使用しています。専門的な Web サイトは、信頼できる機関 (つまり、暗号化が Web サイトとユーザーの間でプライベートなレベルで行われ、他の当事者によってスパイされていないことを保証する信頼できる第三者) から証明書を取得することによって暗号化を提供します。すべてのユーザーが「自己署名」証明書を作成できるため、 認証局 ( CA ) と呼ばれるサードパーティとのこの関係は非常に重要です。Open SSL を備えた Linux を実行しているマシン上で自分で作成すること もできます。たとえば、Symantec と Digicert は広く知られている CA 企業です。
理論的なシナリオを見てみましょう。How-To Geek は、ログインしているユーザーのセッションを暗号化してプライベートに保ちたいため、Symantec などの CA に 証明書署名要求 ( CSR) を申請します。インターネット上で送信されるデータを暗号化および復号化するための 公開キー と 秘密キー を作成します。 CSR リクエストは、Web サイトに関する情報とともに公開キーをシマンテックに送信します。データにわずかな変更があるとハッシュが大幅に異なるため、シマンテックはキーをそのレコードと照合して、すべての関係者によってデータが変更されていないことを確認します。
これらの公開キーとデジタル証明書はハッシュ関数によって署名されます。これは、これらの関数の出力が簡単に確認できるためです。公開鍵と、権威であるシマンテック (この例では) からの検証済みハッシュを含む証明書により、How-To Geek のユーザーは、鍵が変更されておらず、悪意のある人物から送信されたものではないことが保証されます。
ハッシュは監視が簡単で、元に戻すのは不可能(「難しい」という人もいます)であるため、正しく検証されたハッシュ署名は、証明書と接続が信頼でき、データがエンドツーエンドで暗号化されて送信されることに同意できることを意味します。 。しかし、ハッシュが実際には一意ではなかったらどうなるでしょうか?
コリジョン攻撃とは何ですか? 現実世界でも可能ですか?
数学の「誕生日問題」 については聞いたことがあるかもしれませんが、それが何と呼ばれるかは知らなかったかもしれません。基本的な考え方は、十分な人数のグループを集めれば、2 人以上が同じ誕生日を持つ可能性が非常に高いということです。実際、予想よりも高かったので、奇妙な偶然のように思えます。 23 人という小さなグループの場合、2 人が同じ誕生日になる確率は 50% です。
これは、SHA-1 を含むすべてのハッシュに固有の弱点です。理論的には、SHA 関数は、入力されたデータに対して一意のハッシュを作成する必要がありますが、ハッシュの数が増えると、異なるデータのペアが同じハッシュを作成する可能性が高くなります。したがって、信頼できる証明書と同じハッシュを持つ信頼できない証明書を作成することができます。信頼できない証明書をインストールさせると、信頼できる証明書になりすまし、悪意のあるデータが配布される可能性があります。
2 つのファイル内で一致するハッシュを見つけることは、 衝突攻撃と 呼ばれます 。少なくとも 1 件の大規模な衝突攻撃が MD5 ハッシュに対してすでに発生していることが知られています。しかし、2017 年 2 月 27 日、Google は SHA-1 向けに初めて作成された衝突である SHAttered を発表しました。 Google は、コンテンツが異なるにもかかわらず、別の PDF ファイルと同じ SHA-1 ハッシュを持つ PDF ファイルを作成できました。
SHattered は PDF ファイルに対して実行されました。 PDF は比較的自由度の高いファイル形式です。読者がファイルを開くことを妨げたり、目に見える違いを引き起こすことなく、多くの小さなビットレベルの変更を加えることができます。 PDF はマルウェアの配信にもよく使用されます。 SHAttered は ISO などの他のタイプのファイルに対して動作する可能性がありますが、証明書は厳密に指定されているため、そのような攻撃は起こりそうにありません。
では、この攻撃はどれほど簡単に実行できるのでしょうか? SHAttered は、2012 年に Marc Stevens によって発見された 手法 に基づいています。この手法では、2^60.3 (9.223 京) を超える驚異的な数の SHA-1 操作が必要でした。ただし、この方法でも、総当たりで同じ結果を達成するために必要な操作よりも 100,000 分の 1 の操作が必要です。 Google は、110 枚のハイエンド グラフィック カードを並行して動作させた場合、衝突が発生するまでに約 1 年かかることを発見しました。このコンピューティング時間を Amazon AWS から借りると約 110,000 ドルかかります。コンピューター部品の価格が下がり、より少ない電力でより多くの電力を手に入れることができるようになると、SHAttered のような攻撃が簡単に実行できるようになることに留意してください。
110,000 ドルは高額に思えるかもしれませんが、一部の組織にとっては手頃な金額の範囲内です。つまり、現実のサイバー犯罪者がデジタル文書の署名を偽造したり、Git や SVN などのバックアップおよびバージョン管理システムを妨害したり、悪意のある Linux ISO を出現させたりする可能性があることを意味します。正当な。
幸いなことに、このような攻撃を防ぐ緩和要因があります。 SHA-1 がデジタル署名に使用されることはほとんどありません。認証局は SHA-1 で署名された証明書を提供しなくなり、Chrome と Firefox は両方とも SHA-1 のサポートを終了しました。 Linux ディストリビューションは通常、1 年に 1 回よりも頻繁にリリースされるため、攻撃者が悪意のあるバージョンを作成し、同じ SHA-1 ハッシュを持つようにパディングされたバージョンを生成することは現実的ではありません。
一方で、SHAttered に基づいた攻撃の一部はすでに現実世界で発生しています。 SVN バージョン管理システムは、SHA-1 を使用してファイルを区別します。同一の SHA-1 ハッシュを持つ 2 つの PDF を SVN リポジトリにアップロードすると、SVN リポジトリが 破損します 。
SHA-1 攻撃から身を守るにはどうすればよいですか?
一般的なユーザーができることはそれほど多くありません。チェックサムを使用してファイルを比較する場合は、SHA-1 や MD5 ではなく SHA-2 (SHA-256) または SHA-3 を使用する必要があります。同様に、開発者の場合は、SHA-2、SHA-3、または bcrypt などのより最新のハッシュ アルゴリズムを必ず使用してください。 SHAttered が 2 つの異なるファイルに同じハッシュを与えるために使用されているのではないかと心配な場合は、Google が SHAttered サイト でチェックできるツールをリリースしました。
画像クレジット: Lego Firefox 、 Lots of Hash 、Web 作者不明、 Google を 傷つけないでください。





