5.1 PBKDF1
PBKDF1 应用哈希函数 (应为 MD2 [RFC1319], MD5 [RFC1321] 或 SHA-1 [NIST180]) 来派生密钥。派生密钥的长度受哈希函数输出长度的限制, MD2 和 MD5 为 16 个八位字节, SHA-1 为 20 个八位字节。PBKDF1 与 PKCS #5 v1.5 [PKCS5_15] 中的密钥派生过程兼容。
建议仅为了与现有应用的兼容性而使用 PBKDF1, 因为它产生的密钥对于某些应用可能不够大。
PBKDF1 (P, S, c, dkLen)
Options (选项): Hash - 底层哈希函数
Input (输入):
- P - 密码, 八位字节串
- S - 盐值, 八位字节串
- c - 迭代次数, 正整数
- dkLen - 派生密钥的预期长度 (以八位字节为单位), 正整数, MD2 或 MD5 最多为 16, SHA-1 最多为 20
Output (输出): DK - 派生密钥, dkLen 个八位字节的字符串
Steps (步骤):
-
如果对于 MD2 和 MD5 dkLen > 16, 或对于 SHA-1 dkLen > 20, 则输出 "derived key too long" (派生密钥太长) 并停止。
-
对密码 P 和盐值 S 的连接应用底层哈希函数 Hash 进行 c 次迭代, 然后提取前 dkLen 个八位字节以产生派生密钥 DK:
T_1 = Hash (P || S)
T_2 = Hash (T_1)
...
T_c = Hash (T_{c-1})
DK = T_c<0..dkLen-1>
- 输出派生密钥 DK。