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

问题描述 投票:1回答:2

我一直在考虑这是一个试图理解一些哈希概念的思想实验。考虑对128位散列函数的要求(即,其输出的长度恰好为128位)。

答:您可能会看到像MD5这样的东西。因此,您输入要散列的数据,然后弹出128位数字。

B.或者,您可以找到一个神奇的伪随机数生成器(PRNG)。某种弗兰肯斯坦版的Twister。它会从您要散列的所有输入数据中自行播种,并具有内部状态大小>> 128位。然后,您将生成128个伪随机位作为输出。

在我看来,A和B都有效地产生仅由输入数据确定的输出。这两种方法是否相同?

补充:

一些反馈表明可能存在与我的场景等效的安全性。如果伪随机数生成器类似于Java的SecureRandom(使用SHA-1),从输入数据接种,那么A <=> B?

random hash
2个回答
1
投票

如果您使用输入数据为PRNG播种,然后从中提取128位随机数据​​,那么您实际上将散列留给PRNG种子函数,并且它生成的散列的大小将是PRNG状态缓冲区的大小。

但是,如果PRNG的状态大于您提取的128位哈希值,则存在一些风险,即用于种子的某些输入数据不会对您提取的PRNG状态的位有任何影响。这使得它成为一个非常糟糕的哈希,所以你不想这样做。

PRNG种子函数通常是非常弱的哈希,因为哈希不是他们的业务。它们几乎肯定是不安全的(你没有问过),并且与它们分开,它们在雪崩时通常很弱。强哈希通常会尝试确保每个输入位都有可能影响输出的每一位。如果输入数据太短,不安全的哈希通常不会担心它们会在此失败,但是PRNG种子通常根本不会付出任何努力。


0
投票

加密哈希函数旨在使创建生成特定哈希的输入变得困难;和/或更多,很难创建两个生成相同哈希的输入。

如果某些东西被设计为随机数生成算法,那么这不是设计的要求之一。因此,如果某些东西“只是”一个随机数生成器,则无法保证它满足加密哈希码的这些重要约束。所以从这个意义上讲,它们并不等同。

当然,可能存在随机数生成算法,这些算法也被设计为加密散列算法,并且在这种情况下(如果实现在满足要求方面做得很好),它们可能是等效的。

© www.soinside.com 2019 - 2024. All rights reserved.