可逆哈希函数?

信息安全 密码学 哈希 md5
2021-09-08 13:58:23

有没有可逆的哈希函数?

像 SHA 和 MD5 这样的哈希函数是不可逆的。我想知道是否存在一些可逆的哈希函数?

4个回答

加密哈希函数定义包括对原像的抵抗:给定h(x) ,恢复x应该是不可行的“可逆”的哈希函数与该属性完全相反。因此,你不能拥有一个“可逆哈希函数”,就像你不能拥有对水过敏的鱼一样。


可能你可能想要一个散列函数,对于大多数人来说,它是一个具有所有属性的加密散列函数,但它还包括某种陷阱门,如果你知道一些特定的秘密,它允许反转它。这类事情可能存在,但需要数学,如非对称密码学。我现在不知道这样的结构,但有人可能会根据 RSA 模数来判断一些东西,或者可能是一条椭圆曲线,其坐标取模 RSA 模数(我没有考虑精确的设计,但是我有直觉可以这样做)。

即使是非加密散列通常也不能被反转(这与加密散列的其他特殊属性无关,例如冲突/原像抗性)。通常不可能的原因是您根本没有足够的信息。

散列函数(通常)将N输入M位转换为输出位,其中M是一个小常数,大多数情况下N > M为真。当然N 不需要大于M,完全有可能从单个字节生成例如 SHA 散列,但通常散列消息比散列值长(通常长得多)。

这意味着要反转哈希并恢复原始消息,您将不得不使用占卜魔法来填充缺失的信息。有 2 个N-M解决方案,每个解决方案都和其他解决方案一样正确。

因此,例如,如果您使用 SHA 散列一个 36 字节的字符串并尝试反转它,则有2128个解决方案,所有这些解决方案都同样正确。
如果已知输入具有某些众所周知的属性(例如以众所周知的序列开始,From:如正确的——但这绝不是微不足道的,你永远无法证明你拥有正确的,除非你以前已经知道或者你有另一种验证方式。

一些哈希算法,如 CRC(如上所述)是可逆的。有关执行此操作的方法,请参阅本文(CRC 的计算速度很快,非常适合在没有安全要求的情况下保护数据免受损坏)。

密码安全哈希的设计旨在确保不存在这样的快捷方式,并且找到哈希匹配需要对密钥空间进行完整搜索。

也许您正在寻找类似 PKI 的东西,其中一个字符串可以在一端用公钥加密,而在另一端用私钥解密。显然不是哈希,而是一种加密/解密字符串以传递秘密的方法。