【问题标题】:Does PBKDF2 generate the unique hash?PBKDF2 是否生成唯一哈希?
【发布时间】:2017-04-09 13:57:24
【问题描述】:

我想生成一些数据的哈希。 通过一些哈希算法,我可以找到最适合我的应用程序的 bcrypt 和 PBKDF。 可能会有不同的数据算法生成相同的哈希值(就像在 MD5 中,它可以为不同类型的数据生成相同的哈希值)。

根据许多专家的评论,bcrypt 是最好的安全散列算法,它提供了不同散列之间的唯一性。

但是,PBKDF2 是否提供哈希的唯一性?

编辑 1

我需要使用相同的输入数据生成哈希(哈希键将为相同的输入生成不止一次),但它不应该为不同的输入数据生成相同的哈希(可能在某些哈希算法中发生)。

【问题讨论】:

  • 首先,这是错误的论坛。其次,您实际需要哪些属性以及您想要完成什么?
  • 您是想根据密码生成加密密钥,还是只想获取某些数据的唯一标识符?
  • 我想要基于某个唯一标识符的加密(散列)密钥,并且该散列密钥应该是唯一标识(不应具有具有不同 ID/密码的相同密钥)。我担心的是,哈希算法可能会为不同的 ID/密码生成相同的哈希键。那么 PBKDF2 会像 bcrypt 一样处理它吗?
  • 如果您只需要一个唯一代表输入数据的散列,那么很可能任何当前的加密消息摘要(例如 SHA2)就足够了。发生碰撞的机会非常小,可以忽略不计。 但是只要您不解释您的用例是什么,我们就无法判断。
  • 如果源域大于散列值的域,则散列函数无法提供唯一性,这几乎不是这种情况。即使源域很小,也总会有冲突的变化,即两个源值映射到同一个哈希值。因此,无论您选择或做什么,它们都无法提供独特性。

标签: security cryptography pbkdf2 hashalgorithm


【解决方案1】:

诸如 SHA-2 之类的算法就足够了。生成的散列对于消息不是唯一的。甚至有无限数量的消息散列到相同的值。诀窍是不可能找到创建此哈希的其他消息之一。

在生成两个具有不同消息的哈希时,产生冲突的机会等于 SHA-256 的 1/2^256。但是,您可以生成和存储哈希值,然后计算所有可能的 pairs 之一相同的机会。在这种情况下,生日问题是有效的。这就是为什么哈希只能提供一半的安全性。因此,在 340282366920938463463374607431768211456 中,产生 2^128 个哈希值的冲突的可能性是(大约)1/2^128 或 1。这就是为什么您只需要担心诸如 MD5(可能还有 SHA-1 in不久的将来)。

实际上 PBKDF2 的内部状态与使用的内部哈希相同。使用 PBKDF2(除了作为 Key Derivation Function 而不是散列)对您毫无帮助。它和内部散列一样容易受到冲突的影响(或者更确切地说,容易受到影响)。

【讨论】:

  • 感谢 Maarten 的澄清。 (y)
猜你喜欢
  • 2017-11-11
  • 2013-07-29
  • 1970-01-01
  • 1970-01-01
  • 2014-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多