Python的相关问题:
基本上:不适合主内存的数据需要使用AEAD进行身份验证(与少量也需要加密的数据相关联),所以我想知道是否可以对数据进行散列,然后只验证摘要。这两种选择是否等同?有什么奇怪的暗示吗?
发布于 2023-03-15 00:55:04
如果您使用密码安全的散列函数,那么是的,这是安全的。这是因为任何修改附加数据的尝试都会以很高的概率修改哈希,如果修改了哈希,标签将无法进行高概率的验证。它可以被认为在某种程度上与梅克尔树有关。沙-2,沙-3和BLAKE2都是很好的选择,MD5和SHA-1不是.
在许多AEAD中,关联的数据部分是联机的,就像加密的部分一样,因此假设库接口是合适的,您就不需要这样做了。然而,并不是所有的库接口都允许流附加数据,而且一些AEAD(例如CCM)根本不在线,因此,如果需要大量或未知数量的附加数据,这是有用的。
请注意,如果您有少量固定的附加数据,例如数据包报头,您也可以传递该数据,然后是大量数据的散列,作为AEAD的附加数据,如果更方便的话。但是,为了避免攻击者在哈希和数据包报头之间移动数据的攻击,必须始终使用哈希,即使“大量”数据为空,并使用相同大小输出的哈希算法。
通常,当您的附加数据包含多个段时,注意到这一点很重要,您必须避免攻击者混淆哪一部分是哪个部分或在这些部分之间移动数据,例如在每个段前加上其段的4或8字节的长度,或者总是使用固定长度的数据段。无论是将AD传递给哈希算法,还是直接在AEAD中使用,都是正确的。
https://security.stackexchange.com/questions/269129
复制相似问题