原像电阻和第二原像电阻之间的差异
Difference between preimage resistance and second-preimage resistance
Wikipedia 说:
preimage resistance:对于基本上所有预先指定的输出,要找到散列到该输出的任何输入在计算上是不可行的,即,很难找到给定 "y" 的任何原像 x 使得 h(x) = y.
second-preimage resistance:要找到与指定输入具有相同输出的任何第二个输入在计算上是不可行的,即给定 x,它很难找到第二个原像 x' ≠ x 使得 h(x) = h(x′).
然而,我不明白。 h(x′)(其中输入 x')生成 y(输出),然后与相同的 h(x)?
进行比较
说,我有一个字符串 "example"。它生成 MD5“1a79a4d60de6718e8e5b326e338ae533”。为什么仅使用 MD5 与执行 MD5(示例)不同?
你了解原像和第二原像电阻吗?它说哈希函数的输出是唯一的,至少在理论上是这样。并且从哈希中获取原始字符串是 "computationally" 不可行的。虽然这是可能的(蛮力),但会占用大量时间和资源。
现在,哈希函数的输出和字符串本身是不同的。例如,考虑一个带有仪表板的网站。您在注册时提供 user_id 和密码。如果该网站将您的密码原样存储在他们的数据库中,黑客就可以访问它。他可以访问您的帐户。但是,如果存储了你密码的哈希值,即使他设法破解了服务器,该哈希值对他也毫无用处。因为,他没有你的密码就无法访问你的账户,并且从哈希中获取你的密码在计算上是不可行的(原像抵抗)。将 md5(您的密码)与存储在数据库中的哈希值进行比较是不同的。每次您输入密码时,都会使用 sampe 哈希函数对其进行哈希处理,并与现有的哈希值进行比较。根据 second-preimage resistance,如果您输入的密码不正确,哈希值将不匹配。
哈希的另一个例子是在版本控制或源代码控制机制中。为了跟踪文件中的更改,使用散列。他们散列整个文件并保留它。如果一个文件被修改,它的散列也会相应地改变。
这些都是解释您所问内容的示例。
理想的哈希就像取一个人的指纹一样,唯一,不可逆(不能只从指纹中找回整个人),可以作为一个简短的标识符对于给定的人。
如果我们将您介绍的一些术语带入我们的类比,我们会看到 原像抗性 指的是哈希函数不可逆的能力。想象一下,如果你能从他们的指纹中生成一个完整的人的肖像,除了非常酷之外,这也可能是非常危险的。出于同样的原因,必须制作散列函数,使攻击者无法找到生成散列的原始消息。从这个意义上说,哈希函数是单向,因为消息生成哈希,不是,相反。
第二原像阻力指的是给定哈希函数的唯一性能力。如果任何数量的人都可以共享相同的指纹,则法医指纹识别将是一种严重的时间浪费(现在让我们排除同卵双胞胎。编辑: 请参阅下面 Det 的评论)。如果给定的散列用于验证数据是否损坏,那么如果损坏的数据很有可能生成相同的散列,那将毫无意义。
要同时具有原像抗性和第二原像抗性哈希函数采用几个特征来帮助它们。哈希函数非常常见的一个特征是给定的输入与输出没有对应关系。单个位的更改可以产生一个完全没有字节与原始输入的哈希共享的哈希。为此,在消息认证中常用一个好的散列函数。
虽然你是对的,直接比较原始消息在功能上等同于比较哈希值,但在大多数情况下根本不可行。例如:
如果 A 方想要可靠地向 B 方发送消息,A/B 方需要就传输过程中检测数据损坏的方案达成一致。注:乙方只有甲方发送后才能得到原始消息。
一种可能的传输方案是将消息传输两次,以便乙方可以验证第二条消息是否与第一条消息相同。这样做的问题是,损坏可能会在同一个地方发生两次(以及显着更高的带宽)。这只能通过发送更多次消息来减少,从而产生严重的带宽成本。
作为替代方案,A 方可以将 his/her 长消息传递给散列函数并生成一个短散列 he/she 发送给 B 方,然后是原始消息。然后,B 方可以获取收到的消息并将其传递给哈希函数并匹配哈希值。如果消息或散列在传输过程中被损坏,即使只有一位,结果散列将不匹配,这要归功于第二个原像抵抗(没有两个明文应该具有相同的散列)。
如果消息在传输过程中被加密但散列是在加密之前获取的(这是否合适是另一个讨论),那么在这种情况下,原像抵抗将很有用。如果哈希是可逆的,窃听者可以拦截哈希并反向查找原始消息。
所有的散列函数都不相等,这就是为什么在选择使用哪些、哪些是安全的以及哪些 should be deprecated and replaced.[=11 时,重要的是要考虑它们的原像 resistance/second 原像抵抗力=]
Wikipedia 说:
preimage resistance:对于基本上所有预先指定的输出,要找到散列到该输出的任何输入在计算上是不可行的,即,很难找到给定 "y" 的任何原像 x 使得 h(x) = y.
second-preimage resistance:要找到与指定输入具有相同输出的任何第二个输入在计算上是不可行的,即给定 x,它很难找到第二个原像 x' ≠ x 使得 h(x) = h(x′).
然而,我不明白。 h(x′)(其中输入 x')生成 y(输出),然后与相同的 h(x)?
进行比较说,我有一个字符串 "example"。它生成 MD5“1a79a4d60de6718e8e5b326e338ae533”。为什么仅使用 MD5 与执行 MD5(示例)不同?
你了解原像和第二原像电阻吗?它说哈希函数的输出是唯一的,至少在理论上是这样。并且从哈希中获取原始字符串是 "computationally" 不可行的。虽然这是可能的(蛮力),但会占用大量时间和资源。
现在,哈希函数的输出和字符串本身是不同的。例如,考虑一个带有仪表板的网站。您在注册时提供 user_id 和密码。如果该网站将您的密码原样存储在他们的数据库中,黑客就可以访问它。他可以访问您的帐户。但是,如果存储了你密码的哈希值,即使他设法破解了服务器,该哈希值对他也毫无用处。因为,他没有你的密码就无法访问你的账户,并且从哈希中获取你的密码在计算上是不可行的(原像抵抗)。将 md5(您的密码)与存储在数据库中的哈希值进行比较是不同的。每次您输入密码时,都会使用 sampe 哈希函数对其进行哈希处理,并与现有的哈希值进行比较。根据 second-preimage resistance,如果您输入的密码不正确,哈希值将不匹配。
哈希的另一个例子是在版本控制或源代码控制机制中。为了跟踪文件中的更改,使用散列。他们散列整个文件并保留它。如果一个文件被修改,它的散列也会相应地改变。
这些都是解释您所问内容的示例。
理想的哈希就像取一个人的指纹一样,唯一,不可逆(不能只从指纹中找回整个人),可以作为一个简短的标识符对于给定的人。
如果我们将您介绍的一些术语带入我们的类比,我们会看到 原像抗性 指的是哈希函数不可逆的能力。想象一下,如果你能从他们的指纹中生成一个完整的人的肖像,除了非常酷之外,这也可能是非常危险的。出于同样的原因,必须制作散列函数,使攻击者无法找到生成散列的原始消息。从这个意义上说,哈希函数是单向,因为消息生成哈希,不是,相反。
第二原像阻力指的是给定哈希函数的唯一性能力。如果任何数量的人都可以共享相同的指纹,则法医指纹识别将是一种严重的时间浪费(现在让我们排除同卵双胞胎。编辑: 请参阅下面 Det 的评论)。如果给定的散列用于验证数据是否损坏,那么如果损坏的数据很有可能生成相同的散列,那将毫无意义。
要同时具有原像抗性和第二原像抗性哈希函数采用几个特征来帮助它们。哈希函数非常常见的一个特征是给定的输入与输出没有对应关系。单个位的更改可以产生一个完全没有字节与原始输入的哈希共享的哈希。为此,在消息认证中常用一个好的散列函数。
虽然你是对的,直接比较原始消息在功能上等同于比较哈希值,但在大多数情况下根本不可行。例如:
如果 A 方想要可靠地向 B 方发送消息,A/B 方需要就传输过程中检测数据损坏的方案达成一致。注:乙方只有甲方发送后才能得到原始消息。
一种可能的传输方案是将消息传输两次,以便乙方可以验证第二条消息是否与第一条消息相同。这样做的问题是,损坏可能会在同一个地方发生两次(以及显着更高的带宽)。这只能通过发送更多次消息来减少,从而产生严重的带宽成本。
作为替代方案,A 方可以将 his/her 长消息传递给散列函数并生成一个短散列 he/she 发送给 B 方,然后是原始消息。然后,B 方可以获取收到的消息并将其传递给哈希函数并匹配哈希值。如果消息或散列在传输过程中被损坏,即使只有一位,结果散列将不匹配,这要归功于第二个原像抵抗(没有两个明文应该具有相同的散列)。
如果消息在传输过程中被加密但散列是在加密之前获取的(这是否合适是另一个讨论),那么在这种情况下,原像抵抗将很有用。如果哈希是可逆的,窃听者可以拦截哈希并反向查找原始消息。
所有的散列函数都不相等,这就是为什么在选择使用哪些、哪些是安全的以及哪些 should be deprecated and replaced.[=11 时,重要的是要考虑它们的原像 resistance/second 原像抵抗力=]