有关值长度的知识会影响散列完整性

时间:2013-09-06 22:21:19

标签: database security encryption hash

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

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

我担心的是,由于攻击者会知道被散列的字符串的长度是不变的(4个字符),他/她只需要生成一个包含所有可能的4个字母字符串及其散列和查找的表格存储在我的数据库中的散列值(从而泄露原始敏感字符串的前4个字符)。

2 个答案:

答案 0 :(得分:0)

你的结论非常正确。如果攻击者知道你的哈希值是4个字符的字符串,那么通过暴力查找纯文本是非常简单的。除了向攻击者提供敏感数据的前4个字符的知识外,它还可以让他们获得用于加密数据的部分密钥的知识(在简单的级别上加密是关键的XOR明文,这意味着明文XOR encrypted = key)。虽然使用这些信息来破解其余的加密技术具有挑战性,但加密攻击的基础较少。

答案 1 :(得分:0)

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

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

  2. 搜索部分字符串:使用键控哈希而不是简单哈希来改变您的方案。