密钥派生函数 Scrypt、Bcrypt 与 Argon2 - 写给开发者的实用密码学

发布网友 发布时间:4小时前

我来回答

1个回答

热心网友 时间:5分钟前

本文介绍三种密钥派生函数(KDF):Scrypt、Bcrypt与Argon2,旨在为开发者提供实用的密码学知识。内容包括Scrypt、Bcrypt与Argon2的特点与使用建议,以及Python代码演示。

Scrypt是一个强大的KDF,通过内存密集型计算抵抗特定硬件(GPU、ASIC、FPGA)的密码破解。其配置参数包括N(内存大小)、r(内存访问率)、p(并行度),计算内存访问顺序,形成算法速度瓶颈。内存需求公式为128 * N * r * p。选择参数时,需考虑等待时间与安全等级(抗破解能力)。MyEtherWallet应用默认参数N=8192, r=8, p=1,适合保护用户输入的长且复杂的密码。

Python中使用Scrypt派生密钥,首先安装scrypt包。装包前确保安装OpenSSL。使用Scrypt hash值的Python代码如下,注意迭代数的调整以适应实际应用需求。

Scrypt加密后的密码与算法设置、盐一起保存,形成特定格式的字符串。例如,密码“p@ss~123”以Scrypt标准格式存储为“$”分隔的多个部分。

Bcrypt也是一个KDF,相对较弱于Scrypt,对ASIC、GPU攻击的抗性较差。加密后的密码与算法设置、盐保存在特定格式的字符串中,如WordPress站点数据库中的存储形式。

Argon2是现代的抗ASIC、抗GPU安全密钥派生函数。在适当配置下,Argon2具有更强的密码破解抗性,优于PBKDF2、Bcrypt和Scrypt。Argon2有多个变种,配置参数包括time_cost、memory_cost、parallelism、hash_len与salt_len。

Python中使用Argon2派生密钥,首先安装argon2_cffi包。代码示例展示生成原始散列与argon2散列,存储格式为“$”分隔的配置参数、派生密钥与随机盐。

Argon2加密后的密码与算法设置、盐保存在特定格式的字符串中,如“$”分隔的多个部分。每个执行结果的密码、参数与盐不同。

使用Argon2时,需考虑配置与资源消耗,以适应不同的安全需求。在加密钱包、文件或App密码等场景中,Argon2是安全的KDF选择。一般来说,Argon2是最推荐的KDF,优于Scrypt、Bcrypt与PBKDF2。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com