密码哈希和腌制 - 这是一个很好的方法吗?

Bry*_*ynJ 7 mysql encryption passwords hash salt

我正在做一些研究或谷歌搜索处理密码散列和盐析的不同方法,并遇到了这个有趣的链接:

http://phix.me/salt/

现在,基本上建议的是创建两个用户函数,一个用于散列,另一个用于检查散列.

盐是伪随机的,但实际上是基于密码(让我感觉不好?).

散列函数也伪随机地"散布"哈希字符串中的盐.

哈希检查功能反转盐洒,然后进行实际的哈希检查.

现在,我知道每个密码哈希的唯一salt =好,但是具有散列密码并创建存储在db函数中的salt的逻辑可能=坏.

我喜欢盐不明显的想法,它也不需要基于一些有希望的一致性值,如用户名,用户ID,出生日期等,但正如我所说,我确实对实现有疑问.

那么,人们对"最佳方法解决方案"的看法和想法是什么?

eri*_*son 14

盐并不需要是秘密.对于给定的密码,它确实是不可预测的.

从密码中获取盐完全忽略了这一点.

  • 我同意; 虽然从用户名(或其他用户信息)中获取盐并不可怕,但它可以使某些攻击更容易.如果我有兴趣尝试在不同的站点上破解具有相同名称的用户的密码,并且每个站点都使用用户名作为salt,那么创建字典可能是值得的.当从加密RNG中选择随机盐时效果如此之好,并且如此容易,为什么还要搞乱别的什么呢? (4认同)

Jef*_*tin 11

盐的目的是使彩虹表的使用过于昂贵,因此尝试1几乎可以正确地解决问题.基于密码的盐消除了使彩虹表失败的可变性,并且试图将其隐藏在散列密码字段中是没有意义的.

  • 是的,这是对情况的准确分析.拟议的方案增加了复杂性但不增加安全性 (2认同)

Ran*_*pho 7

我之前问了一个类似的问题.共识是这样的:

无论你怎么加盐,只要你:

  1. 哈希之前加盐
  2. 每个密码使用一个随机盐
  3. 使用足够大的盐使彩虹表禁止.

您甚至可以将您的盐存储在您的哈希密码旁边,并且非常自信.

就个人而言,我发现GU​​ID(字符串格式)对Salts非常有用.他们采用一行代码来生成,并且以字符串格式的大小足以使彩虹表花费数千年来计算.