首页/安全/加密与证书速查/scrypt 内存硬 KDF
加密算法基础95 条

scrypt 内存硬 KDF

RFC 7914 定义的内存硬派生函数,参数 N/r/p 控制内存与计算成本,提高 GPU 与专用硬件并行爆破的门槛,用于口令存储与文件加密。

加密与证书速查安全更新于 2026-10-12
标准RFC 7914
参数N=2^17、r=8、p=1(OWASP 建议下限)
内存开销约 128 × N × r 字节(N=2^17、r=8 时约 128 MiB)
输出dklen 通常 32 字节

Python 示例

Python 示例
import hashlib, os
salt = os.urandom(16)
key = hashlib.scrypt(b'password', salt=salt, n=2**17, r=8, p=1, dklen=32)
N 提升内存与时间成本,部署前按目标设备(尤其移动端与容器内存限额)做基准测试再定参数。

易错点

  • N 必须是 2 的幂,且内存需求随 N 线性增长;容器未调大内存限制时容易 OOM
  • scrypt 输出是密钥不是散列字符串:存储时要自行设计参数与盐的编码格式

数据来源与参考

  • RFC 7914(scrypt)
  • OWASP Password Storage Cheat Sheet
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