首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BLAKE2是如何确保当B=A=A=0和A&B都有相同数目的块时,散列(A) !=散列(B)?

BLAKE2是如何确保当B=A=A=0和A&B都有相同数目的块时,散列(A) !=散列(B)?
EN

Cryptography用户
提问于 2015-01-26 17:46:45
回答 2查看 495关注 0票数 3

假设我有两个数组:

A=单个字节,为零。B=两个字节,都是零。

(即B以A开头,仅通过附加一个零字节来区别)

BLAKE2(A) != BLAKE2(B)

然而,根据我所能找到的很少的文档,零字节的BLAKE2 pads。

假设一个只有一个字节的数组和一个两个字节的数组都在单个块的大小之内,理论上它们的完全块长度零填充等价物是相同的。

因此,如果它没有用长度指示符填充输入,如果稀少文档中提到的终结标志要么是所有二进制1s,要么是所有二进制0,因为缺少的文档清楚地声明了(因此没有指明最终输入块中的哪个字节是填充的),那么BLAKE2如何能够为这两个输入生成不同的散列呢?

注意:它确实与这两个输入产生了不同的散列,这是一件非常好的事情,我正在编写一些依赖于BLAKE2属性的软件,但是如果我理解为什么/如何发生这种情况,我会更有信心。谢谢!

我试着标记这个BLAKE2,但是系统不允许我--显然标签还不存在。

EN

回答 2

Cryptography用户

回答已采纳

发布于 2015-01-26 19:05:42

您是对的,填充的消息本身是不明确的。

但是Blake2压缩函数不只是将消息块和链接值作为输入。它还使用一个终结标志(标记最后一个块并防止长度扩展)和消息大小(以字节为单位)。

将大小传递给非最终块主要是为了防止某些多目标攻击。对于这些块,大小总是块大小的倍数。对于最后一个块,它是不同的:这里的size参数是消息的总大小(以字节为单位),它消除了映射到相同的零填充消息而仅在大小上不同的消息的歧义。该标志确保压缩以当前块结尾的消息和继续(因此具有相同大小参数)的消息具有不同的输入。

除了Nova已经引用的规范之外,阅读以下内容可能也很有趣:

  1. Skein规范,它使用类似的方法,其中的调整包含消息的长度,并启发了Blake2填充。
  2. 我的博客文章替代布莱克填充物,在这里,我提出了一个简化的填充,它通过一些小的调整就变成了Blake2填充。
票数 4
EN

Cryptography用户

发布于 2015-01-26 18:45:36

这个预印版的文章发表在2013年BLAKE2官方网站上的ACNS会议记录中,在网站15上包含了布莱克和BLAKE2之间的区别的答案:

简化的填充。与BLAKE不同,新的填充不包括消息的消息长度。但是,很容易看到长度是通过计数器间接编码的,填充保留了初始填充的明确编码。也就是说,填充简化不影响散列函数的安全性。然而,最好有一份正式的证据。

票数 2
EN
页面原文内容由Cryptography提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://crypto.stackexchange.com/questions/22601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档