无需登录 数据私有 本地保存

Scrypt 密钥派生工具 - 密码转强密钥

10
0
0
0

Scrypt 密钥派生工具

使用 Scrypt 算法将密码转换为高强度加密密钥,支持自定义参数,所有计算均在本地完成。

🚀
快速
N=2048 r=8 p=1
适合低资源环境
推荐
N=16384 r=8 p=1
OWASP 推荐配置
🔒
高安全
N=65536 r=8 p=2
更高安全级别
🛡️
偏执级
N=262144 r=8 p=1
最高安全,较慢
参数配置
N (CPU/内存成本因子) 必须为2的幂
r (块大小)
推荐值:8,范围 1-32
p (并行度)
推荐值:1,范围 1-16
密钥长度 (dkLen, 字节)
预估内存:≈16 MB
输出格式
密码输入
此密码仅在本地处理,不会发送到任何服务器。
推荐使用随机生成的16字节(32位十六进制)盐值。
盐值格式无效,请输入有效的十六进制字符串(偶数长度,仅包含0-9a-fA-F)。
计算中...
请输入密码并点击"派生密钥"
常见问题与知识点

Scrypt 是一种基于密码的密钥派生函数(KDF),由 Colin Percival 于 2009 年设计。它的核心特点是内存硬度(Memory-hardness),即计算过程需要大量内存,这使得使用专用硬件(如 GPU、ASIC)进行暴力破解变得极其昂贵。Scrypt 广泛用于密码存储(如 Tarsnap 备份服务)、加密货币(如 Litecoin 的 PoW 算法)以及各类安全系统中。

  • PBKDF2:基于 HMAC 的迭代哈希,可通过增加迭代次数提高安全性,但不具备内存硬度,容易受到 GPU/ASIC 加速攻击。
  • bcrypt:基于 Blowfish 密码,具有一定内存开销(约4KB),比 PBKDF2 更抗GPU攻击,但内存使用固定且较小。
  • Scrypt:可配置大量内存使用(从KB到GB级别),通过内存硬度有效抵御专用硬件攻击。三个参数 N、r、p 提供了极大的灵活性,可根据需求调整安全级别。

总结:Scrypt 是三者中抗硬件攻击能力最强的选择,尤其适合需要长期安全性的场景。

盐值是一个随机生成的字符串,在密钥派生过程中与密码一起使用。它的主要作用:

1. 防止彩虹表攻击:即使两个用户使用相同的密码,由于盐值不同,派生出的密钥也完全不同,使得预计算的彩虹表攻击失效。
2. 增加破解难度:攻击者必须为每个盐值单独进行暴力破解,无法批量攻击。

盐值不需要保密,但每个密码应使用唯一的随机盐值。推荐使用密码学安全的随机数生成器生成至少16字节(128位)的盐值。本工具支持一键随机生成安全盐值。

  • N(CPU/内存成本因子):决定迭代次数和内存使用量的核心参数,必须为 2 的幂。N 越大,计算所需的时间和内存越多。内存使用量 ≈ 128 × N × r × p 字节。
  • r(块大小):影响内存访问模式和块大小。较大的 r 增加顺序内存读取量,通常设为 8。
  • p(并行度):控制并行计算线程数。p 大于 1 时会将内存分为 p 份并行处理,适用于多核处理器。通常设为 1,除非有明确的并行需求。

举例:N=16384, r=8, p=1 时,内存使用约 128×16384×8×1 = 16 MB,这是 OWASP 推荐的基准配置。

选择参数时需要平衡安全性性能

• 快速模式(N=2048, r=8, p=1, 内存≈2MB):适合低资源设备(如 IoT、移动端),计算时间 <100ms。
• 推荐模式(N=16384, r=8, p=1, 内存≈16MB):OWASP 2023 推荐配置,适合大多数 Web 应用,计算时间约 100-500ms。
• 高安全模式(N=65536, r=8, p=2, 内存≈128MB):适合高安全性需求的场景,计算时间约 500ms-2s。
• 偏执级(N=262144, r=8, p=1, 内存≈256MB):最高安全级别,计算时间可能超过 2-5 秒,适合极端安全需求。

建议:在生产环境中进行基准测试,确保在目标硬件上计算时间在可接受范围内(通常建议 <500ms 用于 Web 应用)。

内存硬度是指算法在计算过程中必须使用大量内存,无法用更少的计算资源替代。对于 Scrypt:

• GPU 虽然拥有数千核心,但每个核心的可用内存有限(通常几百KB到几MB)。当 Scrypt 需要 16MB+ 内存时,GPU 无法同时运行大量并行任务,大大削弱了其并行优势。
• ASIC 制造需要集成大量高速内存(SRAM),这使得芯片面积和成本急剧增加。据估计,破解 Scrypt(N=16384)的 ASIC 成本是同等算力比特币 ASIC 的数千倍。
• FPGA 同样受限于片上内存容量,大内存需求使得破解效率大幅降低。

这使得 Scrypt 在面对硬件加速攻击时具有显著优势,尤其是与传统哈希函数(如 SHA-256)或 PBKDF2 相比。

通过 Scrypt 派生的高强度密钥可用于多种安全场景:

1. 文件加密:使用派生密钥作为 AES-256 等对称加密算法的密钥,保护敏感文件。
2. 密码存储:在数据库中存储派生结果(及对应盐值),而非明文密码。验证时重新派生并比对。
3. 主密钥生成:从主密码派生出多个子密钥,用于不同服务或用途。
4. 加密货币钱包:某些钱包使用 Scrypt 从口令生成钱包私钥。
5. API 密钥/令牌生成:基于用户密码派生服务认证令牌。

注意:本工具输出的派生密钥是原始字节的十六进制或 Base64 编码,可根据需要截取或格式化后使用。

  • 使用密码学安全的随机盐值:每个用户/每次派生使用唯一盐值,长度至少16字节。
  • 选择合适的参数:至少使用 OWASP 推荐的 N=16384, r=8, p=1。随着硬件进步,定期审查并提高参数。
  • 安全存储盐值:盐值通常与派生结果一起存储(如数据库中的 salt 字段),虽然不需要保密,但不可丢失。
  • 使用 HTTPS:在传输密码时务必使用加密连接,防止中间人攻击。
  • 限制尝试次数:在登录系统中实施速率限制,防止在线暴力破解。
  • 不要自行实现:使用经过审计的密码学库,避免引入安全漏洞。
  • 定期更新:关注安全社区对 Scrypt 参数的最新建议,适时升级。