密码学
密钥派生函数(KDF)
别称: KDF, 密钥派生
定义
从口令、共享密钥或主密钥等秘密素材派生出一个或多个强加密密钥的密码学函数。
密钥派生函数(Key Derivation Function,KDF)从某种秘密素材出发——可以是口令、Diffie-Hellman 共享密钥或已有的主密钥——派生出一个或多个具有固定长度的强加密密钥。KDF 大致分为两类:面向口令的 KDF,设计为缓慢且内存密集(Argon2id、scrypt、bcrypt、PBKDF2);以及面向高熵输入的 extract-and-expand 类 KDF(HKDF,定义于 RFC 5869)。HKDF 被广泛用于 TLS 1.3、Signal、WireGuard 和 Noise,通过 HMAC 从单个共享密钥派生出多个会话密钥。优秀的 KDF 支持盐和可选的 info/上下文字符串,实现派生密钥的域分离,确保不同上下文下的派生密钥彼此独立、不可关联。
示例
- TLS 1.3 使用 HKDF-Extract+Expand 派生握手与流量密钥。
- Argon2id 从用户的口令短语派生 32 字节 AES 密钥,用于解锁加密保险库。
相关术语
Argon2
现代的内存密集型口令哈希与密钥派生函数,在 2015 年口令哈希竞赛中胜出,并由 RFC 9106 标准化。
scrypt
由 Colin Percival 于 2009 年设计、由 RFC 7914 标准化的基于口令的内存密集型 KDF,用于口令哈希,也作为部分加密货币的工作量证明算法。
PBKDF2
由 PKCS #5 / RFC 8018 定义的基于口令的密钥派生函数,使用可配置迭代次数和盐反复调用一个伪随机函数。
HMAC
基于密码学哈希函数的带密钥消息认证码结构,由 RFC 2104 与 FIPS 198-1 定义。
密码学密钥
高熵的秘密或公开值,用于参数化加密算法,以加密、解密、签名或认证数据。
会话密钥
用于保护单次通信会话的短期对称密钥,会话结束后即予销毁。