CoderTools

HKDF 密钥派生

RFC 5869 基于 HMAC 的提取-扩展密钥派生

🔒 100% 本地处理您输入的数据完全在浏览器中处理,不会上传到任何服务器。
输出格式

HKDF 技术文档

HKDF(基于 HMAC 的提取-扩展密钥派生函数)由 RFC 5869 定义。它通过两阶段处理(提取和扩展)从输入密钥材料中派生加密密钥,是一种可靠的密钥派生方法。

HKDF 被广泛应用于现代安全协议,包括 TLS 1.3、Signal 协议、Noise 协议框架和 SSH。其提取和扩展阶段的清晰分离使其特别适合密钥层次结构的派生。

提取阶段:HKDF-Extract(salt, IKM) → PRK

提取阶段将输入密钥材料(IKM)中可能分散的熵集中到固定长度的伪随机密钥(PRK)中:

  • 以盐值(可选,默认为 HashLen 个零字节)和 IKM 作为输入
  • 计算 PRK = HMAC-Hash(salt, IKM)
  • PRK 长度等于哈希输出长度(SHA-256 为 32 字节)
  • 盐值作为 HMAC 的密钥,增强提取效果

扩展阶段:HKDF-Expand(PRK, info, L) → OKM

扩展阶段将 PRK 拉伸为所需长度的输出密钥材料(OKM):

  • 以 PRK、info(上下文/标签)和期望输出长度 L 作为输入
  • 迭代计算 T(i) = HMAC-Hash(PRK, T(i-1) | info | counter)
  • 连接结果:OKM = T(1) | T(2) | ... | T(N)
  • 最大输出长度为 255 × HashLen 字节

典型应用场景

  • TLS 1.3 密钥调度:派生流量密钥、握手密钥和应用密钥
  • Signal 协议:从共享密钥派生链密钥和消息密钥
  • SSH 密钥交换:ECDH 后派生加密密钥和完整性密钥
  • 密钥层次结构:从主密钥派生多个用途特定的子密钥

HKDF 与 PBKDF2 对比

特性 HKDF PBKDF2
标准 RFC 5869 RFC 8018
输入类型 共享密钥、DH 输出 用户密码
迭代次数 单次处理 大量 (10K-1M)
速度 快速 故意缓慢
Info 参数 支持(上下文绑定) 不支持
主要用途 高熵输入 低熵密码

安全注意事项

  • HKDF 假设 IKM 已包含足够的熵;请勿用于弱密码
  • info 参数应唯一标识密钥的预期用途(上下文分离)
  • 盐值是可选的,但建议在从同一 IKM 提取多个密钥时使用
  • PRK 不应直接使用;始终使用扩展阶段派生最终密钥

技术参考

相关工具

快捷菜单

暂无访问记录