【问题标题】:Pseudo random generator <=> hash function?伪随机生成器<=>散列函数?
【发布时间】:2015-08-12 00:38:59
【问题描述】:

我一直认为这是一个思想实验,试图理解一些散列概念。考虑一个说 128 位散列函数的要求(即,它的输出长度正好是 128 位)。

A.您可能会查看类似 MD5 的内容。因此,您输入要散列的数据,然后弹出一个 128 位数字。

B.或者,您会发现一个神奇的伪随机数生成器 (PRNG)。某种科学怪人版本的 Twister。它从您要散列的所有输入数据中播种,并具有内部状态大小 >> 128 位。然后生成 128 个伪随机位作为输出。

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

补充:

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

【问题讨论】:

  • equivalentserving as a kind of hash function 的意义上。 md5 也保证integrity,这可能是您自制的散列无法提供的。
  • @HuStmpHrrr,抱歉,在这种情况下完整性是什么意思?
  • 和你的问题无关,只是md5有一个属性,随机hash函数可能不满足。

标签: random hash


【解决方案1】:

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

但是,如果 PRNG 的状态大于您提取为哈希的 128 位,那么用于种子的某些输入数据可能不会对 PRNG 状态的位产生任何影响你提取的。这使它成为一个非常糟糕的哈希,所以你不想这样做。

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

【讨论】:

    【解决方案2】:

    加密散列函数旨在难以创建生成特定散列的输入;和/或更难创建两个生成相同哈希的输入。

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

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

    【讨论】:

    • 所以可逆性是关键。如果哈希不需要在密码学上是安全的,而只是非常擅长哈希,那么它们可能是等价的吗?
    猜你喜欢
    • 2011-11-03
    • 2014-05-18
    • 2015-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多