伪随机生成器 <=> 哈希函数?

3
我一直在思考这个问题,作为一种思想实验来尝试理解一些哈希概念。考虑需要一个128位哈希函数的要求(即其输出长度恰好为128位)。
A. 您可能会考虑使用MD5之类的东西。因此,您将要哈希的数据输入,然后输出一个128位数字。
B. 或者,您可以找到一个神奇的伪随机数生成器(PRNG)。某种弗兰肯斯坦版本的扭曲者。它从要哈希的所有输入数据中获取种子,并具有内部状态大小>>128位。然后,您生成128个伪随机位作为输出。
在我看来,A和B都有效地产生仅由输入数据确定的输出。因此,这两种方法是否等效?
补充:
一些反馈表明,我的情景可能存在安全不等式。如果伪随机数生成器是像Java的SecureRandom(使用SHA-1)这样的东西,则从输入数据进行种子处理,那么A <=> B吗?

在“serving as a kind of hash function”这个意义上,“equivalent”可以理解为等效的。MD5也保证了数据的完整性,而这可能是你自己制作的哈希函数所无法提供的。 - undefined
@HuStmpHrrr,抱歉,这个上下文中的"integrity"是什么意思呢? - undefined
这与你的问题无关,但是MD5具有一个特性,而随机哈希函数可能无法满足。 - undefined
2个回答

3
如果您使用输入数据种子一个PRNG,然后从中提取128位的随机数据,那么您实际上是将哈希留给了PRNG种子函数,并且它生成的哈希大小将是PRNG状态缓冲区的大小。
但是,如果PRNG的状态大于您提取的128位作为哈希值,则存在一些用于种子的输入数据对您提取的PRNG状态位没有任何影响的风险。这使得它成为一个非常糟糕的哈希,因此您不想这样做。
PRNG种子函数通常是非常弱的哈希,因为哈希不是它们的业务。它们几乎肯定是不安全的(您没有询问),并且与此分离,它们通常在avalanching方面非常薄弱。强哈希通常尝试确保每个输入位都有公平的机会影响每个输出位。不安全的哈希通常不担心如果输入数据太短会失败,但是PRNG种子通常根本不会努力。

1

密码哈希函数的设计目的是使得生成特定哈希值的输入变得困难,或者使得生成相同哈希值的两个输入变得困难。

如果某个算法被设计为随机数生成器,那么这并不是其设计要求之一。因此,如果某个算法仅仅是一个随机数生成器,就不能保证它满足密码哈希码的重要约束条件。从这个意义上说,它们并不等价。

当然,可能存在既被设计为随机数生成器又被设计为密码哈希算法的算法,在这种情况下(如果实现满足了要求),它们可能是等价的。


2
因此,可逆性是关键。如果哈希函数不需要具备密码学安全性,只需要在哈希方面表现良好,那么它们是否等价呢? - undefined
@PaulUszak 我认为这里最重要的是哈希函数和伪随机数生成器(PRNG)使用相同的基本原理,即利用某个输入值生成一个看似随机(但实际上并非如此)的值。主要区别在于用途。哈希只运行一次,为一个输入生成一个值。而PRNG通常会递归地将自己的输出作为新的输入,以持续生成“随机”数。这就是为什么PRNG通常不太关心输入,而对于哈希来说,输入非常重要,每一位都很重要。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接