鍵導出アルゴリズム
概要
鍵導出 (key derivation) は 1 つの秘密から複数の秘密を導出する手法である。より具体的には、ある鍵素体 (key material) から暗号論的強度を持つ 1 つ以上の秘密鍵を決定論的に導出するために用いられる。このような鍵導出を行うための関数を鍵導出関数 (key derivation function; KDF) と呼ぶ。
KDF が取る鍵素体はエントロピーが十分であれば必ずしも一様に分散している必要はなく、生成される鍵は決定論的で一様にランダムである。したがって DH 鍵交換の共有シークレットから一つまたは複数の秘密鍵を生成するようなケースで有用である [2]。
1 つ以上の秘密を生成することのできる疑似乱数生成器 (PRNG) は KDF と類似しているが、シードが一様に分散している必要がある点と、決定論的な結果を保証していない (例えば後方秘匿性のために生成途中に再シードを行うことができる) という点で KDF とは異なる。また一般に KDF は PRNG のように一度に大量の秘密を生成するようには設計されていない。
Table of Contents
HMAC ベースの鍵導出関数
広く使われている HMAC ベースの鍵導出関数 (HKDF; HMAC-based key derivation function) は HMAC 上に構築された KDF である。ここでは RFC 5869 [1] で規定されている HKDF を前提とする。
HKDF は抽出 (extract) と展開 (expand) の 2 ステップで構成されている。アプリケーション設計者は鍵素体が同じであっても異なるドメインで同じ秘密が導出されないように Salt 値と
HKDF-Extract
抽出ステップでは偏りが想定される任意の長さの鍵素体
なお、鍵素体
HKDF-Expand
展開ステップでは一様にランダムな秘密
出力
次にすべての
コンテキスト情報
HKDF を一様にランダムな値を生成する機能として見たとき、HKDF-Expand は HMAC 関数を繰り返し呼ぶことから疑似乱数生成より著しく効率が悪く、また出力長
Keccak ベースの鍵導出関数
SHA-3 の可変長出力関数である SHAKE やそのドメイン分離関数 cSHAKE は、入力に一様にランダムな値が必要なく、出力長に現実的な上限がないことから、HMAC ベースの鍵導出と同様に KDF として使用することができる。
参考文献
- KRAWCZYK, Hugo; ERONEN, Pasi. RFC 5869: HMAC-based extract-and-expand key derivation function (HKDF). 2010.
- David Wong. Real-World Cryptography. Manning Publications Co., 2021.