scrypt 实验场

用自定义的 N、r、p、盐和密钥长度计算 scrypt,查看所需内存,并获得原始十六进制或 $scrypt$ 字符串。已验证 RFC 7914 测试向量。

所需内存:128 × N × r = 128 MiB

scrypt(RFC 7914)是内存困难型算法。OWASP 最低要求:N=2^17, r=8, p=1(128 MiB)。在浏览器中通过 hash-wasm 计算;N 值越大,所需内存越多。

用哈希验证密码

完全在浏览器中运行,您的数据不会被上传。

什么是 scrypt 实验场?

用你自己的成本参数和盐运行具备内存硬度的 scrypt 密钥派生函数(RFC 7914)。工具会显示这些设置需要多少内存、原始派生密钥,以及之后可用于验证的编码 $scrypt$ 字符串。

如何使用 scrypt 实验场

  1. 输入密码。
  2. 选择以 2 的幂表示的 CPU/内存成本 (N)、块大小 (r)、并行度 (p) 和密钥长度。
  3. 输入盐值及其编码,或留空以使用随机盐。
  4. 点击计算哈希并复制结果;在下方面板中验证。

示例

输入
Password password, salt NaCl, N=1024, r=8, p=16, 64 bytes
输出
fdbabe1c9d3472007856e7190d01e9fe7c6ad7cbc8237830e77376634b3731622eaf30d92e22a3886ff109279d9830dac727afb94a83ee6d8360cbdfa2cc0640

RFC 7914 第 12 节,测试向量 2。

何时使用 scrypt 实验场

适用于调整 scrypt 参数、核对 RFC 7914 向量,或调试来自 Node.js crypto.scrypt、Python hashlib.scrypt 或 passlib 的哈希。较大的 N 值需要数百 MiB 内存,在移动设备上可能失败。

scrypt 实验场 的工作原理

scrypt 先运行一次 PBKDF2-HMAC-SHA-256 来扩展输入,然后 ROMix 函数用基于 Salsa20/8 的 BlockMix 输出填充 128 × N × r 字节的内存,并以依赖数据的顺序读回,共 p 次,最后再进行一次 PBKDF2 步骤。编码形式为 $scrypt$ln=<log2 N>,r=<r>,p=<p>$<salt>$<hash>,采用 Base64。计算使用 hash-wasm(WebAssembly)。

常见用例

  • 选择 N,使哈希耗时约 100 ms
  • 重现 RFC 7914 测试向量
  • 调试用 Node 的 crypto.scrypt 创建的哈希
  • 展示内存成本如何随 N 和 r 增长

常见问题

OWASP 推荐哪些参数?

至少 N=2^17、r=8、p=1(占用 128 MiB),或例如 N=2^16、r=8、p=2 这样的权衡。

scrypt 使用多少内存?

128 × N × r 字节,显示在参数下方。N=2^17 且 r=8 需要 128 MiB。

scrypt 比 bcrypt 好吗?

它具备内存硬度,使 GPU 和 ASIC 攻击的成本更高。Argon2id 是目前的首选,scrypt 是很好的次选。

探索更多分类