Hash 前像电阻和第二前像电阻之间的差异

Hash 前像电阻和第二前像电阻之间的差异,hash,cryptography,Hash,Cryptography,说: 前像电阻:对于基本上所有预先指定的输出,在计算上不可能找到任何散列到该输出的输入,即,很难找到给定“y”的任何前像x,使得h(x)=y 第二前像电阻:在计算上不可能找到与指定输入具有相同输出的任何第二输入,即给定x,很难找到第二前像x'≠ 使得h(x)=h(x′) 然而,我不明白。h(x′)(其中输入x')是否生成y(输出),然后将其与相同的h(x)进行比较 比如,我有一个字符串“example”。它生成MD5“1a79a4d60de6718e8e5b326e338ae533”。为什么

说:

  • 前像电阻:对于基本上所有预先指定的输出,在计算上不可能找到任何散列到该输出的输入,即,很难找到给定“y”的任何前像x,使得h(x)=y

  • 第二前像电阻:在计算上不可能找到与指定输入具有相同输出的任何第二输入,即给定x,很难找到第二前像x'≠ 使得h(x)=h(x′)

然而,我不明白。h(x′)(其中输入x')是否生成y(输出),然后将其与相同的h(x)进行比较


比如,我有一个字符串“example”。它生成MD5“1a79a4d60de6718e8e5b326e338ae533”。为什么只使用MD5与使用MD5(示例)不同?

您了解前映像和第二个前映像的阻力?它说散列函数的输出是唯一的,至少在理论上是如此。。从散列中获取原始字符串在计算上是可行的。虽然这是可能的(暴力),但会占用大量的时间和资源

现在,哈希函数的输出和字符串本身是不同的。。例如,考虑一个带有仪表板的网站。您在注册时提供您的用户名和密码。如果网站将你的密码存储在他们的数据库中,黑客就可以访问它。他可以访问你的帐户。但是,如果存储了密码的散列,即使他设法入侵服务器,该散列对他也没有用处。因为,如果没有您的密码,他无法访问您的帐户,并且从哈希(preimage resistance)中获取您的密码在计算上是可行的。将md5(您的密码)与数据库中存储的哈希进行比较是不同的。每次输入密码时,都会使用sampe散列函数对其进行散列,并与现有散列进行比较。根据第二个前映像阻力,如果输入了错误的密码,哈希值将不匹配

散列的另一个例子是在版本控制或源代码控制机制中。要跟踪文件中的更改,可以使用哈希。他们散列整个文件并保存它。如果一个文件被修改,它的散列会相应地改变


这些都是解释你所问问题的例子。

理想的散列就像是提取一个人的指纹,它是唯一的,是不可逆的(你不能仅仅从指纹中取回整个人),它可以作为给定人的简短标识符

如果我们将您介绍的一些术语引入我们的类比中,我们会看到前映像阻力指的是哈希函数不可逆的能力。想象一下,如果你能从指纹中生成一个完整的人的肖像,除了非常酷之外,这也可能非常危险。出于同样的原因,必须创建哈希函数,以便攻击者无法找到生成哈希的原始消息。从这个意义上讲,散列函数是单向的,因为消息生成散列,而不是另一种方式

第二个前映像阻力是指给定哈希函数的唯一性。如果任何数量的人都可以共享同一个指纹,那么法医指纹识别将是一种严重的时间浪费(暂时排除同卵双胞胎。编辑:见下文Det的评论)。如果给定的散列用于验证数据是否损坏,那么如果损坏的数据很有可能生成相同的散列,那么它将毫无意义

为了同时具有前映像阻力和第二个前映像阻力,哈希函数采用了几个特性来帮助它们。哈希函数的一个常见特征是给定的输入与输出没有对应关系。单位更改可以生成一个哈希,该哈希与原始输入的哈希完全没有共享的字节。因此,好的哈希函数通常用于消息身份验证

虽然您是对的,直接比较原始消息在功能上等同于比较散列,但在大多数情况下,这是不可行的。例如:

如果甲方希望可靠地向乙方发送消息,则甲方/乙方需要商定一个在传输过程中检测数据损坏的方案。注:在甲方发送之前,乙方没有原始信息

一种可能的传输方案是传输两次消息,以便乙方可以验证第二条消息是否等于第一条消息。问题是,在同一个地方(以及明显更高的带宽)有可能发生两次损坏。这只能通过发送更多次的消息来减少,从而导致严重的带宽成本

作为替代方案,甲方可以将其长消息传递到散列函数中,并生成一个短散列,发送给乙方,然后发送原始消息。然后,乙方可以接收接收到的消息并将其传递到散列函数中,并匹配散列。如果消息或散列在传输过程中被损坏,即使只有一个位,由于第二个前映像的阻力(没有两个明文应该有相同的散列),结果散列也不会匹配

在这种情况下,如果在传输过程中对消息进行了加密,但哈希值是在加密之前进行的,那么预映像抵抗将非常有用(这是否合适,另作讨论)。如果散列是可逆的,窃听者可以截获散列并反向查找原始消息


所有的哈希函数都是不相等的,这就是为什么在选择哪一个时要考虑它们的预像电阻/第二个图像电阻的原因,哪些是安全的,哪些是安全的。我的意思是为什么用散列而不是普通字符串。是这样吗?@elf ma