日本語

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

パスワードをプレーンな SHA-256 ハッシュとして保存してはいけない理由

· なぜそれが重要なのか

パスワード セキュリティ 暗号化

瞬時の推測を示すストップウォッチと、意図的な遅延を追加するパスワード ハッシュ関数
オリジナル ToolAcre ベクトル イラスト

SHA-256 は高速になるように設計されていますが、これはまさにパスワードには望ましくないことです。この投稿では、速度が問題となる理由と、パスワード ハッシュ関数の動作の違いについて説明します。

SHA-256 はパスワードの保存場所ではありません。それは高速ハッシュです。プレーン SHA-256 は、攻撃者に同じ速度で推測を提供するため、暗号的に強力なアルゴリズムであるにもかかわらず、不適切です。

開発者はログイン システムを実装し、パスワードを SHA-256 ハッシュとして保存します。このアルゴリズムは暗号的に強力であり、アプリケーションはソルトを適用せず、コードをシンプルに保ちます。ユーザーがログインすると、アプリケーションは送信内容をハッシュし、保存されている値と比較します。このデザインはシンプルさの点でエレガントですが、パスワードの保管にはまったく適していません。これは理論的な懸念ではありません。これは、認証システムにおいて最も一般的な重大な間違いです。盗まれたデータを攻撃者がどのように利用できるかを考慮するまでは、この設計は防御可能であるように見えます。

欠陥は、SHA-256 が弱いということではありません。 SHA-256 は、セキュリティ コミュニティによって信頼され、業界全体で整合性チェックとコンテンツ アドレス指定に使用されている堅牢な暗号化アルゴリズムです。欠点は、SHA-256 が高速であることですが、高速とはパスワードに必要なものとはまったく逆です。パスワード ハッシュは単なる暗号化プリミティブではありません。これは、特定の問題、つまり推測に対する防御のために設計された特定の種類のツールです。速度はチェックサムの特徴です。パスワードに関しては大惨事です。

SHA-256 のポイントは高速です — 整合性チェックには速度が必要ですが、攻撃者は推測に対しても同じ速度を得ることができます。

SHA-256 パスワード ハッシュのデータベースが侵害された場合、攻撃者はハッシュを元に戻す必要はありません。攻撃者は、「password」、「123456」、「hello」などの一般的なパスワードやその他数百万もの辞書を作成します。各候補は SHA-256 (計算上簡単な操作) でハッシュされ、盗まれたデータベースと照合されます。攻撃者は、ログイン サービスで使用されるのと同じ高速プリミティブを使用して候補 SHA-256 値を計算し、レート制限なしでオフラインで各結果を比較できます。正確な速度はハードウェアと実装に依存するため、この記事では意図的に 1 秒あたりの推測数や侵害時間について主張しません。

速度がすべての問題です。 SHA-256 は高速であることを目的としています。それがその設計意図です。これにより、待ち時間なしでダウンロード チェックサムを検証し、コンテンツ アドレスを計算し、マークル ツリーを構築できます。これらのアプリケーションでは、速度が特徴です。パスワードの場合、速度は致命的です。パスワード データベースが盗まれ、SHA-256 でハッシュされると、攻撃者は正規のサーバーが検証するのと同じ速度で推測します。この対称性がパスワードのセキュリティを破る原因となります。正規のサーバーと攻撃者の両方が高速の汎用ダイジェストの恩恵を受けます。アプリケーションのログイン制御なしでオフラインでそれを繰り返すことができるのは攻撃者だけです。

ディクショナリとレインボー テーブル — ソルトされていないハッシュに対する事前計算、およびソルトによって何が変わるか

ここで、事前計算された辞書が実用的になります。攻撃者は、1 日をかけて、最も一般的な 1,000 個のパスワード、Name1990 のような一般的なパターン、または複数の言語の辞書全体に対して SHA-256 ハッシュを計算できます。結果として得られるテーブルはレインボー テーブルと呼ばれます。盗まれた SHA-256 ハッシュを事前計算されたテーブルに対して検索することは瞬時に行われます。事前に計算されたテーブルがなくても、GPU アクセラレーションによるハッシュを使用すれば、10 億の推測を計算することは簡単です。攻撃者にとっての計算コストは​​非常に低いため、弱いパスワードであっても数分で解決されます。

ToolAcre SHA ハッシュ計算ツールは、この速度を直接示します。短いテキストを貼り付け、SHA-256 ボタンをクリックすると、結果が即座に表示されます。その瞬時の結果、つまりハッシュ計算機で賞賛されるプロパティは、プレーンな SHA-256 をパスワードとして防御できないものにするまさにプロパティです。攻撃者は、すべての推測に対して同じ即時結果を取得します。チェックサムと整合性チェックに関しては、その速度は完璧です。パスワードの場合、セキュリティにとって致命的です。

パスワード ハッシュ関数によって追加されるもの — bcrypt、scrypt、Argon2、および PBKDF2 の作業係数、メモリ強度、およびユーザーごとのソルト

