当前位置:   article > 正文

密钥派生算法

密钥派生

一、定义

密钥派生函数(Key Derivation Function)就是从一个密码产生出一个或多个密钥,具体就是从一个master key,password或者passphrase派生出一个或多个密钥,派生的过程使用PRF(Pseudo Random Function)。是一种实现key stretching(密钥延长算法,即一种更慢的哈希算法,用于将初始密钥转换成增强密钥,在计算过程中刻意延长时间或者消耗空间,这样有利于保护弱密码)的方法。

●最简单的KDF可以直接使用某种密码学散列算法,如:SHA256。将一个密码转换为一个散列值作为密钥。但易受字典攻击。

二、分类

根据派生源的不同,我们可以将密钥派生算法简单分为两种:

●从一个密钥派生出一个或多个新的密钥:HKDF(HMAC-based key derivation),基于HMAC的密钥派生算法

使用另一个随机数(salt)作为输入密钥,利用如HMAC-SHA256的HMAC算法对既有密钥派生新的密钥,并将salt与派生密钥一起存储,用于以后再次从这个既有密钥中派生出相同的派生密钥。salt通常不是私密的,并且可以重用。加盐(salt)可以防止彩虹表导致的密码泄露。

●从一个密码派生出一个或多个密钥:PBKDF2、Bcrypt、Scrypt、Argon2

三、两种密钥派生算法

1、PBKDF2(CPU-Hard algorithm)

是一种基于密钥派生出密钥的算法,需要消耗很多算力,可防止暴力破解加密。

  1. passphrase -> [dklen, salt, c] > 1000] -> hash
  2. DK = PBKDF2(PRF, Password, Salt, c, dkLen)

其中,

passphrase:用于用户认证或者加密程序的操作步骤

dklen:派生所产生的密钥的长度

salt:盐值是一串随机生成的比特

c:迭代的次数

DK:期望的密钥derived key

PRF(Pseudorandom function):伪随机数产生的密钥,如:hmac-sha256

2、Scrypt(Memory-Hard algorithm)

是一种password-base KDF算法,比起PBKDF2需要消耗更多的资源。Scrypt内部用的是PBKDF2算法,不过内部会长时间的维护一组比特数据,这些数据会在生成复杂的salt的过程中反复加密。

3、区别

总结:PBKDF2是算力消耗性的,Scrypt是资源消耗性的。

PBKDF2和Scrypt都是密钥派生函数(KDFs),它们通过故意减慢计算速度来实现密钥延长,特别是通过用一个可调参数来控制速度。不同之处在于,Scryp需要大量且可调整的内存量才能进行高效计算。这样能防止专有硬件ASIC/FPGA的暴力破解。

 参考博客:

密码学学习笔记_01_密码学综述 - 知乎 (zhihu.com)

创建数字钱包(零)KDF 密钥派生算法 - 腾讯云开发者社区-腾讯云 (tencent.com)

密码学学习笔记_03_随机数与密钥派生 - 知乎 (zhihu.com) 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/687764
推荐阅读
相关标签
  

闽ICP备14008679号