Swiftのパスワードに不適切なハッシュの使用

パスワードに不適切なハッシュアルゴリズムの使用

説明

SHA-2やSHA-3のような高速なハッシュ関数は、衝突耐性があってもパスワードの保存には適していません。計算コストが低いため、オフラインでパスワード候補を試す攻撃が容易になります。

想定される影響

  • パスワード解析のコスト低下
  • 漏えいしたハッシュからパスワードを特定される可能性の増大
  • アカウントの乗っ取りや認証の回避

対処方法

  1. パスワードには、Argon2id、bcrypt、scrypt、PBKDF2などの専用アルゴリズムを使います。
  2. 一般的な完全性検証のハッシュ処理と、パスワードの保存処理を分けます。
  3. ソルトには安全な乱数を使い、計算コストのパラメーターは環境に合わせて設定します。方針は定期的に見直してください。

例

変更前

swift
let passwordHash = SHA512.hash(data: passwordData)

変更後

swift
let result = try Argon2Swift.hashPasswordString(password: password, salt: salt)

説明:

  • 変更前: SHA-512は高速な汎用ハッシュであり、パスワードの保存には適していません。
  • 変更後: パスワード専用のハッシュアルゴリズムにより、オフラインでの推測攻撃のコストを高めます。

参考資料