PBKDF2 是否生成唯一哈希?
Does PBKDF2 generate the unique hash?
我想生成一些数据的散列。
通过一些哈希算法,我可以找到最适合我的应用程序的 bcrypt 和 PBKDF。
可能存在使用不同数据算法生成相同散列的情况(如在 MD5 中,它可以为不同类型的数据生成相同散列)。
通过众多专家的评论,bcrypt 是最好的安全散列算法,它提供了不同散列之间的唯一性。
但是,PBKDF2 是否提供哈希的唯一性?
编辑 1
我需要使用相同的输入数据生成散列(散列键将针对相同的输入生成多次)但它不应该为不同的输入数据生成相同的散列(可能发生在某些散列算法中)。
诸如 SHA-2 之类的算法就足够了。生成的散列不是消息唯一的。甚至有无限数量的消息散列为相同的值。诀窍是不可能找到创建此散列的其他消息之一。
对于 SHA-256,生成两个具有不同消息的哈希值时发生冲突的几率等于 1/2^256。但是,您可以生成并存储哈希,然后计算所有可能的 对 中的一个是相同的机会。在这种情况下,生日问题就生效了。这就是哈希仅提供一半安全性的原因。因此,在 340282366920938463463374607431768211456 中,产生 2^128 个哈希值的碰撞的概率是(大约)1/2^128 或 1。这就是为什么您只需要担心损坏的哈希函数(例如 MD5(可能还有 SHA-1)中的碰撞)在不久的将来)。
实际上PBKDF2的内部状态与使用的内部散列相同。使用 PBKDF2(除了作为 Key Derivation Function 而不是散列)对您没有任何帮助。它与内部哈希一样容易受到碰撞(或者更确切地说,不容易受到碰撞)。
我想生成一些数据的散列。 通过一些哈希算法,我可以找到最适合我的应用程序的 bcrypt 和 PBKDF。 可能存在使用不同数据算法生成相同散列的情况(如在 MD5 中,它可以为不同类型的数据生成相同散列)。
通过众多专家的评论,bcrypt 是最好的安全散列算法,它提供了不同散列之间的唯一性。
但是,PBKDF2 是否提供哈希的唯一性?
编辑 1
我需要使用相同的输入数据生成散列(散列键将针对相同的输入生成多次)但它不应该为不同的输入数据生成相同的散列(可能发生在某些散列算法中)。
诸如 SHA-2 之类的算法就足够了。生成的散列不是消息唯一的。甚至有无限数量的消息散列为相同的值。诀窍是不可能找到创建此散列的其他消息之一。
对于 SHA-256,生成两个具有不同消息的哈希值时发生冲突的几率等于 1/2^256。但是,您可以生成并存储哈希,然后计算所有可能的 对 中的一个是相同的机会。在这种情况下,生日问题就生效了。这就是哈希仅提供一半安全性的原因。因此,在 340282366920938463463374607431768211456 中,产生 2^128 个哈希值的碰撞的概率是(大约)1/2^128 或 1。这就是为什么您只需要担心损坏的哈希函数(例如 MD5(可能还有 SHA-1)中的碰撞)在不久的将来)。
实际上PBKDF2的内部状态与使用的内部散列相同。使用 PBKDF2(除了作为 Key Derivation Function 而不是散列)对您没有任何帮助。它与内部哈希一样容易受到碰撞(或者更确切地说,不容易受到碰撞)。