日本語

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

SHA-0 から SHA-3 へ: NIST のセキュア ハッシュ標準はどのように進化したか

· 背景

しゃ-256 暗号化 ブラウザ API

SHA-0 から SHA-1、SHA-2 ファミリ、および SHA-3 までの 20 年間の進化を示すタイムライン
オリジナル ToolAcre ベクトル イラスト

SHA-1、SHA-2、SHA-3 は、起源が異なる 3 つの世代です。この投稿では、廃止された SHA-0 から Keccak の競合に至るまでセキュア ハッシュ標準を追跡し、SHA-2 が依然として優勢である理由を説明します。

数字は何を意味しますか? — SHA-256 は SHA-2 であるのに、SHA-3 はまったく別のものである理由

開発者は、SHA-1、SHA-256、および SHA-3 を見て、それらが直線的な進行であると想定します。そうではありません。数値はさまざまな状況で異なる意味を持ち、ファミリーの歴史を理解すると、SHA-256 が新しいアプリケーションにとって賢明な選択である理由、SHA-1 が広く導入されているにもかかわらずレガシーのみである理由、および SHA-3 が進化ではなく別の設計である理由が説明されます。

NIST が最初に安全なハッシュ関数を公開したとき、彼らはそれを SHA と呼び、その後 SHA-0 と呼びました。このバージョンはあまりにも短命であったため、ほとんどの開発者は聞いたこともありませんでした。 SHA-0 は、公表されていない不特定の欠陥のため、数年以内に廃止されました。この撤退はひっそりと行われ、その後のアルゴリズムにより命名上の混乱が生じました。 SHA-0 が廃止された後、NIST は SHA-1 を発行し、これが 20 年間標準となりました。

このツールは SHA-1 と SHA-2 をカバーします。詳細な SHA-0 履歴はリポジトリの証拠の外にあります

SHA-1 は、40 文字の 16 進出力を生成する 160 ビットのハッシュ関数です。これは Merkle-Damgård 構造に基づいており、圧縮関数が入力をブロックごとに処理し、状態を前方に連鎖させます。公開された時点では設計は健全であり、長年にわたって実際的な攻撃はありませんでした。しかし、2005 年に暗号解読のブレークスルーがもたらされました。 Xiaoyun Wang 率いるチームは SHA-1 に対するコリジョン攻撃を公開し、ブルート フォース アプローチよりもはるかに効率的な手法を使用すれば、同じハッシュを持つ 2 つの異なるメッセージを見つけることが可能であることを示しました。

数年後の 2017 では、SHAttered と呼ばれるチームが最初の実用的な衝突を実証しました。GPU のクラスターを使用して、同じ SHA-1 ハッシュを持つ 2 つの異なる PDF ファイルを見つけました。 2020 のフォローアップ論文では、選択プレフィックス衝突 (より危険な亜種) が手頃な価格で発生することが示されました。 SHA-1 は単に弱いだけではなくなりました。壊れていました。 SHA-1 の中断に対する対応として、SHA-224、SHA-256、SHA-384、SHA-512 の 4 つの関数ファミリーである SHA-2 が導入されました。

SHA-2 — 2000 年代初頭のファミリー (224、256、384、512、およびその後の切り詰められた 512/224 および512/256) 同じ構造上に構築

これら 4 つは異なる状態サイズと異なるブロック サイズで動作しますが、SHA-1 と同じ基本構造を使用します。 SHA-2 ファミリは、SHA-1 で大きなブレイクが起こる数年前に、2001 で公開されましたが、SHA-1 の崩壊が具体化するまで広く採用されませんでした。 SHA-256 は 256 ビットのハッシュを生成し、現在、新しいアプリケーションの標準的な選択肢となっています。 SHA-512 は 512 ビット ハッシュを生成し、32 ビット ワードではなく 64 ビット ワードで動作するため、64 ビット プロセッサでは高速になることがよくあります。

SHA-2 の命名規則が混乱の原因です。これらの関数は SHA-256、SHA-384、および SHA-512 と呼ばれ、すべて SHA-2 ファミリの一部です。誰かが SHA-2 と言うとき、それは単一のアルゴリズムではなく、設計哲学とマークル・ダムガード構造を意味します。名前内の数字は、バージョン スキームではなく、ビット単位の出力幅です。 SHA-256 は SHA-1 の更新ではありません。これは、同じフレームワークを使用する現代的なデザインですが、より優れたセキュリティ特性を備えています。

リポジトリ文書は、出典のない理論的歴史を再構築することなく、SHA-1 衝突を実証しました。

SHA-1 および SHA-2 が使用する Merkle-Damgård 構造内では、圧縮関数が入力をブロックごとに処理します。状態はあるブロックから次のブロックに引き継がれ、最終状態がダイジェストとして出力されます。 SHA-256 圧縮関数は、32 ビットの操作と 256 ビットの状態を使用するため、512 ビットのブロックを処理します。 SHA-512 圧縮関数は、64 ビットの操作と 512 ビットの状態を使用するため、1024 ビットのブロックを処理します。これらの選択はパフォーマンスと帯域幅に影響します。最新のハードウェアでは 64 ビット演算がネイティブであるため、SHA-512 の方が高速であることがよくあります。

新しいシステムの SHA-256 と SHA-512 の決定は、通常、セキュリティではなくパフォーマンス テストとスペースの制約に基づいて行われます。これは、2020 年代初頭の時点では、どちらもまだ安全であるためです。 ToolAcre SHA ハッシュ計算ツールは、SHA-256、SHA-384、SHA-512 を提供しており、読者がダイジェストを並べて比較すると、SHA-256 (64 16 進文字) と SHA-512 (128 16 進文字) の 4 文字の違いがわかります。

