好的,所以我理解我的哈希密码中盐的价值......有点。
我正在设置一个基本身份验证方案,我设置密码,用户无法将密码设置为可能用于其他网站的密码。
那么盐的真正用途是什么?
在什么情况下,某人可能会破坏我的用户表,但也无法访问包含所有数据的其余表,或者我的PHP代码显示了魔法?
我正在尝试确定在我的情况下使用盐是否真的那么重要。
由于
答案 0 :(得分:2)
应该注意,SQL Injection可以用load data infile来读取文件。通过使攻击者不知道一个盐值,这将迫使攻击者进行更多的猜测以获得纯文本。虽然腌制几乎从未考虑到这一点。主要思想是两个完成两件事:
1)具有相同密码的两个用户将具有不同的密码哈希值。这就是为什么一些盐析系统使用非常小的盐,例如只有几个字节。
2)强制攻击者生成更大的rainbow tables。在这种情况下,您需要至少8个字节。通常,您会看到salt与消息摘要功能的位数相同,这使得预计算完全不可行。
获得salt后,可以使用工具John The Ripper强制密码。 GPU也常用于打破严重腌制的密码。值得注意的是,bcrypt()由于其高内存要求而擅长防御FPGA和GPU。 Using memory hard functions for password storage可以产生非常强大的密码存储系统。
答案 1 :(得分:-1)
据我了解,如果该表遭到破坏,盐会减慢用户密码的反向计算速度。盐被连接到一个密码然后单向散列,以避免从Rainbow Tables或预先散列的密码列表中确定受损密码的能力。
答案 2 :(得分:-1)
如果你加盐,让我们随机说一个ASCII字符,那么攻击者就需要一张表,其大小比不含盐的彩虹表大256倍。
对于2个ASCII char盐,它的大小已经是65536倍。
真正需要提及的是,为什么你应该使用盐是大多数用户使用直接在字典中找到的单词的事实。我没有关于多少的数据,但我想这很多。因此,即使没有使用彩虹表,攻击者也只能一次“暴力破解”一小组密码。如果你没有盐,可以通过一些修改(添加数字,......)进行字典攻击,然后你可以说只有一次字典攻击的所有密码的30%。使用盐,这不可能在一次运行中发生,意味着它需要更多的时间,对于攻击者来说意味着它毫无意义。
对于您的其他问题:
没有什么能阻止攻击者获取您的其他表格数据。但是,无论是否使用盐都没有密码可以避免。
答案 3 :(得分:-1)
最大限度地解决密码问题(并首先对它们进行哈希处理),是因为很多人......实际上几乎所有人都......重新使用密码。此外,大多数用户表还存储电子邮件和/或用户名。因此,如果有人设法获取所有用户的密码,则不仅会在您的网站上造成损害,而且还会在其他任何地方进行损坏,这些用户可以轻松查找。由于通常存储在usertables中的所有数据,损坏很难夸大。
总之;破解的密码不仅可以让用户访问您正在托管的内容,还可以影响客户登录的每个网站的安全性。
但回答标题问题;如果您的数据库遭到入侵,那么您的PHP代码也是如此。但是,它们可能只能获得对PHP代码的读访问权限,而大多数数据库访问级别确实需要INSERT / UPDATE访问才能使应用程序正常运行。有些人将SQL访问权限分为读写,但在大多数情况下这实际上是不现实的,因为你总是在INSERTing和UPDATEing,即使在用户甚至没有登录的页面中(计数器,如/不同的按钮等) )。