在散列时使用密码两次会使它更安全吗?

时间:2012-04-01 03:07:25

标签: security passwords

在散列时使用密码两次会使它更安全吗?我的例子是在CodeIgniter中,我将它条带化为最低限度。请不要指出示例中的所有错误,这只是一个例子。

<?php
function user_signup(){    // The normal way
    $this->load->database();
$new_user_insert = array(
    'password' => sha1($salt . $this->input->post('password')));

}
 function user_signup(){    // The double insert way
    $this->load->database();
$new_user_insert = array(
    'password' => sha1($this->input->post('password') . $salt . $this->input->post('password')));

}
}

编辑: 我的想法是它会使输入的时间长两倍,例如(用户名:joe,密码:123456789)。因此,不是使用我的散列123456789的彩虹表,而是123456789123456789。我知道这是一个过度简化,哈希看起来更像01a967f5d27b9e910754729a669504a60d2aa865,但是黑客需要更大的彩虹表。如果我错了,请纠正我。

提前谢谢。

3 个答案:

答案 0 :(得分:3)

  一个黑客需要更大的彩虹表

如果攻击者知道您散列密码的策略,则情况并非如此。

为简单起见,假设您的密码需要是一个4位数的密码。 (当然,这可以推广到更复杂的密码。)然后有10,000个可能的密码。如果您将密码与自身连接以生成一个18位数字,攻击者可以推断出前九个中的第二个九位数:1234salt1234可能有效,但1234salt4321不能,并且它不会包含在彩虹表中。 附加数字,带来已知信息的功能,不会增加额外的复杂性。

特定于用户的盐添加到密码中作为哈希防御可以获取密码哈希值和谁知道系统的攻击者。特别是,攻击者知道用于散列用户密码的算法。假设像以前一样使用四字符数字密码,使用强力策略的攻击者仍然只需要尝试10,000个组合(0000salt0000,0001salt0001,...,9999salt9999)。原始策略(不将密码与自身连接)也需要10,000个组合(0000salt,...,9999salt),因此同样困难(对于实际意图)。

答案 1 :(得分:0)

一般来说,没有。输入密码两次对于检查用户是否正确输入密码非常有用,但在数据库中输入两次绝对没用。

答案 2 :(得分:0)

第二次输入密码的目的只是为了确保用户没有错误输入密码!它实际上并没有提高安全性,当然在数据库中存储两次也没什么好处。

  

这是为了避免拼写错误。如果你必须输入密码两次机会   你会把密码设为你想要的吗?他们想避免拥有   密码为“blah”的人必须检索他们的密码   后来因为他们错误地键入了“blaj”。这尤其如此   因为密码字段显示为星号(*********),有时也显示为   很难说你输入的是你输入的内容 - 人们是谁   可能在没有意识到的情况下制造拼写错误。有些网站会这样做   当电子邮件地址必不可少时,电子邮件地址也是正确的   好。

why enter password 2 times?