保存済みハッシュ値の読解
ある Web アプリケーションの旧システムでは,利用者のパスワードを SHA-256 で変換したハッシュ値(16 進表記)を利用者表に保存している。利用者表の一部は次のとおりであった。この表について述べたものとして,適切なものはどれか。
user_id password_hash
alice b56a1d6e76eae78dea550da30f7b298087d0108d016b844e0b555f6517b1cdaa
bob 76d7c4b2d4dd90d3484032dbbe3b4ee520854c26efcc47aeb5e5cd9974bdb1cf
carol c564887ad487e61ed61bdec10224263dffbf3ceddf3eddfaf0b18bcf10c381cd
dave c564887ad487e61ed61bdec10224263dffbf3ceddf3eddfaf0b18bcf10c381cd- アcarol と dave の値の一致は,異なるパスワードから同じハッシュ値が得られる衝突によるものと考えられ,2 人のパスワードは異なる可能性が高い。
- イ全利用者に共通の秘密値(ペッパー)を組み合わせて計算し直せば,同じパスワードを使う利用者どうしでも値が異なるようになり,この一致は解消できる。
- ウcarol と dave の値の一致から,利用者ごとのソルトを付けずに計算していると分かる。事前計算した表による解析も全員の値に一度に適用できる。
- エSHA-256 は一方向性をもつので,この表が漏えいしても,攻撃者が推測したパスワードのハッシュ値と照合してパスワードを特定することはできない。
正解と解説を見る
正解 ウ
この問題の基礎知識
- 暗号学的ハッシュ関数は,同じ入力からは常に同じ値を出力する。ハッシュ値から入力を求めることや,同じ値になる異なる二つの入力を見つけること(衝突の発見)が計算量的に困難になるよう設計されている。
- ソルトは利用者ごとに異なる値で,パスワードと組み合わせてハッシュ化し,ハッシュ値と一緒に保存する。ペッパーは全パスワードに共通の秘密値で,データベースとは別の場所に保管する。
- 保存値が漏えいすると,攻撃者は候補のパスワードをハッシュ化して保存値と照合する攻撃をオフラインで試せる。レインボーテーブルは,この計算を事前に済ませた表を使って効率化する手法である。
アcarol と dave の値の一致は,異なるパスワードから同じハッシュ値が得られる衝突によるものと考えられ,2 人のパスワードは異なる可能性が高い。
SHA-256 は,同じハッシュ値となる二つの異なる入力を見つけることが計算量的に困難になるよう設計されている。値が完全に一致していれば,ハッシュ関数への入力が同じ,つまり 2 人が同じパスワードを使っていると考えるのが妥当である。
イ全利用者に共通の秘密値(ペッパー)を組み合わせて計算し直せば,同じパスワードを使う利用者どうしでも値が異なるようになり,この一致は解消できる。
ペッパーは利用者ごとに異なるソルトとは違い,保存する全パスワードで共通の値である。同じパスワードに同じペッパーを組み合わせれば値は同じになるので,一致は解消しない。一致をなくすのは利用者ごとに異なるソルトである。
ウcarol と dave の値の一致から,利用者ごとのソルトを付けずに計算していると分かる。事前計算した表による解析も全員の値に一度に適用できる。正解
利用者ごとに異なるソルトを付けていれば,同じパスワードでも値は異なる。一致はソルトがないことを示し,攻撃者は解読せずに同じパスワードの利用者を特定でき,レインボーテーブルなどの事前計算や一度の計算結果を全員の値との照合に使える。
エSHA-256 は一方向性をもつので,この表が漏えいしても,攻撃者が推測したパスワードのハッシュ値と照合してパスワードを特定することはできない。
一方向性はハッシュ値から入力を逆算することを困難にするが,推測したパスワードを変換して保存値と比べる攻撃は防げない。SHA-256 は高速なため大量の推測を短時間で試せるので,パスワードの保存には Argon2id や bcrypt などの低速な方式が推奨される。
検証用の出典出典照合済み
OWASP Password Storage Cheat Sheet / NIST FIPS 180-4 Secure Hash Standard (SHS)照合の根拠(8 件)
- ウ(正解): 利用者ごとのソルトがあれば同じパスワードでも値は異なるので,値の一致はソルトが無いことを示す
Finally, salting means that it is impossible to determine whether two users have the same password without cracking the hashes, as the different salts will result in different hashes even if the passwords are the same.
OWASP Password Storage Cheat Sheet · Salting(新しいタブで開きます) - ウ(正解): ソルトが無ければ一度の計算結果を全員の保存値との照合に使える
As the salt is unique for every user, an attacker has to crack hashes one at a time using the respective salt rather than calculating a hash once and comparing it against every stored hash.
OWASP Password Storage Cheat Sheet · Salting(新しいタブで開きます) - ウ(正解): ソルトが無いとレインボーテーブルなどの事前計算による解析を受ける
Salting also protects against an attacker's pre-computing hashes using rainbow tables or database-based lookups.
OWASP Password Storage Cheat Sheet · Salting(新しいタブで開きます) - イ(誤り): ペッパーは全パスワードで共通なので,同じパスワードなら値は同じままで一致は解消しない
A pepper is shared between stored passwords , rather than being unique to an individual password like a password salt.
OWASP Password Storage Cheat Sheet · Peppering(新しいタブで開きます) - ア(誤り): SHA-256 では同じダイジェストになる異なる二つのメッセージを見つけることが計算量的に困難であり,一致は同じ入力によると考えるのが妥当
it is computationally infeasible 1) to find a message that corresponds to a given message digest, or 2) to find two different messages that produce the same message digest.
NIST FIPS 180-4 · Announcement, 3. Explanation(新しいタブで開きます) - エ(誤り): SHA-256 のような高速なハッシュは大量の推測を短時間で試せるので,パスワードの保存に適さない
Fast hashing algorithms such as SHA‑256 are not suitable for password storage because they allow attackers to perform large numbers of guesses quickly.
OWASP Password Storage Cheat Sheet · Introduction(新しいタブで開きます) - エ(誤り): 推測したパスワードのハッシュ値を保存値と比べて一致すればパスワードが分かる(一方向性では防げない)
Comparing the hash you calculated to the hash of the victim. If they match, you have correctly "cracked" the hash and now know the plaintext value of their password.
OWASP Password Storage Cheat Sheet · When Password Hashes Can Be Cracked(新しいタブで開きます) - 資料: SHA-256 の出力は 256 ビット(16 進表記で 64 桁)
256-bit message digest of the message, M, is
NIST FIPS 180-4 · Section 6.2.2(新しいタブで開きます)
資料の 4 つの値はすべて 64 桁の 16 進数(256 ビット)で,carol と dave の値が完全に一致し,ほかの値は互いに異なることを確認した。