【发布时间】:2012-06-22 23:43:34
【问题描述】:
我使用Java scrypt library 来存储密码。当我加密事物时,它需要N、r 和p 值,其文档将其称为“CPU 成本”、“内存成本”和“并行化成本”参数。唯一的问题是,我实际上并不知道它们的具体含义,或者对它们有什么好的价值;也许它们以某种方式对应于Colin Percival's original app 上的-t、-m 和-M 开关?
有人对此有什么建议吗?库本身列出了 N = 16384, r = 8 和 p = 1,但我不知道这是强还是弱还是什么。
【问题讨论】:
-
提示:如果密码存储数据可能被劫持(即如果有备份),则不要存储密码的加密,而是与访问密钥连接的密码。这可以防止字典攻击。
-
我已经为这个问题发布了一个通用的答案,但我当然欢迎更详细的答案,包括一些 CPU 计时和内存使用统计数据。
-
@JoopEggen 不知道你想说什么
-
@Joop Eggen:没有。 SHA1 不是密钥派生函数,即使使用盐也是如此。 不要使用。另一方面,SCrypt 是一个非常好的加密货币。很高兴,OP 意识到了基本问题。
-
@JoopEggen 在这篇文章中没有说明,但 scrypt +需要+一个明确的盐作为参数传递(在 N/r/p 旁边)。顺便说一句,强烈建议使用由加密安全 PRNG 提供的 +random+ salt(我经常使用 16 或 32 字节的 salt)
标签: java cryptography scrypt