SHA-3 はサポートされている API の範囲外です。競争履歴はリポジトリの証拠から主張されていません

SHA-1 を置き換える動機は 2000 年代初頭までに明確になったため、NIST は SHA-3 の選択プロセスを開始しました。 NIST は、代替品を単独で設計するのではなく、暗号研究コミュニティに競争の機会を与えました。目標は、多様な設計から信頼性を得るために、マークル・ダムガード構造とは根本的に異なるハッシュ関数を選択することでした。複数のチームが提案を提出し、数年をかけてコンテストはケチャックを勝者に選びました。 Keccak はスポンジ構造であり、これまで標準で使用されていなかったハッシュ関数を構築する別の方法でした。

SHA-3 は Keccak の NIST 標準化であり、2015 で最終化されました。アルゴリズムのファミリーである SHA-2 とは異なり、SHA-3 は通常、単一のアルゴリズムと呼ばれますが、これにも複数の幅があります。 SHA-3 はまだ広く導入されていませんが、10 年近く標準であったことを考えると、これは驚くべきことです。その理由は、SHA-2 が壊れていないためです。 SHA-2 から SHA-3 にアップグレードする差し迫ったセキュリティ上の理由はありません。ブラウザの Web Crypto API は SHA-1 と SHA-2 を実装しますが、SHA-3 は実装しません。そのため、ToolAcre SHA ハッシュ計算ツールは SHA-3 を提供しません。

SHA-2 はツールのデフォルトのままです。この記事は、サポートされていない普遍的な安全性の主張を回避しています。

SHA-2 が依然としてどこにでも存在する理由は、ハッシュ アルゴリズムの選択における中心的な問題です。 SHA-2 には既知の実際的な衝突はありません。ハードウェア実装は成熟しています。すべてのプログラミング言語とプラットフォームがそれをサポートしています。システムのハッシュ アルゴリズムの変更は中断を伴います。保存されているすべてのハッシュを移行または検証のために保持する必要があり、すべての統合ポイントを更新する必要があり、新しいアルゴリズムがすべてのダウンストリーム システムで動作することを確認するためにテストを実行する必要があります。

SHA-2 がまだ安全なシステムの場合、この中断は正当化されません。新しいシステムと新しいプロトコルの場合、SHA-2 が賢明なデフォルトです。 ToolAcre SHA ハッシュ計算ツールでは、SHA-256 と SHA-512 が目立つ位置に表示されます。これらは新しいアプリケーションで使用する必要があるためです。 SHA-1 はレガシー専用としてリストされています。 SHA-384 は、完全を期すため、および特に必要なユースケースのために示されています。

これでカバーされないもの — Keccak の内部については、独自の投稿に値します

現時点では、ハッシュ標準の将来は不透明です。 SHA-3 は安全で成熟しており、SHA-2 が壊れた場合に代替手段を提供します。量子コンピューティングは、現在のすべてのハッシュ関数に長期的な脅威をもたらしますが、量子耐性のあるハッシュ関数の設計はオープンな研究領域です。 NIST は、量子攻撃に対抗することを目的としたアルゴリズムを選択するポスト量子暗号コンペティションを進行中ですが、ハッシュ関数は公開鍵システムに比べてそのコンペでは優先事項ではありません。

2020 年代の実用的なアプリケーションでは、SHA-256 が「どのハッシュを使用すべきか?」という質問に対する答えになります。整合性の検証、コンテンツのアドレス指定、およびフィンガープリンティングについては、SHA-256 が標準です。より広いダイジェストが必要なシステムの場合、通常、64 ビット ハードウェアでは SHA-512 の方が高速です。 SHA-384 は、TLS 暗号スイート仕様で最も一般的です。 SHA-1 は従来の検証専用です。 ToolAcre SHA ハッシュ計算ツールは 4 つの Web Crypto アルゴリズムすべてを提供するため、開発者はその出力を確認できます。

要点: 3 世代、1 つのファミリー名 — ToolAcre SHA ハッシュ計算ツールは、ブラウザーが提供する SHA-1 および SHA-2 アルゴリズムをカバーします

SHA の歴史を理解すると、番号と名前がその機能を意味する理由、および 1990 年代と 2000 年代に行われた選択が今日の新しいアプリケーションの動作を依然として決定している理由が明確になります。 SHA-0 は静かに廃止され、SHA-1 は実際の攻撃によって破壊されました。SHA-2 は依然として安全であり、SHA-3 は将来の堅牢性を考慮して選択された代替設計です。新しいコードでは、汎用ハッシュに SHA-256 を使用する必要があります。レガシー システムは依然として SHA-1 を使用しており、これらのシステムとの相互運用性には SHA-1 ハッシュを計算する機能が必要です。

ToolAcre SHA ハッシュ計算ツールは、この観点を具体化しています。デフォルトとして SHA-256、より幅広いオプションとして SHA-512、特定の要件に対応する SHA-384、およびレガシーとしてラベル付けされた SHA-1 を提供します。これにより、開発者に正確なツールと正確なラベル付けが提供されます。ブラウザーの Web Crypto 実装はこれらのアルゴリズムを提供し、ToolAcre はカスタム コードを配布するのではなく、その実装を直接使用します。この選択は、数十年にわたる暗号の進化と現在の実践状況を反映しています。