Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【Node.js24.x】Object::hkdf()メソッドの使い方

hkdfメソッドの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

hkdfメソッドは、HMACベース鍵導出関数(HKDF)を実行するメソッドです。このメソッドは、安全でない、または長さが不足している可能性のある鍵の元となるデータ(鍵材料)から、暗号化やデジタル署名などのセキュリティ操作に利用できる、強力で安全な新しい鍵を生成することを主な目的としています。

HKDFは「抽出(Extract)」と「拡張(Expand)」という二段階のプロセスを通じて鍵を導出します。最初の「抽出」段階では、提供された鍵材料と、オプションで指定されるソルト(salt)と呼ばれる補助的なデータを用いて、擬似ランダム鍵(PRK)と呼ばれる高品質な中間鍵を生成します。ソルトを使用することで、同じ鍵材料が使用されても異なるPRKが生成される可能性が高まり、セキュリティが向上します。

次に「拡張」段階では、このPRKと、オプションで指定されるアプリケーション固有の情報(info)を用いて、必要な長さの最終的な出力鍵を導出します。infoは、同じPRKから複数の異なる目的の鍵を生成する際に、それらが互いに独立性を保つことを保証するために役立ちます。

このメソッドは、例えばユーザーのパスワードから暗号化鍵を安全に派生させたり、通信プロトコル内でセッションごとに異なる秘密鍵を生成したりする際に非常に有用です。Node.jsのcryptoモジュールを通じて提供されており、使用するハッシュアルゴリズム、鍵材料、ソルト、情報、および導出したい鍵の長さを指定することで利用できます。HKDFを使用することで、鍵管理のベストプラクティスに沿った、より堅牢なセキュリティシステムを構築することが可能になります。

構文(syntax)

1const crypto = require('node:crypto');
2
3async function deriveKey() {
4  const ikm = Buffer.from('initial-key-material-here'); // 入力鍵マテリアル
5  const salt = Buffer.from('salt-value-here');           // ソルト値
6  const info = Buffer.from('context-info-here');         // コンテキスト情報
7  const keylen = 32;                                     // 派生する鍵の長さ (バイト単位)
8
9  try {
10    const derivedKey = await crypto.promises.hkdf(
11      'sha256', // 使用するハッシュアルゴリズム (例: 'sha256', 'sha512')
12      ikm,
13      salt,
14      info,
15      keylen
16    );
17    console.log(derivedKey.toString('hex'));
18  } catch (error) {
19    console.error(error);
20  }
21}
22
23deriveKey();

引数(parameters)

digest, ikm, salt, info, keylen, callback

  • digest: string: ハッシュアルゴリズムの種類を指定します(例: 'sha256', 'sha512')。
  • ikm: Buffer | string: 鍵拡張の元となる鍵マテリアルを指定します。
  • salt: Buffer | string:salt値を指定します。省略可能です。
  • info: Buffer | string: コンテキスト情報となるデータを指定します。省略可能です。
  • keylen: number: 拡張したい鍵の長さをバイト単位で指定します。
  • callback: Function: 鍵拡張処理が完了した際に呼び出されるコールバック関数です。

戻り値(return)

戻り値なし

戻り値はありません

関連コンテンツ

関連プログラミング言語