不对称的加密算法定义密钥的性质以及生成密钥的方法,因为密钥需要相互关联。例如,RSA密钥生成算法是确定性的。
对称的加密算法只定义密钥长度。密钥由用户来生成。有多种算法生成密钥,其中一种是KDF。
密钥衍生函数(KDF) 是用于从一些密值(例如主密钥、密码)中衍生对称密钥的确定性算法。有多种类型的KDF,例如bcrypt、crypt、PBKDF2、scrypt、HKDF等。如要学习更多KDF的相关知识,请访问https://en.wikipedia.org/wiki/Key_derivation_function 。
为了从一个密值生成多个密钥,可以对一个数执行拼接(concatenate)和递增(increment)运算。
基于密码的密钥衍生函数用一个密码生成一个对称密钥。由于在实践中,用户通常使用较弱的密码,基于密码的密钥衍生函数 比较慢,占用了大量内存,使其难以启动强力攻击和其他攻击。基于密码的密钥衍生函数使用广泛,因为难以记住密钥,且存储也有风险——有可能被盗。 PBKDF2是一个基于密码的密钥衍生函数的例子。
主密钥或者密码难以使用强力攻击破解;因此,如果你想从主密钥或者密码生成一个对称密钥,可以使用不以密码为基础的密钥衍生函数,例如HKDF。HKDF比PBKDF2快得多。
为什么使用KDF,而不使用哈希函数?
哈希功能的输出可以当作对称密钥加密技术使用。所以你肯定在奇怪为什么需要KDF。如果使用的是主密钥、密码或者强密码,那么使用一个哈希函数就行了。例如,HKDF仅使用哈希函数生成密钥。但是如果不能保证用户使用强密码,最好使用哈希函数衍生的密码。
来源:我是码农,转载请保留出处和链接!
本文链接:http://www.54manong.com/?id=558