目前我的许多密码都是用md5和sha1的混合存储的,但是我刚刚被介绍给salting,并且想知道什么是最安全的细分。
我证明一个简单的md5()很容易被撤销,但是md5(sha1(md5($ var)));这个组合是否会提供更多难度,或者更不一定更好。
另外,正在做
$var = $var.'t00lup';
md5($var);
假设t00lup是私钥,比上述更安全吗?
有没有更好的方法来实现这一点,而不是仅使用md5或仅使用sha1?
由于
答案 0 :(得分:11)
一些事情:
只需使用SHA256 - 不要打扰重新散列。
不要只为每个帐户硬编码一个盐。为每个用户生成一个随机盐,并将其放在数据库中的用户记录中。这样,如果有人为该盐生成彩虹表,至少他们只能访问该一个用户帐户而不是所有用户帐户。
答案 1 :(得分:5)
答案 2 :(得分:4)
绝对需要使用salt,否则,攻击者可以使用现有的预先计算的表来查找用户使用的所有短密码或字典密码的哈希值。您可以自己尝试:使用非常糟糕(短或字典)密码的MD5并对搜索结果进行谷歌搜索 - 很可能您会在某个地方受到攻击。
使用salt,现有的表变得无用,并且除了最有资源和最有动力的攻击者之外,计算自己的表需要太长时间。每个用户的单个盐甚至更好(否则,知道盐的攻击者可以立即攻击所有用户)。
组合哈希可能会产生类似的效果,但不应该用于此目的(没有盐),因为对于该组合,预计算表仍然存在。
然而,哈希的组合和重复具有其自身的价值,通过增加攻击者进行字典攻击所需的时间:应用MD5一万次仍然需要几分之一秒并且作为一部分是可行的登录过程。但是对于字典攻击,花费10,000次 是一个问题。
此技术称为key strengthening。
答案 3 :(得分:0)
VBulletin使用的东西类似于md5(md5($ password)。$ salt)。好像没事。
答案 4 :(得分:0)
我认为做一些腌制可以提高安全性,因为它会使字典攻击更加困难,甚至如果密码很短,整个安全级别仍然可以。
最重要的事情是散列算法和生成的散列的长度,所以你最好更好地研究sha256或更好。