説明
SHA-2やSHA-3のような高速なハッシュ関数は、衝突耐性があってもパスワードの保存には適していません。計算コストが低いため、オフラインでパスワード候補を試す攻撃が容易になります。
想定される影響
- パスワード解析のコスト低下
- 漏えいしたハッシュからパスワードを特定される可能性の増大
- アカウントの乗っ取りや認証の回避
対処方法
- パスワードには、Argon2id、bcrypt、scrypt、PBKDF2などの専用アルゴリズムを使います。
- 一般的な完全性検証のハッシュ処理と、パスワードの保存処理を分けます。
- ソルトには安全な乱数を使い、計算コストのパラメーターは環境に合わせて設定します。方針は定期的に見直してください。
例
変更前
swift
let passwordHash = SHA512.hash(data: passwordData)
変更後
swift
let result = try Argon2Swift.hashPasswordString(password: password, salt: salt)
説明:
- 変更前: SHA-512は高速な汎用ハッシュであり、パスワードの保存には適していません。
- 変更後: パスワード専用のハッシュアルゴリズムにより、オフラインでの推測攻撃のコストを高めます。