创建存储在DBMS中的哈希值,请执行以下操作:
- 作为盐的一部分,使用唯一于DBMS服务器实例的值, - 使用用户名作为盐的第二部分, - 创建盐与实际密码的串联, - 使用SHA-256算法对整个字符串进行哈希, - 并将结果存储在DBMS中。
这意味着任何想要制造冲突的人都必须为每个用户名和每个DBMS服务器实例单独完成工作。我计划使实际哈希机制略微灵活,以允许使用仍在开发中的新NIST标准哈希算法(SHA-3)。
“唯一于DBMS服务器实例的值”不需要保密 - 尽管不会轻易透露。目的是确保如果某人在不同的DBMS服务器实例中使用相同的密码,则记录的哈希值将不同。同样,用户名不需要保密 - 只有密码本身需要保密。
将密码放在第一位,将用户名和“唯一值”放在第二位,或者对三个数据源的排列进行任何其他排列,是否有任何优势?或者交错字符串呢?
我需要添加(并记录)一个随机的盐值(每个密码一个)来增加密码的安全性吗?(优点:用户可以重复使用密码,但是数据库中记录的哈希值很可能不同。缺点:必须记录盐值。我认为优点远大于缺点。)
相关的SO问题很多 - 这个列表可能不全:
我认为这些问题的答案支持了我的算法(尽管如果您仅使用随机盐,则“每个服务器的唯一值”和用户名组件就不那么重要)。