河豚花费与时间的关系

Hox*_*n . 5 php passwords time blowfish

我在php中使用bcrypt/blowfish,当我将cost参数设置为$ 10(我认为1024轮)时,加密过程需要0.1秒.如果我将它设置为12美元,则需要0.3秒.我的问题是:这是否占用了0.3秒的CPU时间,即如果我有100个用户正在运行此过程,它们是否都需要等待30秒(0.3 x 100)?(编辑:由于双核/多线程处理可能会更短,但即使10秒也是不可接受的).

另外:保留此成本参数有什么好处?有些人推荐16美元,但我的网站上需要5秒钟(由大型虚拟主机托管).

顺便说一句,我使用以下代码来检查它所需的时间:

<?php
// set a password to work with
$var1 = "doodoo1234";

//echo that password onto the screen 
echo $var1 . "<br /><br />";

//Start the clock
$time_start = microtime(true);

//Run blowfish function to encrypt the password
$hashedpass = PassHash::blowfishhash($var1);

//stop the clock  
$time_end = microtime(true);

//echo the password to the screen
echo $echohashedpass . "<br /><br />";

//Echo the length of the encrypted password to the screen
//(this taught me that blowfish always returns a 60 varchar string)
echo strlen($sajpass). "<br /><br />";

$time = $time_end - $time_start;
echo "that took $time seconds\n";
?>
Run Code Online (Sandbox Code Playgroud)

133*_*m3r 4

诚实地?标准是 7,但你可以将其设置为任何你想要的值,即使像 4 这样的低值仍然会超越其他所有值。与其他哈希相比,它的优势还在于它无法通过使用 GPU 来加速。所以它和其他哈希一样慢(现在甚至更慢)。因此它仍然像以前一样慢。如果你在 10 上花费 0.1 秒,那么尝试 5 或 6。这会让你的时间下降到 0.05 秒左右。那么现在就足够了吗?这取决于你对足够的定义是什么。

就我个人而言,我认为任何高于最小值(即 4)的值都绰绰有余。也不要只是直接做河豚。当有人设法并行它时,他们将能够向这个已经预先编程的工具抛出你的密码。尝试在使用 bcrypt散列密码之前或之后尝试使用其他一些快速散列对密码进行散列。使用一些强大的东西,比如 sha256 或 sha512。这样,您的系统就与使用 bcrypt 的其他人不同。

由于您已经在使用 bcrypt,我将假设您正在使用适当的散列加盐(除了 bcrypt 单独要求的之外)。

我已经在自己的笔记本电脑上进行了大量的基准测试,老实说我选择了 6 作为成本参数,当然它不是默认的 7,但它还不够慢,不足以真正让我担心有人试图进入它。它也比 sha 系列哈希值慢数百万倍。

如果您想要一些代码来执行操作(因为我不知道您是否这样做),我也可以在此链接上发布一些代码Link to Implement of bcrypt based hashing。我不知道你是否想要它,所以我没有把它放在这里。该许可证非常自由,所以如果您还没有自己编写它,我建议您可以使用它(但也许可以修改一些内容)。

  • 与成本 10 相比,成本 5 和 6 的加速分别为 2^5 = 32 和 2^4 = 16 倍。因此,如果成本 10 使用 0.1 秒,则成本 5 和 6 大约需要 0.003 或 0.006 秒,分别不是0.05秒。 (2认同)