破解盐渍密码的散列的时间复杂度是否大于破解未加密密码的散列的时间复杂度?

时间:2013-12-30 20:04:17

标签: encryption passwords time-complexity salt

假设有人试图通过暴力破解泄露的密码(即不使用彩虹表或常用的密码列表),以下是真的吗?

O(cracking_salted_pa​​ssword)> O(cracking_just_password)?

如果攻击者设法访问我的用户数据库,他们显然也会在对用户密码进行哈希处理时使用盐,即使它对每个用户来说都是完全唯一的。我想知道当有人试图通过蛮力破解盐渍密码时,时间复杂性是否也起作用。

3 个答案:

答案 0 :(得分:4)

  

我想知道当有人试图通过蛮力破解盐渍密码时,时间复杂度是否起作用。

不,单个密码的时间复杂度不会因为盐而大大增加。盐确实为加密时间增加了一小部分,但不足以引起问题。

这并不意味着腌制无用。腌制有两个重要原因:

1)具有相同密码的用户看起来会有所不同。如果攻击者发现多个用户拥有相同的密码,他/她将认为密码不是随机的,并首先攻击该密码。

2)它使Rainbow Tables变得不切实际。

之前,您只需要一个查找表来进行所有密码猜测。您可以离线预先计算(甚至在某些系统之间重新使用它!)。

但是当你添加一个盐时,攻击者每个用户需要一张Rainbow表。这使得Rainbow Tables呈指数级增长,甚至可以更快地使用蛮力而不是使用Rainbow Tables!

如果您只有一个用户,那么盐可能无济于事,但随着您获得更多用户,盐是必不可少的。最好总是加盐,因为小系统经常变成大系统。

答案 1 :(得分:1)

由于salting实际上只创建了特定明文所需的一定数量的不同值(即代替密码“password”散列到值X1,例如,使用16位盐,有65536种不同的可能它可以散列到的值,盐析的效果实际上只是改变方程中的常数乘法因子。换句话说,如果您的哈希算法是O(n^2),那么盐化输入会使其成为k * O(n^2),这实际上与O(n^2)相同。是的,匹配特定密码的哈希需要更多的时间,最多可达盐,但它确实不会改变O()复杂性度量。复杂性度量不是关于执行某个问题需要多长时间;它是关于解决与原始问题相比大小两倍的问题需要多长时间。

答案 2 :(得分:0)

如果有一个数据库包含数十个密码作为哈希值,并且通过散列(大)一组可能的值来产生这些哈希值,那么这项工作可以一次应用于多个哈希值

但是,如果密码被腌制,那么每个密码都是唯一的,并且需要为每个密码重复工作

相关问题