它们用于两种攻击;
它们减少了使用中性位BCJ + 05和飞旋镖JP07从$ 2 ^ {64.7} $到$ 2 ^ {61.2} $
此外,他们还改进了基于图的技术(LP19),以将CP冲突从$ 2 ^ {67.1} $扩展到$ 2 ^ {63.4} $。
实际上,CP冲突攻击使攻击者可以创建一些有意义的消息。但是,经典的碰撞不是。
为了演示攻击,他们实现了PGP / GnuPG模拟(CVE-2019-14855)。
SHA-1的攻击列表
2005年,复杂度为$ 2 ^ {69} $的碰撞,在完整的SHA-1中找到碰撞,Wang等。
2013年,复杂度为$ 2 ^ {77.1} $的选择前缀冲突,基于最优联合局部冲突分析的SHA-1上的新冲突攻击,Stevens等。等。
2013,复杂度为$ 2 ^ {64.7} $的碰撞,来自上一篇文章。
2016,复杂度为$ 2 ^ {57.5} $的自由启动碰撞,完整SHA-1的自由启动碰撞。史蒂文斯(Stevens)等
2017,复杂度为$ 2 ^ {63.1} $的碰撞,完整SHA-1的第一次碰撞。等人。
2019,具有$ 2 ^ {67.1} $复杂度的选择前缀冲突,从冲突到选择前缀冲突,Leurent等人
应用到完整SHA-12020年,SHA-1与$ 2 ^ {61.2} $的复杂性发生冲突,是一次混乱-SHA-1的首次选择前缀冲突及其在PGP Trust网络上的应用,Leurent等。等(新文章)
2020,具有$ 2 ^ {63.4} $复杂度的选择前缀冲突,与上篇相同。
问题: $ h = \ operatorname {SHA-1}(\ operatorname {SHA-1}(m))$减轻CP冲突?*看起来是这样,因为只要攻击者无法做到,有意义的部分对于攻击者将不存在破坏双$ \ operatorname {SHA-1} $。这似乎还不可行。
一个紧迫的后续问题;如果答案是肯定的,我们是否应基于双哈希设计新协议?
*双哈希可以有很多变体。
#1 楼
一种。没有这样的双重哈希并没有多大用处。在单个哈希之后发生冲突的任何事物都将在两次哈希之后明确地发生冲突。它会保留所有碰撞并添加新的碰撞。我们可能会考虑其他可能提供一定强度的构造,例如$ H(H(m)|| m)$:
b。我们没有任何这样的SHA1双重哈希,因为我们拥有更新更好的哈希函数。最值得注意的是,我们拥有SHA3,从所有方面来看,SHA3都远未损坏
评论
$ \ begingroup $
在几乎所有可以用改良结构替换SHA1的地方,我们也可以用SHA3替换。我们甚至对SHA1进行了加固,如果需要的话,可以提供一些向后的可比性。
$ \ endgroup $
–梅尔·莫尔(Meir Maor)
20年1月7日在18:08
$ \ begingroup $
@kelalaka:可能更有用的双哈希值可能是$ H(m)|| H(“ hello world” || m))$或其他东西,或者以某种方式将这两个哈希结合起来,而不是concat,也许是XOR。它们都可以通过对数据的一次传递来计算,因此它仍然可以用作流哈希,在这种情况下,您只能即时访问数据。 (也不需要额外的内存带宽,并且并行在2个散列上进行交织计算可能会提高吞吐量。)但是,即使您需要短的160位散列,也可能比截断SHA-256或SHA-512更好。 。
$ \ endgroup $
– Peter Cordes
20年1月8日,下午3:34
$ \ begingroup $
我不认为以SHA-1作为构建块来构造新的160位哈希函数对于任何用例都没有多大意义,只是对于具有高性能SHA的现有嵌入式硬件的新固件而言-1加速器,不能快速地运行任何其他哈希。否则,如果您可以更改哈希函数,则可以完全替换它。
$ \ endgroup $
– Peter Cordes
20年1月8日,下午3:37
$ \ begingroup $
@PeterCordes实际上,NIST在2011年从建议中删除了SHA-1。$ 2 ^ {80} $经典碰撞(概率为50%)不可忽略,我们应该考虑较低的概率,并且已经有了集体计算能力每天可以达到$ \大约2 ^ {63} $,例如Summit。也许这项工作更有趣的是用例。截断具有一个好的方面,可以防止内置SHA3进行扩展攻击。
$ \ endgroup $
– kelalaka
20年1月8日在8:52
$ \ begingroup $
“当您发现自己骑着一匹死马时,最好的策略就是下马。”
$ \ endgroup $
– tylo
20年1月8日上午10:10
评论
1)这不能减轻碰撞。 2)任何可以从SHA-1(m)更改为SHA-1(SHA-1(m))的内容都可以轻松更改为SHA-3(m)。