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