Discuss / Java / 加盐后服务器怎么自我验证?

加盐后服务器怎么自我验证?

Topic source

文章提到加盐可以防止黑客彩虹表反推,但是服务器平时怎么做自我验证的呢?比如小明注册密码是123456,服务器加盐随机数是a,MD5(a123456);下次登录还是123456,这时随机数是b,MD5(b123456), 比较 MD5(a123456) == MD5(b123456) ?

网上的说法是在注册的时候,把盐和密码一起存在数据库里,这样都是MD5(a123456),那数据库表泄露的时候,如果有了口令密文,也可以拿到盐的。只是相比之前增加了一点复杂度(因为彩虹表就是常用明文口令的枚举,盐是随机数,可以尽量避开“常用”),但是不绝对避开

心云意水

#3 Created at ... [Delete] [Delete and Lock User]

查表是为了快速定位弱口令账户,这个表是已经存在的一些常用弱口令对应的各种哈希算法之后的值,加盐后这些值就和不加盐的值不相同,也就查不出来了,导致表失效,提高了安全性。

在暴力破解面前,如果没有其他规则限定,那无论多复杂多长的密码最终都会被破解,只是时间长短问题。

Ives

#4 Created at ... [Delete] [Delete and Lock User]

数据库里有一百万个用户,你要对一百万个用户的盐挨个重新生成彩虹表

数据库里有一百万个用户,因为要对一百万个用户的盐挨个重新生成彩虹表,而盐又是随机的,无法重用,因此,这就是暴力破解,而且只有弱密码才能被破解,而且破解后生成的密码不一定是原始密码。

当然依然要保证每个网站的密码都不一样,或者按信任程度使用不同的密码,并且这些密码之间要像哈希生成的特征码一样,不具有通过几个密码推测出规律的可能。

如果有个没加盐的网站被破解,其实只要拿到的密码不是原始密码就问题不大,如果有个不靠谱的网站明文存储密码被破解,那你密码就被泄露了,而在社工面前找到对应的人是很容易的。

Zoer

#6 Created at ... [Delete] [Delete and Lock User]

1. 数据库会存储用户的“盐值、密码哈希”,登录校验时用的是“盐+用户输入的密码”,所以不存在说上一次是a,这一次是b。

2. 使用彩虹表的攻击者的目标是弱密码用户。数据表泄露,攻击者获得了“盐和密码哈希”,是无法通过“盐和密码哈希”逆推获得原密码来与彩虹表比较的。只能是通过“盐+彩虹表”来创建一个新的彩虹表——针对这个特定盐的彩虹表。但是盐又是随机的,这个盐的彩虹表不能复用到其他盐值的用户上。剩下的就是楼上老哥所说的了,对大基数用户的盐挨个重新生成彩虹表,无异于暴力破解。


  • 1

Reply