当前位置: 首页 > 面试题库 >

使用随机盐改善密码哈希

程树
2023-03-14
问题内容

我正在建立一个网站,并试图决定如何加密用户密码以将其存储在SQL数据库中。

我意识到使用简单的md5(password)是非常不安全的。我正在考虑使用sha512(password.salt),并且我一直在研究生成有用盐的最佳方法。我阅读了许多文章,指出盐应尽可能地随机以增加哈希值的熵,这似乎是个好主意。但:

  • 您需要将随机盐与哈希一起存储
  • 鉴于攻击者以某种方式可以访问您的哈希密码(并试图将哈希值反转为纯文本),这意味着他可能已转储您的数据库,然后还可以访问您的随机盐

数据库中哈希旁边的看起来很奇怪的值难道不是很明显吗?如果攻击者可以使用哈希值和哈希值来访问盐,那如何更安全?

在这方面有专业知识吗?谢谢!


问题答案:

攻击者被 “允许” 知道盐-必须以某种方式设计安全性,即使知道盐也仍然是安全的。

盐有什么作用?

盐有助于使用预先计算的“彩虹表”防御暴力攻击。
盐会使暴力破解者的攻击者(在时间/内存方面)更加昂贵。
计算这样的表是昂贵的,并且通常仅在它可以用于多个攻击/密码时才进行。
如果您对所有密码使用相同的盐,那么攻击者可以预先计算出这样的表,然后将您的密码暴力破解为明文…
只要您为每个想要生成的密码生成一个新的(最佳加密强度)随机盐存储哈希值没有问题。


如果您想进一步加强安全性,则
可以多次计算哈希(哈希等)-这虽然不花很多钱,但会使蛮力攻击/计算“彩虹表”的成本更高。 ..请不要发明自己-
有行之有效的标准方法,请参见例如http://en.wikipedia.org/wiki/PBKDF2和http://www.itnewb.com/tutorial/Encrypting-
Passwords使用PHP来使用RSA-
PBKDF2-Standard进行存储

注意:

由于“ CPU时间”(可用于彩虹表/蛮力之类的攻击)越来越广泛地被使用,因此, 如今 使用这种机制已成为一种 挑战 。例如,Amazon
Cloud服务在最快的前50名中排名第一全球超级计算机,任何人都可以使用它的数量相对较少)!



 类似资料:
  • 创建随机盐。 使用SALT加密密码。 保存用户的salt和加密密码。 我想要盐的大小,算法给出作为输入。 我想要解密的原因是,我有一些为应用程序创建的配置文件和一些值是密码,我想要保存为加密的文件和解密时,我想要使用它。 谁能提供一个适当的例子或如何使用它在我自己的方式?我想实现Jasypt在文章中提到的。但没有可用的代码。

  • 问题内容: 所以我正在尝试bcrypt。我有一类(如下所示,该类来自http://www.firedartstudios.com/articles/read/php- security-how-to-safe-store-your- passwords ),其中包含3个功能。第一个是生成随机的Salt,第二个是使用第一个生成的Salt生成哈希,最后一个是通过将提供的密码与哈希密码进行比较来验证所提

  • 我正在为Web应用程序制作登录系统。要将密码存储在数据库中,我正在使用sha256加密密码,如下所示: 在数据库中,我存储了用户、用户密码和用于散列和验证用户登录的salt。现在,我正在向用户发送包含您的密码的电子邮件,但是当用户收到电子邮件时,由于存储在sha256加密密码中,用户收到的是一个长字符串,而不是用户应该知道的密码。 我的问题是,我可以通过任何方法向您发送实际的用户密码和非密码加密,

  • 问题内容: 目前,据说MD5部分不安全。考虑到这一点,我想知道使用哪种机制进行密码保护。 这个问题,“双重哈希”密码是否比仅哈希一次密码安全? 建议多次散列可能是一个好主意,而如何对单个文件实施密码保护?建议使用盐。 我正在使用PHP。我想要一个安全,快速的密码加密系统。将密码哈希一百万次可能更安全,但也更慢。如何在速度和安全性之间取得良好的平衡?另外,我希望结果具有恒定数量的字符。 哈希机制必须

  • 我认为我理解散列和加盐密码,但似乎我有一些误解。我在nodejs为我的网站创建一个用户帐户系统。 我的理解是,当用户创建密码时,我们会生成一个随机盐,将其附加到密码中,然后散列该字符串。我们还可以添加一个工作因子以使散列工作缓慢并防御蛮力攻击。我们将盐与散列一起存储在我们的数据库中,为了验证登录尝试,我们使用存储的盐和尝试的密码重复上述过程(在服务器上),并检查散列是否匹配。 nodejs中的模块