如果攻击者知道盐是否对安全无用?

Mif*_*Fox 10 language-agnostic security hash

假设我有一个用户设置表,如下所示:

CREATE TABLE `users` (
    `id` INTEGER PRIMARY KEY,
    `name` TEXT,
    `hashed_password` TEXT,
    `salt` TEXT
)
Run Code Online (Sandbox Code Playgroud)

创建用户时,会生成随机生成的salt,并将其与结果一起存储在数据库中get_hash(salt + plaintext_password).

我想知道如果恶意用户获取这些数据,他们是否可以使用它来破解用户的密码?如果是这样,有什么方法可以防止它?

Luk*_*keH 17

不,他们没有用武之地.

只要你为每一行使用一种独特的盐,那么盐就可以防止减缓攻击速度.攻击者需要进行暴力攻击,而不是使用彩虹表来防止密码哈希.

正如评论中所提到的,你应该确保盐是合理的大小.

  • 关键点:盐的大小必须选择得足够大,以至于攻击者不可能拥有足够大的彩虹桌.显然,8位盐并不能完全阻止彩虹表攻击,只需要将所需的表大小增加到最多256倍.随机盐的128位,otoh,现在和永远排除彩虹表. (7认同)
  • 卢克的答案是假设攻击者知道盐.重点是,如果没有盐,攻击者可以在网上找到的彩虹表中查找哈希密码.随着盐的加入,攻击者必须自己做蛮力工作. (5认同)
  • @Mitch:预先计算所有可能的MD5哈希值(给出不安全的例子)最多n个字符的密码很容易.腌制是好的,因为预先计算许多密码*可能的盐的数量是不可能的.盐没有隐藏. (2认同)

mfx*_*mfx 8

Salting在UNIX/etc/passwd文件中引入(或至少变得流行),这是世界可读的.通常假设破解者已知盐和加密密码.salt的目的是减慢破解过程(因为相同的密码不会映射到相同的加密字符串); 它本身并不是一个秘密.