首页/安全/加密与证书速查/openssl kdf 派生密钥(3.x)

openssl kdf 派生密钥(3.x)

3.x 提供 kdf 命令统一调用密钥派生函数:支持 HKDF、PBKDF2、TLS13-KDF 等;参数通过 -kdfopt 传入,适合与测试向量比对或生成中间材料。

加密与证书速查安全更新于 2026-10-13

openssl kdf 是干什么的

OpenSSL 3.x 引入 kdf 命令,用统一接口调用各种密钥派生函数:HKDF、PBKDF2、TLS13-KDF、SSKDF 等。算法名放在命令末尾,参数通过重复的 -kdfopt 键值传入(如 digest、hexkey、hexinfo、pass、salt、iter)。它适合做两件事:与标准测试向量逐字节比对,以及生成中间材料做迁移验证;生产环境的密钥材料仍应从 KMS 或 HSM 获取。

基本信息

可用算法openssl list -kdf-algorithms 查看当前构建支持的列表
HKDFopenssl kdf -keylen 32 -kdfopt digest:SHA256 -kdfopt hexkey:... -kdfopt hexinfo:... HKDF
PBKDF2openssl kdf -keylen 32 -kdfopt pass:... -kdfopt salt:hex:... -kdfopt iter:600000 PBKDF2
参数形式-kdfopt 键值按算法选择,十六进制常用 hex 前缀
输出-binary 输出原始字节,默认十六进制文本
版本要求3.x 才有该命令,1.1.1 需改用 dgst 与 pkeyutl 组合

典型使用场景

  • 向量比对:用 RFC 5869 的 HKDF 测试向量验证派生结果逐字节一致。
  • 迁移验证:换语言或换库后,用相同参数派生同一密钥并比对。
  • 口令强化评估:调整 PBKDF2 迭代次数,实测耗时后再定生产参数。
  • 域分离落地:把上下文信息作为 info 参数传入,验证不同用途派生出不同密钥。
  • 参数敏感性排查:对比改变 salt、info 或密钥长度后输出是否如期变化。

HKDF 与 PBKDF2 示例

HKDF 与 PBKDF2 示例
# HKDF:只取十六进制前若干字节做快捷验证
openssl kdf -keylen 32 -kdfopt digest:SHA256 -kdfopt hexkey:0b0b0b0b -kdfopt hexinfo:f0f1f2f3 HKDF
# PBKDF2:迭代次数要与生产策略一致才有意义
openssl kdf -keylen 32 -kdfopt pass:password -kdfopt salt:hex:0001020304050607 -kdfopt iter:600000 PBKDF2
# 查看本机支持的派生算法
openssl list -kdf-algorithms | head -20

常用参数读法

参数键适用算法含义
digestHKDF、SSKDF底层哈希算法,默认值未必是你要的
hexkeyHKDF输入密钥材料,十六进制书写
hexinfoHKDF上下文与用途信息,做域分离
pass / saltPBKDF2口令与盐,salt 可用 hex: 前缀
iterPBKDF2迭代次数,直接决定派生耗时
keylen通用输出长度,单位字节
参数键名写错时命令不一定报错,可能按默认值继续计算,得出一个看着正常但错误的结果。任何派生结果都要用官方测试向量核对,不要只凭命令成功就采信。
HKDF 的输出长度不是无限的:底层哈希为 SHA-256 时单次最多约 255×32 字节,超过会报错,需要改用更长输出的哈希或重新设计派生结构。
把 info 参数留空是常见疏漏:用同一个根密钥派生加密与认证密钥时,缺少上下文区分会让两条密钥相同,域分离实际没有落地。

易错点

  • 参数键名或大小写写错:静默按默认值计算,导出的结果与对端不一致且难以察觉。
  • 派生密钥落盘后当普通文件管理:应设最小权限、必要时加密存储并及时清理临时文件。
  • 把命令行派生用于生产:密钥材料会出现在 shell 历史与进程信息中,生产应从 KMS/HSM 获取。
  • 沿用别人给的迭代次数:不同硬件下的耗时差别很大,应按实测与策略共同确定。
  • salt 固定不变或直接省略:盐的唯一性是抗彩虹表的前提,固定盐会让同一口令长期派生出同一密钥。

数据来源与参考

  • OpenSSL 官方文档(kdf)
  • RFC 5869(HKDF)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