这个哈希对安全性有优势吗?

时间:2011-01-20 02:21:38

标签: php security hash sha1

有什么好处
sha1(sha1(sha1($password. $salt)));

基本上有多个sha1经文只有一个sha1

sha1($password. $salt);

4 个答案:

答案 0 :(得分:9)

不要,我再说一遍,不要尝试通过执行“特殊”操作来使您的密码哈希更安全。

首先,sha1(sha1(sha1($input)))仅对每次迭代的增加碰撞机会 * 产生副作用。增加碰撞的机会是一件非常糟糕的事情。

为什么不相信由该领域的实际专家制作的图书馆,而不是亲自动手做自己的密码学?使用Portable PHP password hashing framework

PHPass实际上使用 bcrypt ,这是一种旨在防止彩虹表,字典和暴力攻击的算法。您可以使用多个轮次对其进行初始化:轮次越高,计算哈希值所需的时间越长。这样,如果处理能力增加,您可以创建更强的哈希值。


* 第一次调用sha1()需要无限输入,并从2 160 输出中创建一个。第二次迭代采用2 160 输入并创建x个输出中的一个,其中x <= 2 160 。第三次迭代采用x输入并创建y个输出中的一个,其中y <= x <= 2 160

为什么每次拨打sha1()都会减少可能的输出量?因为sha1()背后的算法不是为哈希的一对一匹配而设计的。从理论上讲,如果你要散列每个可能的哈希值,你肯定会发生冲突。

答案 1 :(得分:2)

是的,这被称为key strengthening(但通常会进行数千次),并且应该在每次迭代时附加盐以获得更好的熵:

$hash = sha1($password . $salt);

for ($i = 1; $i <= 65000; ++$i)
{
    $hash = sha1($hash . $salt);
}

另外,read this awesome blog post - 或至少这个简短的引用:

  

您可以更好地优化您的   密码哈希函数,速度更快   你的密码哈希函数得到了,   你的计划越弱。 MD5和SHA1,   甚至像传统的分组密码一样   DES,设计得很快。 MD5,   SHA1和DES是弱密码   哈希值。在现代CPU上,原始加密   像DES和MD5这样的构建块可以   比特,矢量化和   并行化以进行密码搜索   闪电快。游戏结构FPGA   实现只需几百个   元。

     

使用原始哈希函数对密码进行身份验证非常简单   使用未加盐的哈希函数。   没有。

     

这里的最新技术是什么?

     

首先,你的操作系统是什么   已经给你:密码方案   “优化”是计算上的   昂贵。其中最着名的是   PHK的FreeBSD MD5方案。

     

PHK计划之间的区别   以及你将要使用的那个   你的社交购物车2.0   应用很简单。你是公正的   在盐和a上运行MD5   密码并存储哈希值。的 PHK   运行MD5进行数千次迭代。   这就是所谓的“拉伸”。

答案 2 :(得分:1)

简短的回答是否定的。当您链接两个哈希算法时,您所做的只是创建另一个具有未知属性的哈希算法(安全性)。使用盐(甚至更好,HMAC)。

答案 3 :(得分:0)

它必须经历散列过程的次数越多,散列所需的时间越长,攻击者每天尝试的次数就越少。如果散列一次需要10毫秒,并且将其散列10次需要100毫秒,那么攻击者可以每分钟尝试6000个密码并对其进行一次散列,每分钟600次并散列十次。当然,对于Web应用程序,尝试以每分钟6000或600的速度暴力本质上是DOS攻击。为此目的,加密哈希往往需要一段时间才能完成,并且多次哈希也很常见。

你应该使用sha512而不是sha1,你可以用hash()来做hash('sha512',$stringtobehashed);,sha512也比sha1长5倍左右。