KDF全称(Key derivation function) 密钥导出函数。
密码学中,密钥导出函数是指使用伪随机函数从主密钥master_key中导出一个或多个密钥key。KDF可用于将密钥扩展到更长的密钥或获得所需格式的密钥。密钥加密哈希函数是用于密钥推导的伪随机函数的流行示例。
实现 key stretching [1] 的方法,具体就是从一个 master key,password 或者 passphrase 派生出一个或者多个密钥,派生的过程,使用PRF(Pseudo Random Function 伪随机函数)可以是某种哈希算法。
简而言之,PBKDF2是算力型,而Scrypt是资源消耗型算法。
我们下面针对密钥延伸( key stretching )对KDF进行下一步的描述:
KDF也用于从秘密密码或密码短语导出密钥的应用程序,密码通常不具有直接用作加密密钥的所需属性。在这样的应用中,通常建议将密钥导出功能故意缓慢,以阻止对密码或密码输入值的暴力攻击或字典攻击。
这种使用可以表示为DK = KDF(Key,Salt,Iterations),
其中DK是派生密钥;
KDF是密钥导出函数;
Key是原始密钥或密码;
Salt是作为密码盐的随机数;
Iterations是指子功能的迭代次数。
使用派生密钥代替原始密钥或密码作为系统的密钥。盐的值和迭代次数(如果不固定)与散列密码一起存储或以加密消息的明文形式发送。
暴力攻击的难度随着迭代次数的增加而增加。迭代计数的实际限制是用户不愿容忍登录计算机或看到解密消息的可察觉延迟。使用salt可以防止攻击者预先计算派生密钥的字典。
Extraction-then-Expansion(E-E) Key Derivation Procedure
https://blog.csdn.net/sjrgckym/article/details/78195845
https://www.cnblogs.com/mengsuenyan/p/13160157.html#toc
https://www.jianshu.com/p/9b579b80afa4