如何验证使用随机盐散列的密码?

Yas*_*sha 3 javascript sha256 owasp saltedhash penetration-testing

我正在开发一个网络应用程序。现在从安全角度来看,密码从客户端发送到服务器时需要加盐散列。 现在我的问题是,如果我随机生成一个盐,将它附加到密码并散列组合,如何验证这个密码。由于生成的盐是随机的,盐+密码组合的哈希值每次都会不同。 如果我将生成的盐和用户凭据一起发送到服务器,这将暴露盐。暴露的盐会造成类似的麻烦,因为试图破解密码的人可以在暴露的盐上附加不同的密码以获取哈希值并进行匹配。我已经检查了许多网站和有关堆栈溢出的问题,但没有完全符合我的需要。

有一些工具可以读取浏览器的内存并窃取输入的密码。因此,客户端也需要加盐哈希。

Jer*_*dev 6

您必须将盐保留在代码的服务器端。

当您对用户进行身份验证时,您将密码发送到服务器。服务器附加盐,然后散列密码。盐应该存储在服务器端代码或数据库中的某处。

永远不应该将盐发送到应用程序的客户端。

  • 但是我会避免将它与相应的哈希存储在同一个数据库中。 (3认同)
  • @尼克鲁斯勒;将盐存储在不同的数据库中只能通过默默无闻来实现安全。它增加了复杂性,但没有增加真正的额外安全性。如果一个数据库已被泄露,则可以假设其他数据库也已被泄露。正确使用盐的最重要的方面是每个用户具有良好的随机性,并且**不**将盐发送给客户端。 (2认同)

Bru*_*lza 5

将盐保存在数据库上没有问题。盐只是为了确保攻击者不会使用某些具有大量计算散列及其相应密码的表来找出受感染数据库的密码。使用盐,攻击者的唯一选择是蛮力。

因此,为了让攻击者更难暴力破解并从哈希中找出密码,我建议为每个用户提供一个长而安全的随机盐。

可以在为什么我们使用“盐”来保护我们的密码?