背景
備忘録のため鍵導出について理解した内容を残す。
鍵導出とは
・鍵導出(key derivation)とは、マスタ鍵と呼ばれる秘密の値から秘密鍵(共 通鍵暗号アルゴリズムの共通鍵あるいは公開鍵暗号アルゴリズムのプライベート鍵)を導出する手法である。導出された秘密鍵は導出鍵と呼ばれる。
・鍵導出では、秘密値を不可逆関数(導出関数)に入力して導出鍵を生成する。 導出関数は他の導出鍵から導出鍵を推定できるものであってはならない。導出鍵の強度は導出に用いられるアルゴリズムやマスタ鍵の強度よりも大きくはならない。
参考情報:
鍵導出のメリット:
- ローカルで(鍵生成機能を使うことなく)鍵更新ができる
- 鍵確立プロトコルを利用しなくてもそれぞれのエンティティが独自に同じ秘密データを使って同じ暗号鍵を生成することができる
鍵導出のデメリット:
-
入力データと出力データ(生成された暗号鍵)との間に相関が残っている可能性がある
※鍵導出機能により作られる暗号鍵は、「(乱数生成器ではなく)ある種の計算方法」に従って生成されるため。 -
入力データの種類によっては十分なエントロピー量が確保できない可能性がある。
※複雑なパスワードを利用するのが困難であるため。
これらの弱点による暗号鍵の予測可能性を少しでも低減するため、信頼できる鍵導出方法(SP 800-108 や SP 800-132、SP 800-135)を使うのが望ましい。
NIST SP 800-108
3. Pseudorandom Function (PRF)
擬似乱数関数(PRF)は、鍵導出関数を構築するための関数。
{PRF(s, x) | s ∈ S} は、インデックス(シード)sと入力xを持つ関数で構成される。
暗号鍵Kinがシードとして扱われる場合、すなわちs = Kinの場合、PRFの出力は鍵として使用できる。
鍵導出に関して、HMAC、CMAC、KMACをPRFとして使用することが推奨される。
鍵導出関数で使用するPRFを選択する際、HMACまたはKMACを使用することを検討すること。
※AESがプラットフォームで唯一実装されている場合やCMACを使用することにリソース上の利点がある場合を除く。
4.1 KDF in Counter Mode
カウンターモードでは、カウンター値を変更しながらPRFを複数回実行し、その結果を結合して最終的な鍵材料を生成する。
この手法は並列処理が可能であり、効率的に鍵導出ができる。また、カウンター値が異なるため、各反復で得られる出力が独立しており、セキュリティ上の問題を防ぐことができる。
パラメータ:
• h – PRFが生成する出力のサイズ(ビット単位)
例:HMAC-SHA256を使用する場合、出力長は256ビット
• r – カウンターiの二進表現の長さ(ビット単位)
※カウンターが長いほど、より安全に処理することができる。
入力:Kin、Label, Context, L
Kin:鍵導出関数PRFに入力として使用される鍵
Label:導出された鍵の目的を識別する文字列
Context:導出された鍵に関連する情報を含むビット列。この情報には、鍵を導出する当事者が知っているノンスを含むこともある。
L:導出された鍵 Kout のサイズ(ビット単位)
Process:
例
h = 256bit
r = 8bit
L = 512bit
PRF = HMAC-SHA256
Label = 00000001
Fixed input data = 0xFFFF
--
n = 512/256 = 2
n > 2^r - 1 → 2 > 255
→ 2回反復する