0

如果我将散列值存储在数据库中,但被散列的原始值的长度是固定的(例如,始终为 4 个字符),这是否会损害散列函数的单向性质?

更准确地说,我有敏感字符串,然后我将其加密并存储在数据库中。为了搜索这些字符串,我不想解密数据库中的每个条目,因此我还将字符串的前 4 个字符的哈希存储在另一列中。当我想搜索数据库时,我会生成搜索词前 4 个字符的哈希值,并将其与存储的哈希值进行比较,以查找哪些条目匹配或可以匹配,然后解密这些条目以检查冲突并获取其余部分与该条目相关的数据。

我担心的是,由于攻击者知道被散列的字符串的长度是恒定的(4 个字符),他/她只需要生成所有可能的 4 个字母字符串及其散列的表并查找散列值存储在我的数据库中(从而放弃原始敏感字符串的前 4 个字符)。

4

2 回答 2

0

你的结论非常正确。如果攻击者知道您的哈希是 4 个字符的字符串,那么通过蛮力找到纯文本非常简单。除了让攻击者了解您的敏感数据的前 4 个字符之外,它还可以让他们了解您用于加密数据的部分密钥(简单地说,加密是密钥 XOR 明文,这意味着明文XOR 加密 = 密钥)。虽然使用这些信息来破解其余的加密是具有挑战性的,但密码攻击已经建立在较少的基础上。

于 2013-09-06T23:05:37.300 回答
0

根据您要执行的搜索类型,您可以使用几个选项来改进您的方案:

  1. 搜索完整字符串:您可以加密搜索词并对其进行查询。或者存储加密字符串的哈希值,如果您的字符串很长,请对其进行查询。

  2. 搜索部分字符串:通过使用键控散列而不是简单散列来更改您的方案。

于 2013-09-09T01:13:11.137 回答