NIST SP 800-108密钥导出函数KDF研究

NIST SP 800-108笔记 

 

摘要:本文档对NIST SP 800-108介绍的密钥导出函数KDF进行简要分析记录,文档记录了三种类型的密钥导出函数,分别是基于计数器模式的KDF、基于反馈模式的KDF、基于双线叠加的KDF(前两种模式的组合)。KDF中采用的伪随机函数PRF可以采用HMAC或者CMAC。

 

关键词:密钥、密钥导出、密钥导出函数、HMAC、CMAC、分组密码算法、杂凑算法。

目录

4 伪随机函数PRF. 1

5 密钥导出函数KDF. 2

5.1 基于计数器模式的KDF. 2

5.2 基于反馈模式的KDF. 3

5.3 基于双线叠加的KDF(前两种模式的组合)... 5

 

 

 

4 伪随机函数PRF

推荐使用的伪随机函数PRF有两个:

  • HMAC(参见FIPS 198-1)
  • CMAC(参见NIST SP 800-38B)。

 

 

 

5 密钥导出函数KDF

描述了三种方案:

  • 基于计数器模式的KDF
  • 基于反馈模式的KDF
  • 基于双线叠加的KDF(前两种模式的组合)

5.1 基于计数器模式的KDF

函数:KO = KDF_Counter(KI, Lable, Context, L)

功能:基于计数器模式的密钥导出函数

输入参数:

  1. KI:KDF所需的输入密钥,被作为HMAC或CMAC的密钥。
  2. Lable:标签,比特串,比如可表示KDF的用途。
  3. Context:上下文,比如可以是执行KDF的人和/或使用导出密钥的人。
  4. L:导出密钥的比特长度。

内部参数:

  1. PRF:伪随机函数,可选用HMAC或者CMAC。
  2. h:PRF函数的输出长度。
  3. r:计数器i的二进制表示长度,不超过32,须固定。

返回数据:

  1. KO:导出密钥。

执行步骤:

步骤1n=\left \lceil L/h\right \rceil

步骤2n>2exp(r)-1,返回错误标识。

步骤3[无用,可删除]。

步骤4for i = 1,2,..., n

                  K(i) = PRF(KI, [i]2 || Lable || 0x00 || Context || [L]2)

步骤5返回KO = MSB(K(1) || K(2) || ... || K(n), L)。(取串的最左边kLen比特)。

备注:

  1. [i]2是将计数器i表示为比特串,其长度为r(见内部参数)。
  2. [L]2是将导出密钥KO的比特长度L表示为比特串,其长度算法中未规定,而由应用层编码方案来定。
  3. 由于[i]2的长度r<=32,h(PRF函数的输出长度)通常不超过216比特,因此[L]2的长度r<=48。

 

图1 基于计数器模式的密钥导出函数的执行流程图

5.2 基于反馈模式的KDF

函数:KO = KDF_Feedback(KI, Lable, Context, L).

功能:基于反馈模式的密钥导出函数

输入参数:

  1. KI:KDF所需的输入密钥,被作为HMAC或CMAC的密钥。
  2. Lable:标签,比特串,比如可表示KDF的用途。
  3. Context:上下文,比如可以是执行KDF的人和/或使用导出密钥的人。
  4. L:导出密钥的比特长度。
  5. IV:初始化向量,任意长度,可为空串。

内部参数:

  1. PRF:伪随机函数,可选用HMAC或者CMAC。
  2. h:PRF函数的输出长度。
  3. r:计数器i的二进制表示长度,不超过32,须固定。

返回数据:

  1. KO:导出密钥。

执行步骤:

步骤1:n=\left \lceil L/h\right \rceil

步骤2n>2exp(32)-1,返回错误标识。

步骤3K(0) = IV

步骤4for i = 1,2,..., n

                  K(i) = PRF(KI, K(i-1) {|| [i]2} || Lable || 0x00 || Context || [L]2)

