【发布时间】:2018-11-09 16:29:42
【问题描述】:
考虑以下场景:
- 用户在网站上输入唯一代码(比如礼品卡)。
- 代码对应于数据库中必须检索的对象。
- 代码是机密,不能以纯文本形式存储。
- 相反,代码将被散列并存储在数据库中。哈希算法将是 sha-512 或 bcrypt 结合一些加盐策略。
为了查找代码,必须对用户输入的代码进行哈希处理。通常,在密码认证的情况下,用户的身份是已知的,因此可以在计算哈希之前从数据库中检索盐。在上述场景中,虽然无法加载与代码关联的盐,因为我们不知道代码对应于数据库中的哪个对象。这似乎意味着对于这种盐可以是随机的方案没有这样的加盐策略。
我想就以下想法提供意见:
我们可以对用户输入的代码进行散列(比如 sha2)作为盐吗?
salt = sha2(code)
hashedCode = hash(code + salt)
如果存在上述漏洞,是否可以在哈希中包含一些额外的全局机密有助于降低风险?
salt = sha2(code + globalSecret)
hashedCode = hash(code + salt)
谢谢!
【问题讨论】:
标签: security hash architecture salt deterministic