Crypt和Salt如何比MD5对蛮力攻击更安全?

时间:2011-12-27 15:45:22

标签: php md5 crypt

我在PHP.net上读到MD5没用,他们建议使用crypt + salt。

所以,我去了他们的功能描述并阅读

<?php
$password = crypt('mypassword'); // let the salt be automatically generated

/* You should pass the entire results of crypt() as the salt for comparing a
   password, to avoid problems when different hashing algorithms are used. (As
   it says above, standard DES-based password hashing uses a 2-character salt,
   but MD5-based hashing uses 12.) */
if (crypt($user_input, $password) == $password) {
   echo "Password verified!";
}
?>

或者就我而言:

$stored_password=fetch_password($user);
if (crypt($_REQUEST['password'],$stored_password)===$stored_password) {
// ok
}

所以,当我看到salt存储在哈希密码中并且你使用哈希密码作为salt时,我认为Crypt + Salt对输出的强力攻击不是更安全(黑客成功窃取了哈希密码) )。它更安全吗?

对于字典攻击,我可以理解它的强大功能,但是对于哈希密码的暴力攻击,我看不出它的优势。

3 个答案:

答案 0 :(得分:2)

在散列之前将salt应用于字符串(示例中的密码)时,散列现在成为另一个散列,而不是没有salt的散列。 如果没有盐,你可以使用一个预先存在的字典 - 现在你需要为盐创建一个字典。如果您使用特定于用户的salt,则每个用户在使用暴力时都需要拥有自己的字典。这变得更加耗时。

由于其collision vulnerabilities,MD5是一个破碎的算法。

答案 1 :(得分:0)

Salts阻碍彩虹表&amp;哈希字典通过使您的哈希密码唯一。

它们还有助于防止有人窃取您的散列密码列表,并使用它来访问其他网站上的帐户(通过反转哈希或类似方法)。

它无助于抵御传统的暴力攻击。

答案 2 :(得分:0)

使用哈希的密码比MD5更昂贵。攻击者需要更多的计算时间,因此这更安全。

对于密码和MD5,攻击者可以使用MD5 PLUS的预计算表,MD5的优势非常快。

对于密码和盐渍地穴,预计算表将无用,PLUS地穴需要比MD5更多的马力

有一些特制的算法(google bcrypt),它有更高的计算成本,可以更进一步。