情報セキュリティの基礎
パスワードの保存に、SHA-256のような高速なハッシュ関数をそのまま使うのではなく、bcryptやArgon2のような、わざと計算に時間がかかるように設計された方式を使うことが推奨される理由として正しいものはどれか。
- A計算に時間がかかる方式は出力が長いので、衝突が起きなくなるから
- B計算に時間をかけると、ハッシュ値から元のパスワードを正規の利用者だけが復元できるようになるから
- C保存されたハッシュ値が漏えいしたときに、攻撃者が候補のパスワードを1つ試すための計算も重くなり、総当たりや辞書攻撃にかかる時間が大きく増えるから
答えと解説を見る
正解:C. 保存されたハッシュ値が漏えいしたときに、攻撃者が候補のパスワードを1つ試すための計算も重くなり、総当たりや辞書攻撃にかかる時間が大きく増えるから
パスワードのハッシュ値が漏えいすると、攻撃者は手元の計算機で候補のパスワードを次々にハッシュ化して、一致するものを探せます。SHA-256のような汎用のハッシュ関数は、大量のデータを速く処理するために作られているので、GPUなどを使えば1秒あたりに膨大な数の候補を試せてしまいます。bcryptやArgon2のようなパスワードの保存のための方式は、計算の繰り返しの回数(コスト)を調整でき、1回の計算をわざと重くします。例えば1回の計算を100万倍遅くすれば、総当たりにかかる時間も100万倍になります。正規の利用者がログインするときは1回計算するだけなので、0.1秒程度の遅れなら問題になりません。Argon2は計算に多くのメモリも使うように設定でき、GPUや専用の回路で大量に並列に計算することを難しくします。どの方式でも、利用者ごとのソルトと組み合わせて使います。
- A. 計算の時間と出力の長さは関係がありません。目的は衝突を防ぐことではなく、総当たりを遅くすることです。
- B. どの方式でもハッシュ値から元のパスワードを復元することはできず、正規の利用者も入力されたパスワードを計算し直して比べるだけです。
- C. 正しい。1回の試行を重くすることで、漏えいした後の総当たりにかかる時間を大きく増やせます。