PBKDF2・HKDF 鍵導出
PBKDF2 または HKDF でパスワードやシークレットから鍵を導出し、ソルト・反復回数または info ラベル・ハッシュ・出力長を選んで、16 進数または base64 でブラウザー内で読み取れます。
PBKDF2・HKDF 鍵導出 — PBKDF2 でパスワードを引き伸ばして鍵にしたり、HKDF で高エントロピーのシークレットを名前付きサブ鍵に展開したり、すべて端末から出ることなく行えます。ハッシュを選び、ソルトと反復回数(PBKDF2)または info ラベル(HKDF)を設定し、必要な出力ビット数を指定して、導出した鍵を 16 進数または base64 でコピーします。すべてのバイトはネイティブの Web Crypto API(crypto.subtle.deriveBits)でローカルに計算されるため、パスワードやシークレットがサーバーに触れることはありません。
PBKDF2・HKDF 鍵導出とは?
PBKDF2・HKDF 鍵導出は、開発者が最もよく使う 2 つの鍵導出関数を実行する無料のブラウザー内ツールです。PBKDF2(パスワードベース鍵導出関数 2)は HMAC を何千回も繰り返すことで総当たり攻撃を意図的に遅くし、人間のパスワードとソルトを固定長の鍵に変換します。HKDF(HMAC ベース鍵導出関数)は、すでに十分なエントロピーを持つシークレットを受け取り、info ラベルを使って文脈に結び付いた 1 つ以上のサブ鍵に展開します。これは 1 つのマスターシークレットから暗号化用と認証用の別々の鍵を導出するのに最適です。バックエンドエンジニア、セキュリティレビュアー、ログインや暗号化コードを書く人が、テストベクターの検証、サーバーの導出処理の再現、単発タスク用の鍵生成に使います。上部の PBKDF2/HKDF トグルでアルゴリズムを切り替え、SHA-256・SHA-384・SHA-512・SHA-1 を選び、出力長をビット単位で設定し、結果を 16 進数または base64 で読み取ります。
PBKDF2・HKDF 鍵導出の使い方
- 上部のトグルで PBKDF2 か HKDF を選び、コードやテストベクターが使う関数に合わせます。
- 「パスワード/シークレット」欄にパスワード(PBKDF2)か高エントロピーのシークレット(HKDF)を入力または貼り付け、続いてソルトを入力します。
- PBKDF2 では反復回数を、HKDF では鍵を文脈に結び付ける任意の info ラベルを設定します。
- ハッシュ(SHA-256・SHA-384・SHA-512・SHA-1)と出力長(ビット)を選びます。
- 16 進数 / base64 トグルを必要なエンコードに切り替え、コピーボタンで導出した鍵をコピーします。
使用例
PBKDF2 — パスワードから 256 ビットの鍵
入力
シークレット: correct horse battery staple ソルト: a1b2c3d4 ハッシュ: SHA-256, 反復: 100000, ビット: 256
出力
同じパスワード・ソルト・ハッシュ・反復回数なら再現できる 64 文字の 16 進数文字列(32 バイト)
HKDF — マスターシークレットから文脈に結び付いたサブ鍵
入力
シークレット: 9f8e7d6c…(マスター鍵) ソルト: session-2024 Info: aes-gcm-encryption ハッシュ: SHA-256, ビット: 256
出力
同じシークレットでも Info: hmac-authentication とは別の 256 ビット鍵になり、1 つのマスターから独立したサブ鍵が得られる
短い出力を base64 で
入力
ビット: 128, エンコードを base64 に切り替え
出力
導出された最初の 16 バイトをエンコードした 24 文字の base64 文字列
よくある質問
- パスワードやシークレットはどこかに送信されますか?
- いいえ。「パスワード/シークレット」・ソルト・info はブラウザー内に留まります。鍵は Web Crypto API(crypto.subtle.deriveBits)でローカルに導出され、何もサーバーにアップロード・保存されないため、ツールはオフラインで動作し、入力がページの外に出ることはありません。
- PBKDF2 と HKDF はどう使い分けますか?
- 低エントロピーの人間のパスワードから鍵を導出するときは PBKDF2 を使います。反復回数が総当たりを遅くします。すでに高エントロピーのシークレット(マスター鍵や共有シークレット)があり、info ラベルで 1 つ以上の別々のサブ鍵に展開したいときは HKDF を使います。HKDF は高速で、PBKDF2 のパスワード引き伸ばしの代わりにはなりません。
- なぜ出力長が丸められるのですか?
- Web Crypto の deriveBits はバイト単位で動作するため、ビット単位の出力長は最も近い 8 の倍数に丸められます。結果の下の統計に、実際に生成されたビット数とバイト数が表示されます。
- どのハッシュとアルゴリズムに対応していますか?
- 両方のアルゴリズムが SHA-256・SHA-384・SHA-512・SHA-1 で動作します。これらはブラウザーの Web Crypto が PBKDF2 と HKDF 向けに公開しているハッシュです。scrypt・Argon2・bcrypt はブラウザーがネイティブに実装していないため提供していません。
- 同じ入力なら常に同じ鍵になりますか?
- はい。鍵導出は決定的です。同じアルゴリズム・シークレット・ソルト・ハッシュ・出力長・反復回数(PBKDF2)または info(HKDF)なら常に同じバイトが得られるため、サーバーが導出した鍵の再現や検証に使えます。
関連ツール
AES テキスト暗号化(AES-GCM + PBKDF2)
パスフレーズから導出した鍵(PBKDF2 SHA-256)で AES-GCM によりテキストを暗号化・復号します。すべてブラウザ内で完結し、アップロードはありません。
Argon2・scrypt ハッシュ
Argon2id または scrypt でパスワードをハッシュ化し、Argon2 ハッシュとパスワードを照合します。すべてブラウザー内で動作します。
Bcrypt ハッシュ生成・検証ツール
平文から選んだコストファクターで bcrypt パスワードハッシュを生成したり、既存の bcrypt ハッシュとパスワードを照合したりを、すべてブラウザー内で行います。
BIP39 ニーモニック生成ツール
12〜24 語のランダムな BIP39 リカバリーフレーズを複数の言語で生成したり、既存のニーモニックを元のエントロピーに戻したりします。すべてブラウザー内で行われます。