在 UMAC 的维基百科https://en.wikipedia.org/wiki/UMAC上,它指出:
然后对生成的摘要或指纹进行加密,以隐藏所使用的散列函数的身份。
此外,在本文http://web.cs.ucdavis.edu/~rogaway/papers/umac-full.pdf中,它指出:
通过使用共享散列函数对其进行散列,然后加密生成的散列(使用加密密钥)来验证消息。
我的问题是,如果散列函数集H
足够大,散列桶的数量|B|
足够大,为什么我们需要加密——秘密散列不够安全吗?
例如,以最坏的情况为例,每个客户端都发送相同的短内容,例如“x”。如果我们散列到 32 个字节并且我们的散列依赖于一个秘密的 32 字节散列密钥,并且散列表现出统一的属性,那么攻击者怎么可能希望了解任何单个客户端的秘密散列密钥,即使没有加密?
而且,如果攻击者不知道密钥,攻击者怎么可能希望恶意更改消息内容?
谢谢!