用語集

パスワードハッシュ化 とは?

パスワードハッシュ化は、固有のソルトと組み合わせて、計算コストの高い一方向暗号関数をパスワードに適用し、元のパスワードを回復可能な形で保存せずに検証できる固定長ダイジェストを生成するプラクティスです。

別名: password hash, password digest

パスワードを平文で保存することは、ソフトウェア開発における最も危険なプラクティスの一つです。データベースが侵害されると、平文のパスワードはアカウント乗っ取りにすぐ使用可能です。侵害されたサービスだけでなく、ユーザーが同じパスワードを再利用している他のすべてのサービスにも。パスワードハッシュ化は、平文の保存をパスワードの試行を検証できるが元のパスワードを回復するために逆転できない不可逆ダイジェストに置き換えます。

すべてのハッシュ関数がパスワードに適しているわけではありません。SHA-256のような汎用ハッシュ関数は速すぎます。現代のGPUは毎秒数十億のSHA-256ハッシュを計算でき、ブルートフォース攻撃を簡単にします。パスワードハッシュ化アルゴリズムは意図的に遅く設計されており、各ハッシュ計算に大量のCPU時間、メモリ、またはその両方を必要とします。この遅さは、反復回数(PBKDF2)、コストファクター(bcrypt)、メモリと並列性設定(Argon2)などのパラメーターで設定可能です。

パスワードハッシュ化の進化は、防御者と攻撃者の軍拡競争を反映しています。PBKDF2(2000年)は設定可能な反復回数を追加しました。bcrypt(1999年)はGPUアクセラレーションに抵抗する固定メモリ要件を導入しました。scrypt(2009年)は設定可能なメモリ硬度を追加しました。Password Hashing Competitionの優勝者Argon2(2015年)は、調整可能なCPU時間、メモリ、および並列性を提供します。各世代は新しい攻撃能力に対応しており、選択はデプロイ環境と脅威モデルによって異なります。

Vaulted における パスワードハッシュ化 の使われ方

Vaultedはユーザーアカウントがないため、ユーザーパスワードを保存しません。ただし、パスワードハッシュ化の原則はパスフレーズ保護機能に直接活かされています。シークレットにパスフレーズを設定すると、パスワードハッシュ化アルゴリズムであるPBKDF2がパスフレーズからキーを導出するために使用されます。100,000回のPBKDF2反復による意図的な遅さにより、パスフレーズのブルートフォース推測が非現実的になり、攻撃者が暗号文とソルトを入手してもラップされたキーを保護します。