我需要知道成功使用Preimage攻击的成本(“在加密中,对加密哈希进行的前映像攻击是尝试查找具有特定哈希值的消息。”,维基百科)。
我想要散列的消息由六位数字(出生日期)组成,然后是四位随机数字。这是一个社会安全号码。
是否还可以使用特定密码对某些内容进行哈希处理。这将引入另一层安全性,因为必须知道密码才能为消息生成相同的哈希值。
我正在考虑使用SHA-2。
答案 0 :(得分:3)
如果你想知道找到你所描述的字符串的原像是多么昂贵,你需要弄清楚有多少可能的字符串。由于前6位数字是出生日期,因此它们的价值比10 ^ 6的幼稚假设更受限制 - 我们的上限为366 * 100(一年中的每一天,加上两位数年份)。 / p>
剩下的4个'随机'数字允许另外10 ^ 4种可能性,给出不同的哈希值总数为366 * 100 * 10 ^ 4 = 366,000,000个哈希值。
有了这么少的可能性,它应该可以在现代计算机上在几分之一秒内找到一个原像 - 或者就此而言,为每个可能的哈希构建一个查找表。
汤姆建议,使用盐会使查找表变得不切实际,但是如果有效值范围有限,那么暴力攻击仍然非常实用,因此单凭这一点并不足以使攻击变得不切实际。 / p>
使事情变得更加昂贵的一种方法是使用迭代散列 - 即散列散列,并重复散列。与攻击者相比,你必须做的散列要少得多,因此成本的增加对他们的影响要大于对他们的影响。然而,鉴于搜索空间很小,这仍然只是一个权宜之计。
就“使用密码”而言,听起来你正在寻找HMAC - 一种使用哈希的结构,但只有拥有密钥才能验证。如果你能保守关键秘密 - 如果你假设只有你的系统在一开始就受到损害才能获得哈希值,这绝非易事 - 这是一个实用的系统。
编辑:好的,所以“一小段时间”可能有点夸张,至少在我的微不足道的Python测试中。然而,在短时间内在单台计算机上暴力破解仍然是完全可行的。
答案 1 :(得分:2)
SHA-2,盐,preimage atttacks,暴力强制限制,6位数字 - 如果我们有一个我们可以转动的表盘将让我们调整安全性,这将是很棒的。像这样:
Time to compute a hash of an input:
SHA-2, salted Better security!
| |
\|/ \|/
|-----------------------------------------------------|
.01 seconds 3 seconds
如果我们可以这样做,那么应用程序在验证用户输入的数据与您所散列的数据相匹配时,实际上会慢几秒。
但想象成为攻击者!
太棒了,他使用盐来散打东西,但是只有366,000,000个可能的哈希值,我将以每秒10000次的速度进行闪耀,并在~10小时内完成!
等等,发生了什么!我每2.5秒只能做1次?!这将花费我29年!!
那会很棒,不是吗?
当然可以。
我告诉你:scrypt和bcrypt。他们给你那个表盘。想花一分钟哈希密码吗?他们可以做到这一点。 (只要确保你记住盐!)
答案 2 :(得分:1)
我不确定您的问题究竟是什么,但为了使您的加密值更安全,请使用salt值。
编辑:我认为你在描述问题中的盐值。