Cryptography 散列加密函数输出异常

Cryptography 散列加密函数输出异常,cryptography,hash,hash-collision,Cryptography,Hash,Hash Collision,有人知道MD5、Whirlpool、SHA[n]等是否有任何“特殊”输入,可能会使hexdigest输出对齐: 所有数字字符 所有字母字符 所有相同的字符/图案一致或完全重复 python中的示例: >>> from hashlib import sha1 >>> hash = sha1('magic_word').hexdigest() >>> hash 4040404040404040404040404040404040404040

有人知道MD5、Whirlpool、SHA[n]等是否有任何“特殊”输入,可能会使hexdigest输出对齐:

  • 所有数字字符
  • 所有字母字符
  • 所有相同的字符/图案一致或完全重复
python中的示例:

>>> from hashlib import sha1
>>> hash = sha1('magic_word').hexdigest()
>>> hash
4040404040404040404040404040404040404040
>>> hash = sha1('^3&#b d   *#"').hexdigest()
aedefeebadcdccebefadcedddcbeadaedcbdeadc
这可能吗?我对散列函数的了解仅限于将其应用于数据库中存储密码的范围,而数据库中基本上没有散列函数


但有时我会想,在测试碰撞时,可能会出现这种情况…

我确信,如果输入正确,这些类型的输出是可能的。为什么这很重要?只是好奇?

我确信,只要输入正确,这些输出都是可能的。为什么这很重要?只是好奇?

是的,这是可能的。只要输入正确,就可以输出任何所需的位模式。然而,可能需要几百万年才能找到正确的输入


对于一个相当宽的目标,像所有的十六进制0-9或所有的十六进制a-f,这应该是相对容易的。计算所有可能输出中可接受输出的比例将有助于估计运行时间。暴力或随机搜索最终会找到击中目标的东西。对于破坏的散列,如MD4,您可以在预期时间内删除某些内容。

是的,这是可能的。只要输入正确,就可以输出任何所需的位模式。然而,可能需要几百万年才能找到正确的输入


对于一个相当宽的目标,像所有的十六进制0-9或所有的十六进制a-f,这应该是相对容易的。计算所有可能输出中可接受输出的比例将有助于估计运行时间。暴力或随机搜索最终会找到击中目标的东西。对于破坏的散列,如MD4,您可能可以在预期的时间内删除一些内容。

散列函数模拟一个随机oracle:对于每个输入,如果以前没有查询过,我们掷骰子找到输出,然后将其记录到某本书中。如果再次查询输入,只需返回此旧值

通过掷一个16面骰子40次(每一次输入),我们就可以得到足够的输出来支持像oracle这样的SHA-1。(对于MD5,我们只需要32次。)

因此,我们可以计算“40倍仅字母”的概率为(6/16)^40≈ 9.15·10^-18,“仅数字的40倍”具有概率(10/16)^40≈ 6.8·10^-9

由于“首次成功前所需的尝试次数”是几何分布的,我们平均需要1/p的尝试,即“仅字母”大约需要10^17次尝试,“仅数字”大约需要1.5·10^8次尝试


(现在,SHA-1不是一个真正的随机预言机,但没有已知的弱点可以说明SHA-1对其中一个有更好或更坏的概率。目前,暴力似乎是实现这一点的最佳方式。)

散列函数为一个随机预言机建模:对于每个输入,如果以前没有查询过,我们掷骰子寻找输出,然后把它记在某本书上。如果再次查询输入,只需返回此旧值

通过掷一个16面骰子40次(每一次输入),我们就可以得到足够的输出来支持像oracle这样的SHA-1。(对于MD5,我们只需要32次。)

因此,我们可以计算“40倍仅字母”的概率为(6/16)^40≈ 9.15·10^-18,“仅数字的40倍”具有概率(10/16)^40≈ 6.8·10^-9

由于“首次成功前所需的尝试次数”是几何分布的,我们平均需要1/p的尝试,即“仅字母”大约需要10^17次尝试,“仅数字”大约需要1.5·10^8次尝试


(现在,SHA-1不是一个真正的随机预言机,但没有已知的弱点可以说明SHA-1在其中一个方面会有更好或更坏的概率。目前,暴力似乎是最好的方法。)

大部分情况下,是的,我只是好奇。我不是在寻找一种更有效地浏览rainbow表或任何东西的方法,请注意
;)。每当我想到这样愚蠢的问题时,我就喜欢把我的知识充实起来。是的,我只是好奇。我不是在寻找一种更有效地浏览rainbow表或任何东西的方法,请注意
;)。每当我想到这样愚蠢的问题时,我就想把我的知识充实起来。我喜欢你回答的后半部分:如果你解释一下,我会给你一个接受的答案票:
对于每个输入,如果以前没有被查询过,我们掷骰子找到一个输出,然后把它记在某本书上。我想你是在数学上说的吧?你在说什么书?这就是人们如何想象一个随机预言者是如何工作的。。。请查看更多详细信息。您的链接已经破坏了我对全球银行卡和自动取款机的信任
:D
我喜欢你答案的后半部分:如果你解释一下,我会给你一个接受的答案投票:
对于每个输入,如果它以前还没有被查询过,我们掷骰子找到一个输出,然后把它记在某本书上
。我想你是在数学上说的吧?你在说什么书?这就是人们如何想象一个随机预言者是如何工作的。。。请查看更多详细信息。您的链接已经破坏了我对全球银行卡和自动取款机的信任<代码>:D