コンテンツへスキップ
uencoder

パスワードから KDF を使って暗号鍵を導出する

人間が覚えられるパスワードを、ソルト付きの PBKDF2、scrypt、または bcrypt で、AES や HMAC に使える固定長の鍵に変換します。

  1. 1

    パスワードはエントロピーが低く長さも不定ですが、暗号鍵には高いエントロピーと固定長が必要です。鍵導出関数(KDF)がこのギャップを埋めます。多数の反復でパスワードを引き伸ばし、レインボーテーブルを防ぐソルトを組み合わせます。

  2. 2
    PBKDF2 鍵導出 →

    パスワード、ランダムなソルト、反復回数(PBKDF2-SHA256 では 10 万〜60 万)、出力長(AES-256 なら 32 バイト)を入力します。ツールは導出鍵を hex または Base64 で出力します。

  3. 3
    scrypt 鍵導出 →

    GPU/ASIC 攻撃へのより強い防御には、メモリハードな scrypt を使います。パラメータ:N=2^16〜2^20、r=8、p=1。メモリコストにより並列総当たり攻撃が高コストになります。

  4. 4

    ソルトとパラメータ(反復回数、N/r/p)は暗号化データと共に保存してください。これらは秘密ではありません。秘密なのはパスワードだけです。同じパラメータ+ソルト+パスワードは常に同じ鍵を再現します。

よくある質問

PBKDF2 と scrypt と bcrypt のどれを使うべきですか?
ハードウェア攻撃への耐性が最も強いのは scrypt(メモリハード)です。bcrypt はパスワード保存で実績があります。PBKDF2 は FIPS 標準で広く利用可能です。鍵導出に限って言えば、scrypt または PBKDF2-SHA256 が標準的な選択です。bcrypt はパスワードハッシュ用の設計であり、鍵導出用ではありません。
なぜソルトは秘密にしなくてよいのですか?
ソルトの役割は、同じパスワードを持つ異なるユーザーが異なる鋭を得ることと、事前計算されたレインボーテーブルを無効化することです。一意でランダムであればよく、秘密である必要はありません。導出鍵または暗号文と共に保存してください。

関連ツール