Security 如果y已知,散列(x+;y)有多强?

Security 如果y已知,散列(x+;y)有多强?,security,hash,Security,Hash,如果有两个二进制blob,x和y。然后将它们散列在一起,比如使用SHA-512。入侵者知道,反转散列要容易多少 在它成为一个问题之前,是否有一个关于y和x的比较的指南?这有关系吗?没有比散列(x)本身更强的了。强度取决于您使用的散列算法,即如果入侵者知道您如何组合这两个值,并且他知道y,那么强度并不比您刚刚离开y要好。如果您使用的是加密强散列(如SHA-512或新的SHA3,但不是像MD4这样的破散列),那么,当已知y时,中断散列(x | | y)(其中| |表示串联)的难度至少与中断散列(x)

如果有两个二进制blob,
x
y
。然后将它们散列在一起,比如使用
SHA-512
。入侵者知道,反转散列要容易多少


在它成为一个问题之前,是否有一个关于y和x的比较的指南?这有关系吗?

没有比散列(x)本身更强的了。强度取决于您使用的散列算法,即如果入侵者知道您如何组合这两个值,并且他知道
y
,那么强度并不比您刚刚离开
y
要好。

如果您使用的是加密强散列(如SHA-512或新的SHA3,但不是像MD4这样的破散列),那么,当已知
y
时,中断
散列(x | | y)
(其中
| |
表示串联)的难度至少与中断
散列(x)
的难度相同。在许多情况下,添加已知的
y
非常有用:

  • 使用一个随机的
    y
    作为salt,因此对相同的两个
    x
    s进行散列会产生不同的结果
  • 添加一个长的填充字符串以降低哈希计算速度,从而阻碍bruteforce(这也可以通过多次迭代哈希来实现)
  • 作为创建一次性共享密钥的临时值

这些方案的安全性取决于上述破坏
散列(x | | y)
的难度

我不同意安全性并不比不使用
y
更好。请参阅我的答案,了解添加已知的
y
比不添加一个好的情况。攻击者不应该知道salt,也不应该知道它经过了多少次哈希运算。只有合格的用户才知道这一点。否则就没用了。但是,如果攻击者不知道额外的数据,安全性就会提高。但是,如果攻击者发现了盐,至少他不能使用彩虹表(预计算哈希)来破解密码。这就是重点。即使攻击者拥有salt和hash,安全性也会更高,因为预计算无法提供帮助。你也可以辩称“攻击者不应该知道密码”,并将密码以明文形式存储在“安全”数据库中。毕竟,如果哈希值从未被公开,那么它是“无用的”!但是,每个人都会告诉你,以明文存储密码绝对是个坏主意。安全就是层层防御;仅仅因为攻击者不应该知道盐并不意味着他们不会知道。