1

所以我有一个登录系统,并且我使用了一些安全措施来确保它的安全。首先我给我的密码加盐:

$salt = openssl_random_pseudo_bytes(1024);
file_put_contents("salt.txt", $salt); 

接下来我使用漩涡算法对其进行哈希处理:

function myhash($password){ 
    $salt = file_get_contents("private/salt.txt");
    $password = hash_hmac('whirlpool',$password,$salt);
    return $password;
}

这是将返回并存储在数据库中的密码示例:

56a8cf545750eec78cb58582829636b1e0378cf0fff4982305a7171f06593fb92735d3576f0ad7ba8aec40c914abc38424885cb7ac2672b1d8da36e3b95c80ce

现在我的问题是: 如果黑客能够恢复上面的那个长字符串,他们是否能够以某种方式反转/解密它以返回实际密码。让我知道你们的想法/知道,这不可能吗?

这不是人们向我建议其他事情的线程,请保持与单个问题严格相关的答案。

4

2 回答 2

0

一个攻击领域似乎是两个相同的密码导致相同的字符串,因为您对每个人都使用相同的盐。

因此,无需解密任何内容,他们就已经可以分辨出谁拥有相同的密码。这可能表明密码较弱,他们可以在那里开始暴力破解。

于 2014-06-06T08:20:40.400 回答
0

简短回答“否”。漩涡是相当强大的散列算法(不是加密算法,因为加密假定能够以某种方式解密)。Salt(AKA 共享密钥)只会让其更加强大。但是为每个人使用相同的盐并不会使它变得更弱,而是可以找出谁拥有相同的密码(不知道密码本身)。

更好地使用 salt 是它在用于哈希函数之前随机生成(并且它不需要是 1024 字节 - 8 字节对于 salt 来说已经足够了),然后添加到生成的哈希之前。这种检查密码的方法知道必须使用哪种盐以及预期的哈希值。

Whirlpool 算法没有已知的弱点,使用 512 位。因此它被认为是安全的。但是我个人对此有两个负面看法:

  1. 自 2000 年成立以来,它经历了两次修改
  2. 它比其他算法(即 SHA512)使用得少。

所以我个人的观点是你的代码没有问题,而且非常安全。但是您最好切换到 SHA512。

从那个长字符串中恢复密码的唯一方法是蛮力很长时间(如果密码当然很强大)或者可能使用来自 NSA 的某些技术 :)

于 2014-06-06T08:44:10.313 回答