维基百科说:
原像电阻:对于基本上所有预先指定的输出,在计算上找不到散列到该输出的任何输入,即,很难找到给定“ y”使得h(x)= y的任何原像x。
第二原像电阻:找到任何与指定输入具有相同输出的第二输入在计算上是不可行的,即,给定x,很难找到第二原像x'。使得h(x)= h(x?)。
但是,我不明白。不H(X?) (其中,X”是输入)产生该Ý(输出),然后将其与相同H(X) ?
说,我有一个字符串“ example”。生成MD5“ 1a79a4d60de6718e8e5b326e338ae533”。与仅使用MD5(示例)相比,为什么只使用MD5有何不同?
理想的散列就像获取一个人的指纹一样,它是唯一的,它是不可逆的(您不能仅从指纹中将整个人带回来),并且可以用作给定人的简短标识符。
如果我们将您介绍的一些术语带入类比,我们会看到原像抵抗是指哈希函数不可逆的能力。想象一下,如果您能从他们的指纹中获得整个人的相似之处,除了非常酷之外,这还可能非常危险。出于相同的原因,必须使用哈希函数,以使攻击者无法找到生成哈希的原始消息。从这个意义上说,散列函数是单向的,因为消息生成散列,而不是相反。
第二原像抗性指的是给定哈希函数的唯一能力。如果任何数量的人可以共享相同的指纹,法医指纹识别将是时间的浪费(现在让同卵双胞胎排除在外。编辑:请参阅下面的Det评论)。如果将给定的哈希值用于验证数据是否损坏,那么很有可能损坏数据可以生成相同的哈希值。
为了同时具有原像抵抗力和第二原像抵抗力,哈希函数采用了几个特征来帮助他们。哈希函数非常常见的一个特征是给定输入与输出不对应。单个位更改可以产生一个散列,该散列完全没有与原始输入的散列共享的字节。因此,良好的哈希函数通常用于消息身份验证。
尽管您正确地直接比较原始消息在功能上等同于比较散列,但是在大多数情况下这根本不可行。例如:
如果甲方希望可靠地向乙方发送消息,则甲方/乙方需要商定一种在传输过程中检测数据损坏的方案。注意:在甲方发送之前,乙方没有原始消息。
一种可能的传输方案是两次传输消息,以便乙方可以验证第二条消息是否等于第一条消息。问题是,有可能在同一位置(以及明显更高的带宽)发生两次损坏。这只能通过发送更多次消息来减少,这会导致严重的带宽成本。
作为替代,甲方可以将他/她的长消息传递给哈希函数,并生成一个简短的哈希,然后将其发送给乙方,随后是原始消息。然后,乙方可以接收收到的消息,并将其传递给哈希函数并匹配哈希。如果消息或散列在传输过程中甚至被单个位破坏,由于第二个原像抵抗(没有两个纯文本应该具有相同的散列),生成的散列将不匹配。
如果在传输过程中对邮件进行了加密,但哈希是在加密之前进行的,则在这种情况下,“前映像抗性”将很有用(是否合适,这是另一个讨论)。如果哈希是可逆的,则窃听者可以拦截哈希并反转以查找原始消息。
所有哈希函数都不相等,这就是为什么在选择要使用的,安全的以及应弃用和替换的那些时考虑其原像电阻/第二原像电阻的重要性。
| 归档时间: |
|
| 查看次数: |
4170 次 |
| 最近记录: |