php hash hkdf,HKDF算法

是tls1.3中关于密钥生成的重要的基础算法,跟密钥推导密切相关。

HKDF叫HMAC-based KDF(key derivation function),基于HMAC的密钥推导函数,所以我们先认识HMAC算法。

1. HMAC

基于一个共同密钥,在两个对端之间提供消息完整性确认的机制叫"message authentication codes(MAC),消息认证码"。其实就是将消息进行hash,得到的hash值附加到消息之后,随消息一起发送,对端接收后,同样进行hash,来验证消息是否被篡改——关键点在不同数据得到的hash值一定不同——其中得到的hash值就是MAC(在别的语境里边也叫消息摘要)。另外,为了避免使用同样的hash函数对相同数据进行操作总是得出同样的摘要,额外加入一个密钥,这样使用不同密钥就可以得出不同的MAC,当然,这个密钥是两个对端都知道的。这样,我们就得到了基于加密hash的消息完整性认证的算法——Hash-based MAC。

1.1 HMAC定义如下:

输入:

使用的加密hash函数H,输出长度为hashLen

使用的密钥K,长度hashLen <= Klen <= 64,如果K的长度超过64,则先用hash函数进行一次hash,用得到的值作为K

需要认证的数据text

输出:

1消息完整性认证码HMAC

过程:

1

2定义 ipad = 64个0x36, opad = 64个0x5c

HMAC = HMAC-Hash(H, K, text) = H(K XOR opad, H(K XOR ipad, text))

目的:

1为text生成一个HMAC消息完整性认证码,输出长度就是hash函数的输出长度

04958ab371eb60087066ee16866648f5.png

2. HKDF

HKDF的主要目的使用原始的密钥材料,派生出一个或更多个能达到密码学强度的密钥(主要是保证随机性)——就是将较短的密钥材料扩展成较长的密钥材料,过程中需要保证随机性。

HKDF包含两个基本模块,或者说两个基本使用步骤:1. 提取 Extract, 2. 扩展 Expand。

提取:使用原始的密钥材料,派生出一个符合密码学强度的伪随机密钥

扩展:使用第1步骤提取出来的伪随机密钥,扩展出指定长度的密钥(同时保证随机性)。

2.1 HKDF-Extract

输入:

1. HMAC使用的hash函数H,H输出长度是hashLen

2. 原始密钥材料IKM(input keying material)

3. 另外的随机源salt, 如果没有,默认是hashLen长度的0串

输出:

1hashLen长度的伪随机密钥prk(pseudorandom key)

过程:

1

2prk = HKDF-Extract(H, salt, IKM) = HMAC-Hash(H, salt, IKM)

其实就相当于用salt作为HMAC-Hash的K,对IKM进行消息完整性认证

目的:

1使用salt增加IKM的随机性

5e2c86f51c9085aaa2ded936b4bb9414.png

2.2 HKDF-Expand

输入:

1

2

3

41.HMAC使用的hash函数H,H输出长度是hashLen

2.第一步生成的PRK

3.另外的随机元info,可以为空

4.期望生成的密钥长度L

输出:

1L长度的OKM(output keying material)

过程:

1

2

3

4

5

6

7

8

9N = ceil(L/hashLen)

T = T(1) || T(2) || T(3) || ... || T(N)

OKM = T的前L字节

T(0) = 空

T(1) = HMAC-Hash(PRK, T(0) || info || 0x01)

T(2) = HMAC-Hash(PRK, T(1) || info || 0x02)

T(3) = HMAC-Hash(PRK, T(2) || info || 0x03)

...

目的:

1将PRK扩展到指定长度L,同时保持密码学强度(随机性)

54d5c80682acf94d7e3989f209048fb2.png

3. 总结HKDF是密钥推导算法,根据一个原始密钥材料,推导出指定长度的密钥;

HKDF基于HMAC;

HMAC是基于加密hash函数的消息完整性认证算法,主要目的是认证消息完整性。在这里被用于增加原始密钥材料的随机性;

HKDF包含两步:(1) 提取Extract, (2) 扩展Expand;

HKDF-Extract就是HMAC,取IKM的认证码,也就相当于用额外的随机源salt(Key)增加了IKM(text)的随机性;

HKDf-Expand就是将短密钥变长,同时保证随机性。

4. 参考

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值