【发布时间】:2011-04-16 12:00:55
【问题描述】:
我是一个(接近完整的)初学者,这是我第一次涉足加密领域——事实上这可能是我第一次使用这个词。
这是我的问题:对于非银行/军事甚至商业网络应用程序,为用于密码的哈希函数选择盐的正确方法是什么?
我可以轻松地为每个新用户生成一个伪随机盐,并在应用散列函数之前将该盐附加到他们的 pw 中。但是我仍然需要存储盐,所以大概任何可以访问散列密码的人也会得到盐。
盐的好处仅仅是让密码“更随机”,从而打败标准的基于字典的彩虹表吗?
以下任何一个都是好的实用的想法:
- 将盐存储在单独的数据库中 - 可能是单独的系统,肯定是不同的主机、名称、密码等。
- 根据用户名(或名字+姓氏,或注册日期)的散列生成盐,大概使用不同的散列函数?然后盐本身不会存储在数据库中 - 只有用于计算它的数据会......
- 在数据库中存储一个连接散列密码和盐的值,以一种不明显的方式(例如,盐是 10 个随机键,它们被注入到字母数字 1&2、4&5、8&9 之间的散列密码中,等)。
作为一个附带问题,在升级网站软件时更改加盐哈希算法有多容易?现在感觉就像噩梦一样。
【问题讨论】:
-
谢谢。没有解决 1、2 和 3 - 还是我遗漏了什么?
-
关于这方面的信息很多。简而言之:使用每个用户的盐,对盐使用随机数据,不要担心“保护”盐,因为它们本身并不是秘密的。
-
如果您碰巧在数据库中为用户使用了 GUID id;这可以作为盐字节的绝佳来源。
-
@DanP - 非常好的意见,谢谢。
标签: security encryption hash