我目前正在开发一个需要高级别安全性的Web应用程序,而且我一直在考虑密码处理。我应该使用散列密码,并且有足够大的盐是给定的,但是使用不同的盐或不同的算法多次散列密码会有好处吗?
我并不是指你应该多次散列密码来生成密码哈希值Hash(Hash(Hash(salt + psw)))=pswhash
,而是考虑使用Hash(Hash(Hash(salt1 + psw)))=pswhash1
和Hash(Hash(Hash(salt2 + psw)))=pswhash2
,然后在登录时与两者进行比较。
使用此例程,攻击者不仅必须找到生成pswhash的密码,还必须找到必须正确生成两个哈希值的密码。这样,冲突的可能性几乎为零,但攻击者可以使用第二个哈希来确定第一个哈希中的密码是否正确。
有关申请的其他信息: 该应用程序主要是我们公司的内部应用程序。 Alla连接使用https处理,所有用户名对于此应用程序都是唯一的(因此您无法选择用户名),并且所有密码对于此应用程序都是唯一的(随机生成,您无法选择它们)。我们主要担心的是,在我们做出反应之前,有人会对系统进行未经授权的访问。如果我们有时间反应“他们”可以找到确切密码并不是那么大的事实。
答案 0 :(得分:5)
使用久经考验的技术 - 例如PBKDF2 - 而不是尝试自己动手。
答案 1 :(得分:0)
你应该多次散列密码,足够的时间来占用很短的时间。这使得无法访问您的数据库的黑客无法单独破解密码,因为所需的处理能力呈指数级增长。
See this question for related information
我认为使用多种盐进行散列基本上是另一种重复方式,并且通过默默无闻来保证安全,而不是这样做,我只会坚持重复。