工具概述
SCrypt 是一种基于密码的密钥派生函数(KDF),由 Colin Percival 设计。它不仅像 BCrypt 一样需要大量 CPU 计算,还需要大量内存,使其对 GPU/ASIC 攻击具有更强的抵抗力。SCrypt 被用于 Litecoin、Dogecoin 等加密货币的挖矿算法。
SCrypt 的三个关键参数:
- N(Cost):CPU/内存成本参数,必须是 2 的幂。越大越安全,但计算越慢。
- r(Block size):块大小参数,影响内存使用量。默认 8。
- p(Parallelism):并行化参数,控制可以并行运行的线程数。默认 1。
常见问题与回答
1. SCrypt 与 BCrypt 有什么区别?
两者都是密码哈希函数。BCrypt 只需要 CPU 计算,SCrypt 同时需要大量内存,这使得 SCrypt 更难被专用硬件(ASIC)加速破解。但 SCrypt 参数配置更复杂。
2. 参数应该怎么设置?
推荐默认值:N=16384, r=8, p=1。这是 Litecoin 等加密货币使用的参数。对于更高安全性,可以增加 N 到 32768 或 65536。注意:N 翻倍会使计算时间约翻倍。
3. 为什么需要 Salt?
Salt 是随机字符串,用于防止彩虹表攻击。相同密码配合不同 Salt 会产生完全不同的哈希值。建议使用随机生成的 Salt(如 UUID)。
4. SCrypt 安全吗?
是的。SCrypt 是目前最安全的密码哈希算法之一,已被 IETF 标准化(RFC 7914)。它被广泛用于加密货币和密码管理系统。
5. 数据会上传到服务器吗?
不会。所有计算都在浏览器本地完成,确保密码安全。
6. 内存使用量如何计算?
大约为 128 * N * r 字节。例如 N=16384, r=8 时约使用 16MB 内存。
7. SCrypt 和 Argon2 哪个更好?
Argon2 是密码哈希竞赛冠军,在抗侧信道攻击方面更优。但 SCrypt 已久经考验,依然是很好的选择。两者都比 MD5/SHA 系列更适合密码存储。
8. 输出长度应该设多少?
用于密码存储时,32 字节(256 位)足够。如果用于密钥派生,可根据需要选择更长的输出。