2

在 UMAC 的维基百科https://en.wikipedia.org/wiki/UMAC上,它指出:

然后对生成的摘要或指纹进行加密,以隐藏所使用的散列函数的身份。

此外,在本文http://web.cs.ucdavis.edu/~rogaway/papers/umac-full.pdf中,它指出:

通过使用共享散列函数对其进行散列,然后加密生成的散列(使用加密密钥)来验证消息。

我的问题是,如果散列函数集H足够大,散列桶的数量|B|足够大,为什么我们需要加密——秘密散列不够安全吗?

例如,以最坏的情况为例,每个客户端都发送相同的短内容,例如“x”。如果我们散列到 32 个字节并且我们的散列依赖于一个秘密的 32 字节散列密钥,并且散列表现出统一的属性,那么攻击者怎么可能希望了解任何单个客户端的秘密散列密钥,即使没有加密?

而且,如果攻击者不知道密钥,攻击者怎么可能希望恶意更改消息内容?

谢谢!

4

1 回答 1

0

我对 UMAC 了解不多,但是:

  • 拥有一个特定哈希函数的彩虹表会破坏您对消息进行的任何加密,因此您现在拥有两个攻击面,而不是单个攻击面
  • 随着计算能力随着时间的推移而增加,您将越来越有可能找出消息的明文,因此如果您不加密 MAC,PFS ( https://en.wikipedia.org/wiki/Forward_secrecy ) 将永远不可能。
  • 最重要的是,如果您可以从 MAC 值中找出单个明文消息,那么您可以通过获取有关 PRNG、其他数据的上下文、IV 等的一些信息,以指数方式更接近于解密消息的其余部分。
于 2016-05-03T17:49:12.640 回答