相关疑难解决方法(0)

为PHP密码保护哈希和盐

目前据说MD5部分不安全.考虑到这一点,我想知道用于密码保护的机制.

这个问题,"双重哈希"密码是否比仅仅哈希一次更安全? 建议多次散列可能是一个好主意,而如何实现单个文件的密码保护?建议使用盐.

我正在使用PHP.我想要一个安全快速的密码加密系统.散列密码一百万次可能更安全,但也更慢.如何在速度和安全性之间取得良好的平衡?另外,我更喜欢结果具有恒定数量的字符.

  1. 散列机制必须在PHP中可用
  2. 它必须是安全的
  3. 它可以使用盐(在这种情况下,所有的盐都同样好吗?有没有办法产生好的盐?)

另外,我应该在数据库中存储两个字段(例如,一个使用MD5,另一个使用SHA)?它会使它更安全或更不安全吗?

如果我不够清楚,我想知道使用哪种散列函数以及如何选择好的盐以便拥有安全和快速的密码保护机制.

相关问题并不完全涵盖我的问题:

PHP中的SHA和MD5有什么区别
简单密码加密
存储密钥的安全方法,asp.net的密码
如何在Tomcat 5.5中实现salted密码

php security passwords hash protection

1142
推荐指数
13
解决办法
21万
查看次数

SHA-1对密码存储是否安全?

结论: SHA-1和preimage攻击一样安全,但它很容易计算,这意味着更容易安装暴力攻击或字典攻击.(对于像SHA-256这样的后继者也是如此.)根据具体情况,设计成计算成本高的哈希函数(例如bcrypt)可能是更好的选择.


有些人会像"SHA-1被打破"那样发表评论,所以我试图理解究竟是什么意思.假设我有一个SHA-1密码哈希的数据库,一个攻击者使用最先进的SHA-1破解算法和一个拥有100,000台机器的僵尸网络可以访问它.(控制超过10万台家用计算机意味着他们每秒可以完成大约10 ^ 15次操作.)他们需要多长时间

  1. 找出任何一个用户的密码?
  2. 找出给定用户的密码?
  3. 找出所有用户的密码?
  4. 找到一种以用户身份登录的方法?
  5. 找到以特定用户身份登录的方法?

如果密码被腌制,它会如何改变?腌制的方法(前缀,后缀,两者,还是像xor-ing这样复杂的东西)是否重要?

这是我目前的理解,经过一些谷歌搜索.如果我误解了某些内容,请在答案中更正.

  • 如果没有盐,彩虹攻击会立即找到所有密码(超长密码除外).
  • 如果有足够长的随机盐,找出密码的最有效方法是暴力破解或字典攻击.碰撞和preimage攻击都没有找到实际密码的任何帮助,因此对SHA-1的加密攻击在这里没有帮助.使用什么算法甚至不重要 - 人们甚至可以使用MD5或MD4,密码也同样安全(因为计算SHA-1哈希的速度较慢).
  • 为了评估"同样安全"的安全性,我们假设单个sha1运行需要1000次操作,密码包含大写,小写和数字(即60个字符).这意味着攻击者每天可以测试10个15*60*60*24/1000~ = 10 17个潜在密码.对于暴力攻击,这意味着在3小时内测试最多9个字符的所有密码,一周最多10个字符,一年最多11个字符.(每增加一个字符需要花费60倍.)字典攻击速度要快得多(即使是一台计算机的攻击者也可以在几小时内完成它),但只能找到弱密码.
  • 要以用户身份登录,攻击者无需找到确切的密码; 它足以找到导致相同哈希的字符串.这被称为第一次原像攻击.据我所知,没有针对SHA-1的preimage攻击.(A暴力破解攻击需要2点160的操作,这意味着我们的理论,攻击者需要10 30年,把它关闭.的理论可能性的限制是大约2个60操作,在该攻击将需要几年的时间.)有原像攻击对抗缩减版本的SHA-1,效果可以忽略不计(对于使用44步而不是80步减少的SHA-1,攻击时间从2 160次操作减少到2 157次).有针对SHA-1的碰撞攻击,这在理论上是可能的(我发现最好的时间从2 80减少到2 52),但是这些对密码哈希没用,即使没有腌制.

简而言之,使用SHA-1存储密码似乎非常安全.我错过了什么?

更新:马塞洛指出了一篇文章,其中提到了2 106次操作的第二次原像攻击.(编辑:正如托马斯解释的那样,这种攻击是一种假设的结构,不适用于现实场景.)但我仍然没有看到这对于使用SHA-1作为关键的派生函数是多么危险.通常有充分的理由认为碰撞攻击或第二次原始图像攻击最终会变成第一次原始图像攻击吗?

hash cryptography sha1

146
推荐指数
4
解决办法
6万
查看次数

标签 统计

hash ×2

cryptography ×1

passwords ×1

php ×1

protection ×1

security ×1

sha1 ×1