步骤5返回KO = MSB(K(1) || K(2) || ... || K(n), L)。(取串的最左边kLen比特)。

备注:

  1. {|| [i]2} 表示可以将[i]2和其它数据串联在一起,也可以不串联它。
  2. [i]2是将计数器i表示为比特串,其长度为r(见内部参数)。
  3. [L]2是将导出密钥KO的比特长度L表示为比特串,其长度算法中未规定,而由应用层编码方案来定。
  4. 由于[i]2的长度r<=32,h(PRF函数的输出长度)通常不超过216比特,因此[L]2的长度r<=48。

图2 基于反馈模式的密钥导出函数的执行流程图

5.3 基于双线叠加的KDF(前两种模式的组合)

函数:KO = KDF_Double_Pipeline(KI, Lable, Context, L).

功能:基于双线叠加的模式的密钥导出函数

输入参数:

  1. KI:KDF所需的输入密钥,被作为HMAC或CMAC的密钥。
  2. Lable:标签,比特串,比如可表示KDF的用途。
  3. Context:上下文,比如可以是执行KDF的人和/或使用导出密钥的人。
  4. L:导出密钥的比特长度。
  5. IV:初始化向量,任意长度,可为空串。

内部参数:

  1. PRF:伪随机函数,可选用HMAC或者CMAC。
  2. h:PRF函数的输出长度。
  3. r:计数器i的二进制表示长度,不超过32,须固定。

返回数据:

  1. KO:导出密钥。

执行步骤:

步骤1:n=\left \lceil L/h\right \rceil

步骤2n>2exp(32)-1,返回错误标识。

步骤3[无用,可删除]。

步骤4A(0) = IV= Lable || 0x00 || Context || [L]2。

步骤5for i = 1,2,..., n

            5.1  A(i) = PRF(KI, A(i-1)) ;

            5.2  K(i) = PRF(KI, A(i) {|| [i]2} || Lable || 0x00 || Context || [L]2) ;

步骤6返回KO = MSB(K(1) || K(2) || ... || K(n), L)。(取串的最左边kLen比特)。

备注:

  1. {|| [i]2}表示可以将[i]2和其它数据串联在一起,也可以不串联它。
  2. [i]2是将计数器i表示为比特串,其长度为r(见内部参数)。
  3. [L]2是将导出密钥KO的比特长度L表示为比特串,其长度算法中未规定,而由应用层编码方案来定。
  4. 由于[i]2的长度r<=32,h(PRF函数的输出长度)通常不超过216比特,因此[L]2的长度r<=48。

图3 基于双线模式的密钥导出函数的执行流程图

 

When parties share a secret symmetric key (e.g., upon a successful execution of a key- establishment scheme as specified in [1] and [2]), it is often the case that additional keys will be needed (e.g. as described in [3]). Separate keys may be needed for different cryptographic purposes – for example, one key may be required for an encryption algorithm, while another key is intended for use by an integrity protection algorithm, such as a message authentication code. At other times, the distinct keys required by multiple entities may be generated by a trusted party from a single master key. Key derivation functions are used to derive such keys. 2. Scope and Purpose This Recommendation specifies several families of key derivation functions that use pseudorandom functions. These key derivation functions can be used to derive additional keys from a key that has been established through an automated key-establishment scheme (e.g. as defined in [1] and [2]), or from a pre-shared key (e.g., a manually distributed key). Effectively, the key derivation functions specified in this Recommendation provide the key expansion functionality described in [4], where key derivation is portrayed as a process that potentially requires two separate steps: 1) randomness extraction (to obtain an initial key) and 2) key expansion (to produce additional keys from that initial key and other data). Note that the key-agreement schemes specified in [1] and [2] already incorporate the use of a (hash-based) key derivation function. If the key used as an input to one of the key derivation functions specified in this Recommendation has been established by using one of those key-agreement schemes, then, for all intents and purposes, that key has been obtained by employing one of the key derivation functions defined in [1] and [2] as a randomness extractor.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值