黑客进入数据库,下载一堆哈希和盐类用户的知识,哈希方法。假设这是下载的一个条目:
cbc0a790b2f28fc72ca43eb749028b9f:21022011 (散列:salt)
在没有盐的情况下,黑客只需计算1亿个常见密码及其散列,并找到匹配的密码。使用salt,黑客只需计算100百万常见密码+ 21022011及其散列,并查找匹配密码。那么,对于一个用户来说,有什么不同呢?
当然,要大规模破解数百个用户密码,攻击者需要为每个用户计算100米通用密码的彩虹表。但攻击者也可能只针对一个用户--也许他知道公司首席执行官的用户名,现在数据库泄露,CEO的哈希和盐也知道了。
发布于 2023-03-28 19:19:20
salt的目的是防止使用基于已知哈希算法计算的彩虹表。
回到过去,当密码只是使用MD5来存储时(例如),攻击者将能够将所有哈希与预先计算的MD5彩虹表进行比较,从而非常迅速地找到密码。另外,这张彩虹表可以在所有使用哈希算法的地方使用。
但是,如果哈希是从密码加随机盐计算出来的,彩虹表就变得无用了。即使已知salt,攻击者必须首先了解salt,然后返回蛮力,并结合该salt计算所有密码散列,这需要很长时间。由于每个密码都使用不同的盐进行散列,因此必须对每个密码重复这些计算。
因此,是的,对于单个用户来说,这是一个安全优势。你说“黑客只需计算1亿个普通密码+ 21022011和它们的哈希”,但这正是攻击者花费如此昂贵的原因。简单并不一定意味着便宜。
发布于 2023-03-28 04:57:05
即使对一个目标用户来说,salt对合法用户仍然具有安全优势,在密码数据库的机密性丢失时:
当今实践的主要问题是,像PBKDF2这样的迭代散列通常被使用,这是带有GPU、FPGA或(假设的)ASIC的攻击者的梦想:它们的散列速度比合法服务器的速度快得多,以至于用户可以以合乎经济意义的代价破解大多数用户会选择的密码。
为了说明这一点:在比特币挖掘ASIC中,2^{61}>2\cdot10^{18}附加SHA-256散列的当前成本低于一美元;如果这些ASIC可用于PBKDF2-HMAC-SHA-256攻击(它们不能AFAIK,但它们距离不远),这意味着在PBKDF2中使用10^5迭代测试10^{13}附加密码(我听说的最大密码是常用的)将花费一美元,并找到最常见的密码,包括XKCD推荐的密码。
我建议删除PBKDF2并使用像Argon2这样的内存_硬性密码哈希,使用足够多的硬参数来降低此类攻击的可能性。
此外:密码数据库的保密应该是第一道防线,也是一个强大的防线。
https://crypto.stackexchange.com/questions/105860
复制相似问题