| | パスワード導出 | |
アプリケーションやデータベースがセキュリティ侵害された場合にも攻撃者がパスワードを入手できないようにパスワードを格納することが重要であり、この役割を担うのがパスワード導出アルゴリズムです。
主な導出関数は、疑似ランダム関数を使用してメインキー、パスワード、またはパスフレーズなどのシークレット値から 1 つ以上のシークレットキーを導出する、暗号学的ハッシュ関数です (出典)。これらの関数は、カスタマイズされた量のリソースおよびラウンドのセットを使用して結果に到達し、システムからの応答を遅らせることで、パスワード類推 (ブルートフォース) 攻撃から保護するように設計されています。また、一方向性関数 (ハッシュ) とソルトを使用してキーを格納することで、データベースがセキュリティ侵害された場合でも、プレーンテキストのキーが格納場所から取得されないようにします。
Argon2 は、2015 年に開催されたパスワードハッシュ競技会で優勝したアルゴリズムです。適切に設定すると、bcrypt や scrypt よりもパスワードクラッキング耐性に優れています (CPU と RAM の使用率について同様の設定パラメーターを使用)。このアルゴリズムには 3 つのバージョンがあり、利用可能な場合は Argon2id バリアントを使用する必要があります。Argon2id は、サイドチャネル攻撃と GPU ベース攻撃の両方に対して、バランスのとれたアプローチで抵抗します。
Argon2 には設定可能なパラメーターが 3 つあるため、環境に合わせて正しく調整するのがより複雑になります。適切に調整するのが難しい場合は、bcrypt など、よりシンプルなアルゴリズムを推奨します。Argon2 の詳細については、適切なパラメーターを選択するためのガイダンスを参照してください。
bcrypt は最も広くサポートされているアルゴリズムです。PBKDF2 や scrypt の使用が必要とされる場合や、Argon2 を調整するのに必要な知識がある場合以外は、bcrypt を使用してください。bcrypt は scrypt より前に提供されたアルゴリズムで、ASIC 攻撃や GPU 攻撃に対する耐性が低くなります。反復回数を設定可能ですが、コンスタントメモリーを使用します。そのため、ハードウェアアクセラレーションによるパスワードクラッカーをビルドするほうが簡単です。
bcrypt の詳細については、『A Future-Adaptable Password Scheme』および bcrypt アルゴリズムを参照してください。
scrypt 関数は、アルゴリズムのリソース需要を上げることで攻撃を防ぎます。このアルゴリズムは、ほかのパスワードベースのキー導出関数よりも大量のメモリーを使用するように設計されています。ハードウェア実装の規模が大きくなり、コストも増大するため、一定量の財務リソースに対して、攻撃者が利用できる並列処理の量が制限されます。適切に設定された scrypt は非常に安全なキー導出関数と考えられており、キー導出アルゴリズムの汎用パスワードとして使用できます (ウォレット、ファイル、アプリケーションのパスワードを暗号化する場合など)。
警告: scrypt パスワード導出関数は、キー導出には安心して使用できますが、パスワードのハッシュ処理 (格納) には安全ではありません。暗号通貨で幅広く使われているため、GPU (または ASIC) の総当たり攻撃に対して脆弱です。
scrypt の詳細については、RFC7914 を参照してください。
いかなる場合でも、セキュリティを高めるため、自動化されていないメソッド (Captcha など) を使用することを推奨します。
Password Storage Cheat Sheet (パスワードストレージに関するチートシート) (OWASP)
Recommendation for Password-Based Key Derivation (パスワードベースのキー導出に関する推奨事項) (NIST)
GeneXusCryptography Module のパスワード導出
|
|
|
|
|