主页 > imtoken官网版下载地址 > 创建数字钱包(零)KDF密钥推导算法

创建数字钱包(零)KDF密钥推导算法

imtoken官网版下载地址 2023-03-05 07:31:19

KDF的定义

实现密钥扩展的方法是从主密钥、密码或密码短语中派生出一个或多个密钥。 推导过程可以是使用PRF(伪随机函数)的哈希算法。

[Key stretching] Key stretching算法(较慢的哈希算法),用于将初始密钥转换为增强密钥,在计算过程中故意延长时间或消耗空间,有利于保护弱密码。

两种密钥推导算法PBKDF2(CPU-Hard算法)

PBKDF2是一种基于密码派生密钥的算法,为了防止暴力破解加密,会消耗大量的计算能力。

Scrypt(Memory-Hard 算法)

Scrypt 也是一种基于密码的 KDF 算法,比 PBKDF2 消耗更多的资源,从而有效防止专有硬件 ASIC/FPGA 的暴力破解。 Scrypt内部依然使用PBKDF2算法,但是内部长期维护了一组比特数据,这些数据在生成复盐的过程中会被反复加密(Salsa20,一种流密码)。 网上流行说以太坊的PoW共识算法是用Scrypt实现的,但实际上以太坊已经实现了一套哈希算法,叫做Ethash。

区别

总之,PBKDF2是算力型,而Scrypt是资源消耗型。

PBKDF2 和 scrypt 都是密钥派生函数 (KDF),它们通过计算速度缓慢,特别是通过具有可调节参数来控制速度来实现密钥拉伸。 不同之处在于,scrypt 还被设计为需要大量(且可调整)的内存才能高效计算。 这样做的目的是使破解更难使用 GPGPU 或自定义 ASIC / FPGA 硬件等设备进行并行化。 此类设备可能有数百甚至数千个并行处理单元,每个处理单元都能够使用不需要太多内存的传统 KDF(如 PBKDF2)散列不同的密码。 然而,事实证明,至少使用目前的技术,为这些并行单元中的每一个提供大量存储空间比自己制造这些单元要困难和昂贵得多。

密钥推导原理

PBKDF2 的工作原理

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

在:

PRF(Pseudorandom function):伪随机数生成的密钥,如:hmac-sha256dklen:推导生成的密钥长度key 希望后以太坊使用过的共识算法以太坊使用过的共识算法,可以防止彩虹表攻击造成的密码泄露 c:迭代次数 DK:期望的密钥派生密钥

示例:WPA2(WiFi 保护访问)

DK = PBKDF2(HMAC−SHA1, passphrase, ssid, 4096, 256)

期限

密码用于证明身份并获得与身份相称的访问权限。

Passphase用于用户认证或加密程序的操作步骤,尤其是KDF算法是从passphrase派生出来的。

按键拉伸 Salsa20 Ethash