search

Found

info 概要

IKM・salt・info を入力し SHA-256/384/512 を選ぶと、RFC 5869 の Extract で PRK を、Expand で指定バイト長の OKM を hex 出力。鍵スケジュール検証に対応

📘 使い方

  1. IKM・salt・info を入力欄に入れる
  2. ハッシュ関数 (SHA-256/384/512) と OKM の出力バイト長を選ぶ
  3. PRK と OKM の hex 出力を読み取る

HKDF 鍵導出計算

バイト

※ 規格: RFC 5869 HKDF (Extract-then-Expand)。salt 省略時は HashLen バイトのゼロを使用

※ 出力は hex (小文字、無区切)。IKM・salt・info は UTF-8 でバイト列化

PRK = HMAC(salt, IKM) (hex)
OKM = HKDF-Expand(PRK, info, L) (hex)
コピーしました!
Article

HKDF 鍵導出計算 | RFC 5869 を Extract と Expand に分けて検証

HKDF (HMAC-based Key Derivation Function) の中間値を 2 段に分けて確認するツール。IKM・salt・info を入れて SHA-256/384/512 を選ぶと、Extract 段の PRK (擬似ランダム鍵) と Expand 段の OKM (出力鍵素材) を hex で表示する。鍵スケジュールの照合やテストベクトルの再現に使う。

💡 このツールについて

TLS 1.3 や Signal Protocol、Noise Framework の鍵スケジュールを実装すると、ライブラリが返す鍵が仕様どおりか確認したい場面が出る。HKDF は内部的に「Extract → Expand」の 2 段だが、多くのライブラリは一発の HKDF(ikm, salt, info, length) しか公開せず、中間の PRK が見えない。値が合わないとき、Extract で詰まっているのか Expand で詰まっているのかを切り分けられない。

このツールは PRK = HMAC(salt, IKM) を独立して表示し、その PRK から導いた OKM も並べて出す。salt を空にした場合は RFC 5869 の規定どおり HashLen バイトのゼロが salt として使われる。OKM の最大長は 255×HashLen バイト (SHA-256 なら 8160 バイト) で、これを超える要求はエラーになる。計算は標準の Web Crypto API (crypto.subtle) の HKDF と HMAC をそのまま呼んでいるため、ブラウザ実装と同じ結果が返る。

入力した IKM・salt・info は鍵素材そのもので、外部に送信されずブラウザ内だけで処理される。テスト用の鍵を安心して貼り付けられる。

🧐 よくある質問

Q. PRK と OKM の違いは? PRK (Pseudorandom Key) は Extract 段の出力で、salt を鍵とした IKM の HMAC。ハッシュ長と同じ固定長になる。OKM (Output Keying Material) は Expand 段の出力で、PRK と info から任意長 (要求バイト長) を伸ばした最終鍵。実際にアプリで使うのは OKM 側。

Q. salt を空にするとどうなる? RFC 5869 では salt 省略時に HashLen バイトのゼロ列を salt とすると定めている。本ツールも同じ挙動で、Salt 欄を空にすれば自動でゼロ salt が使われる。

Q. 入力は hex で入れる? 文字列で入れる? このツールは IKM・salt・info を UTF-8 のバイト列として扱う。abc と入れれば 3 バイト (0x61 0x62 0x63)。生のバイト列をそのまま指定したい場合は、対応する文字列を入力欄に置く形になる点に注意。

Q. OKM の最大長は? 255×HashLen バイト。SHA-256 は 8160、SHA-384 は 12240、SHA-512 は 16320 バイトまで。これは Expand の counter が 1 バイト (1〜255) である規格上の制限。

Q. PBKDF2 や Argon2 と何が違う? PBKDF2 や Argon2 はパスワードを意図的に遅く伸ばす「鍵ストレッチング」。HKDF は既に高エントロピーな鍵素材を複数の用途別鍵に「分配」するためのもので、遅くする仕組みは持たない。用途が違う。

Q. 出力が他ツールと合わない salt のゼロ埋め扱い、info の有無、UTF-8 とバイト直指定の差で値が変わる。3 入力のバイト列が完全一致しているか確認する。

📚 豆知識

HKDF は 2010 年に Hugo Krawczyk と Pasi Eronen が RFC 5869 として標準化した。設計思想の「Extract-then-Expand」は、まず雑多なエントロピーを一様な PRK に「絞り出し (extract)」、それを必要な数の鍵に「展開 (expand)」するという 2 段構成。この分離のおかげで、Diffie-Hellman の共有秘密のように偏りのある入力からでも安全に鍵を作れる。TLS 1.3 の鍵スケジュールはこの HKDF を中核に組まれており、HKDF-Expand-Label という独自ラベル付き Expand を多用する。info フィールドに用途文字列を入れて鍵を分けるのは、同じ IKM から「暗号化用」「認証用」を独立に導くための定石になっている。