我应该使用什么值来生成Argon2i哈希值?如何找到我的硬件可以承受的适当设置?
即:
memory_cost
time_cost
threads
为:
$options = [
'memory_cost' => 1<<17,
'time_cost' => 4,
'threads' => 3,
];
$hash = password_hash('test', PASSWORD_ARGON2I, $options);
有a simple script in PHP docs来查找bcrypt哈希值的相应成本值。如何安装Argon2?
答案 0 :(得分:2)
来自:PHP RFC Argon2 password_hash
来自:
由于PHP运行的平台种类繁多,因此在使用默认成本参数时,故意将成本因素设置得较低,以免意外耗尽共享或低资源系统上的系统资源。因此,用户应调整成本因素以匹配他们正在处理的系统。以下列表使用这些默认成本值概述了各种系统上的散列性能。
Common Cloud Server 512 MB, 1 Core: 3-5 ms Common Cloud Server 2 GB, 2 Core, 1-3 ms 512 MB Raspberry Pi Zero: 75-85ms
由于Argon2没有任何“坏”值,因此消耗更多资源被认为比消耗更少资源更好。鼓励用户调整他们正在开发的平台的成本因素。
来自:What Is The Recommended Number Of Iterations For Argon2
argon2 paper给出了以下程序(释义),用于确定您应该使用的参数:
- 计算出你可以使用的线程数,相应地选择$ h $。
- 计算出你可以使用多少内存,相应地选择$ m $。
- 确定您可以花费的最大时间$ x $,选择最大的$ t $,以便系统和其他参数选择花费少于$ x $。
即。他们建议您在系统上运行它,并确定与内存和处理器时间使用限制相匹配的最大参数。
- 的任何整数值
并行度
p
决定了可以运行多少个独立(但同步)的计算链。它可能需要1到2 ^ 24 -1内存大小
m
可以是8p
到2 ^ 32之间的任何整数千字节数 -1。实际的块数为m′
,m
向下舍入到4p
的最接近倍数。迭代次数
t
(用于独立于内存大小调整运行时间)可以是1到2 ^ 32 -1之间的任何整数
计算每次调用Argon2时可以使用的线程数(并行度)。他们建议使用专用于散列密码的内核数量的两倍。
计算每次通话可以花多长时间。对concurent用户登录的一个建议是将其保持在0.5ms以下。
使用所选参数测量散列的时间。找一个在你的计算时间内的time_cost。如果time_cost = 1花费太长时间,则降低memory_cost。
因此,从上面的摘录中,您似乎希望以PHP 0.5ms
衡量的microtime
的时间跨度,就像在BCrypt示例中一样。
然后,您可以将线程的数量设置为CPU运行的核心数的两倍,因此对于4核处理器,请说8。
然后,您应该能够使用以上两个值运行一系列测试,以找到 memory_cost 的有效第三个值。
在您的服务器上运行一些测试,以查看服务器可以轻松管理的内容。 探索if this CLI可以提供帮助。
按照上面引用的顺序更改三个变量(在 线程 下),因此使用大的迭代次数调整内存。
简而言之,我们无法为您提供最好的建议&#34;指导因为它取决于什么规格。你打算在......上运行这个...