我在这里阅读 Hashes and Salts 并考虑了另一种进行用户身份验证的方法。我需要您对此的想法,因为我可能会忽略某些东西。
设想:
对于 Web 应用程序身份验证,一般趋势是对密码附加随机盐进行哈希处理,具有强大的哈希函数。随机盐和生成的哈希存储在数据库中。稍后,当用户想要进行身份验证时,用户输入的密码会再次与存储的 salt 进行散列,并将生成的散列与之前存储的散列进行比较。
现在谈谈我的方法:
- 我们在我们的数据库中存储一个主密钥文本(只要它需要),并且我们对每个用户使用唯一的盐。
- 我们不是存储密码哈希,而是使用用户密码作为密钥对称加密 (hash(master secret + salt)) 并将这个加密值存储在我们的数据库中。
- 当用户想要进行身份验证时,这个先前存储的加密值将使用用户密码作为密钥进行解密,我们将得到一个哈希(master secret + salt)。这个解密的哈希将与新计算的哈希(主密码+盐)进行比较
- 如果用户输入错误的密码,解密将失败,我们将得到一个错误的哈希值,无法与哈希值(master secret + salt)进行比较
通过这种方式,我们不会以任何形式(纯文本、哈希、加密)将用户密码存储在数据库中。我想知道这种方法与我们常用的密码散列方法相比如何。