ソルトはハッシュ化する前にパスワードに追加されるランダムな値であるため、各ユーザーのソルトは異なります。 2 人のユーザーが同じパスワードを持っている場合でも、異なる値にハッシュされます。これにより、事前に計算されたレインボー テーブルが壊れます。攻撃者はソルトごとにテーブルを個別に計算する必要があります。ユーザーごとに独立して生成されたソルトを使用すると、事前計算された 1 つのテーブルがすべてのアカウントに変更せずに適用されなくなります。ただし、ソルトは攻撃者に事前ではなく攻撃中にテーブルの計算を促すだけです。ハッシュが依然として高速な場合、攻撃者は単純にさらに多くのテーブルを並行して計算し、高速なプリミティブを使用して各アカウントの推測を続けます。塩は必要ですが十分ではありません。これにより、被害者間での辞書の再利用が防止されますが、攻撃者の中核となる操作である推測が遅くなるわけではありません。ハッシュの速度は依然として推測の速度です。

の実際の例 — 一般的なパスワードの SHA-256 と調整されたパスワード ハッシュの認識速度を定性的に説明

パスワード ハッシュ関数は異なるアプローチを採用します。 Bcrypt、scrypt、Argon2id、および PBKDF2 は、パスワード検証専用に構築されています。これらにはすべて、作業要因、つまりハッシュを意図的に高価にするパラメータが含まれています。 Argon2 が最も最新です。 CPU 時間とメモリ消費量の両方を調整します。 Bcrypt は、増加するたびに作業を 2 倍にする調整可能なコスト係数を使用します。それらのすべてに塩生成機能が組み込まれています。これらのツールは、攻撃者モデルを念頭に置いて設計されています。仕事の要素は非常に重要です。

パスワード ハッシュ関数により、設定されたコストがすべての検証の一部になります。候補者をテストしたい攻撃者は、推測するたびにそのコストも支払わなければなりません。具体的なタイミングをデプロイメント間で安全にコピーすることはできないため、パラメータに関するセクションではハードウェアの実際の製品クラスでのベンチマークが必要です。この非対称性がパスワードのハッシュ化を機能させるのです。仕事の要素は「攻撃側の優位」から「防御側の優位」に移行します。

従来の SHA-256 テーブルの移行 — 既存のハッシュをラップし、次回のログイン時に再ハッシュする

このリポジトリには特定のパスワード関数または攻撃者に対するベンチマークが含まれていないため、作業済みの比較は定性的なままです。共通のパスワードでは、毎回同じプレーンな SHA-256 が即座に生成されるため、既存の辞書エントリはそれを等価性によって識別できます。調整されたパスワード レコードには独自のソルトとコストのパラメーターが含まれており、候補ごとに構成された作業が必要です。

このコントラストにより、1 秒あたりの推測を約束することなく設計エラーが確立されます。ハードウェア、実装、および選択されたパラメータがタイミングを決定します。擁護可能な結論は不変です。汎用ダイジェストには調整可能な作業係数やメモリ コストがありませんが、パスワード ハッシュ関数は特にこれらのコストを課すために選択されます。

これでカバーされないもの — 特定のパスワード ハッシュのパラメータの選択(ハードウェアと脅威モデルに応じて異なります)

パラメータの選択は、意図的にこの計算ツールとこの記事の外にあります。正しい設定は、サーバーのレイテンシ バジェット、利用可能なメモリ、同時実行性、および現在の脅威モデルに依存するため、無関係なデプロイメントから固定値をコピーすると、安全制御が伝説に変わってしまいます。選択したパスワード機能を実稼働クラスのハードウェアでベンチマークし、容量の変更に応じて再検討します。

ToolAcre はその演習を実行できません。そのパネルはテキストと SHA 識別子を受け入れ、プレーン ダイジェストを返します。ソルト フィールド、メモリ設定、反復制御、パスワード レコード形式は公開されません。この欠如は有用な境界信号であり、テキスト ボックスでパスワードを繰り返しハッシュすることで回避できる機能が欠落しているわけではありません。

要点: 即座の結果は警告です。ToolAcre SHA ハッシュ計算ツールは SHA-256 がどれほど速いかを示します。そのため、ユーザーのパスワードを保持してはならないのです。

パスワードをプレーンな SHA-256 として保存していたレガシー システムは、すべてのユーザーがすぐにリセットする必要がなくても移行できます。この手法は、古いハッシュを「ラップ」することです。SHA-256 値を取得し、Argon2 で再度ハッシュします。ユーザーの次回のログイン時に、システムは古い SHA-256 が一致するかどうかをチェックします。そうであれば、その結果に対して Argon2 を計算し、ラップされたバージョンを保存します。次回ユーザーがログインすると、システムは Argon2 に対して直接検証します。移行は通常のログイン フロー中に透過的に行われます。

このラップされたアプローチにより、侵害された古いパスワードが作業要素によって保護されるようになります。 SHA-256 ハッシュの古いデータベースを使用する攻撃者は、もはやそれらを単純に解読することはできません。彼らは、Argon2 のコストを含むラップされたバージョンを攻撃する必要があります。移行は、通常のログイン フロー中にユーザーに対して透過的に行われます。ログインするたびに、ユーザー エクスペリエンスを中断することなくハッシュを強化する機会が生まれます。正しい作業係数の選択は、ハードウェアと脅威モデルによって異なります。 Argon2 のデフォルトは賢明です: Web サービスの 19 反復、512 MB メモリ、および 1 並列処理。