HKDF算法
2022/3/30 14:49:31
本文主要是介绍HKDF算法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
转:http://suntus.github.io/2019/05/09/HKDF%E7%AE%97%E6%B3%95/
是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 |
定义 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函数的输出长度 |
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串
输出:
1 |
hashLen长度的伪随机密钥prk(pseudorandom key) |
过程:
1 |
prk = HKDF-Extract(H, salt, IKM) = HMAC-Hash(H, salt, IKM) 其实就相当于用salt作为HMAC-Hash的K,对IKM进行消息完整性认证 |
目的:
1 |
使用salt增加IKM的随机性 |
2.2 HKDF-Expand
输入:
1 |
1. HMAC使用的hash函数H,H输出长度是hashLen 2. 第一步生成的PRK 3. 另外的随机元info,可以为空 4. 期望生成的密钥长度L |
输出:
1 |
L长度的OKM(output keying material) |
过程:
1 5 9 |
N = 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,同时保持密码学强度(随机性) |
3. 总结
- HKDF是密钥推导算法,根据一个原始密钥材料,推导出指定长度的密钥;
- HKDF基于HMAC;
- HMAC是基于加密hash函数的消息完整性认证算法,主要目的是认证消息完整性。在这里被用于增加原始密钥材料的随机性;
- HKDF包含两步:(1) 提取Extract, (2) 扩展Expand;
- HKDF-Extract就是HMAC,取IKM的认证码,也就相当于用额外的随机源salt(Key)增加了IKM(text)的随机性;
- HKDf-Expand就是将短密钥变长,同时保证随机性。
4. 参考
- RFC5869: HMAC-based Extract-and-Expand Key Derivation Function (HKDF)
- RFC2104: HMAC: Keyed-Hashing for Message Authentication
这篇关于HKDF算法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15鸿蒙生态设备数量超8亿台
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?