Random 伪随机发生器<=&燃气轮机;散列函数?

Random 伪随机发生器<=&燃气轮机;散列函数?,random,hash,Random,Hash,我一直认为这是一个思想实验,试图理解一些散列概念。考虑对一个128位哈希函数的要求(即,它的输出长度正好是128位)。p> 你可能会看到类似MD5的东西。因此,您输入要散列的数据,然后弹出一个128位的数字 或者,你会发现一个神奇的伪随机数生成器(PRNG)。某种弗兰肯斯坦版本的龙卷风。它从要散列的所有输入数据中提取种子,并具有内部状态大小>>128位。然后生成128个伪随机位作为输出 在我看来,A和B都有效地产生了一个仅由输入数据决定的输出。因此,这两种方法是否等效 补充: 一些反馈表明,可能

我一直认为这是一个思想实验,试图理解一些散列概念。考虑对一个128位哈希函数的要求(即,它的输出长度正好是128位)。p> 你可能会看到类似MD5的东西。因此,您输入要散列的数据,然后弹出一个128位的数字

或者,你会发现一个神奇的伪随机数生成器(PRNG)。某种弗兰肯斯坦版本的龙卷风。它从要散列的所有输入数据中提取种子,并具有内部状态大小>>128位。然后生成128个伪随机位作为输出

在我看来,A和B都有效地产生了一个仅由输入数据决定的输出。因此,这两种方法是否等效

补充:


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

加密散列函数的设计可能会使创建生成特定散列的输入变得困难;和/或更难创建生成相同散列的两个输入

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


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

如果您使用输入数据为PRNG种子,然后从中提取128位随机数据,然后将散列有效地留给PRNG seed函数,它生成的散列大小将是PRNG状态缓冲区的大小

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


PRNG种子函数通常是非常弱的散列,因为散列不是它们的业务。他们几乎肯定是不安全的(你没有问过),与此不同的是,他们在雪崩时通常非常虚弱。强散列通常试图确保输入的每一位都有公平的机会影响输出的每一位。不安全的散列通常不会担心如果输入数据太短,它们会失败,但PRNG种子通常根本不会做出任何努力。

相当于充当一种散列函数的
。md5也保证了完整性,这可能是你自制的散列无法提供的。@Hustmphrr,对不起,在这个上下文中完整性是什么意思?它与你的问题无关,但只是md5的一个属性和一个随机散列函数可能不满足。所以可逆性是关键。如果散列不需要加密安全,但只需要非常擅长散列,那么它们是否等效?