密码学
scrypt
别称: Percival scrypt, RFC 7914
定义
由 Colin Percival 于 2009 年设计、由 RFC 7914 标准化的基于口令的内存密集型 KDF,用于口令哈希,也作为部分加密货币的工作量证明算法。
scrypt 是 Colin Percival 于 2009 年发布、由 RFC 7914 标准化的基于口令的密钥派生函数,将 PBKDF2-HMAC-SHA-256 与一个内存密集型混合阶段 ROMix 相结合,而 ROMix 又建立在 Salsa20/8 核心之上。其三个可调参数为 N(内存/CPU 代价)、r(块大小)与 p(并行度);常见的交互式配置为 N=2^15、r=8、p=1,需要约 32 MiB 内存。内存密集型设计相比 PBKDF2 或 bcrypt 显著提升了 GPU 与 ASIC 攻击的成本。scrypt 在口令哈希和 KDF 场景下仍是安全的选择,但新系统通常优先选用 Argon2id;Litecoin 与 Dogecoin 将其用作工作量证明哈希函数。
示例
- 使用 scrypt(N=16384,r=8,p=1)存储用户口令。
- Litecoin 使用 scrypt 作为工作量证明哈希。
相关术语
密钥派生函数(KDF)
从口令、共享密钥或主密钥等秘密素材派生出一个或多个强加密密钥的密码学函数。
Argon2
现代的内存密集型口令哈希与密钥派生函数,在 2015 年口令哈希竞赛中胜出,并由 RFC 9106 标准化。
bcrypt
基于 Blowfish 密钥编排、带可调成本参数的自适应口令哈希函数,由 Provos 与 Mazières 于 1999 年提出。
PBKDF2
由 PKCS #5 / RFC 8018 定义的基于口令的密钥派生函数,使用可配置迭代次数和盐反复调用一个伪随机函数。
盐(Salt)
在口令哈希之前与之拼接的唯一随机值,用于抵御彩虹表并使每个用户的哈希都不同。
HMAC
基于密码学哈希函数的带密钥消息认证码结构,由 RFC 2104 与 FIPS 198-1 定义。