1

在加密期间,为 MACing 添加 AAD 似乎只是使用AEADParameters. 但我不清楚我以后在哪里可以得到这块 AAD。

我认为processAADBytes这很可能是我正在寻找的东西。processAADBytes

如果实现支持它,这将是一个在线操作并且不会保留相关数据。

我对此感到困惑。我对这种方法有两种可能的解释:

  1. 这是加密时传入 AAD 的另一种方式(除了AEADParameters),AAD 不会与密文一起存储。
  2. 这是一种在解密期间验证 AAD 的方法。AAD(来自其他地方)需要在这里输入以进行 MAC 验证。

我曾期望找到像getAAD(). 所以我猜这个密码根本不存储AAD和密文,只是对我们声称是AAD的数据提供MAC验证?

4

1 回答 1

1
  1. 这是在加密期间传入 AAD 的另一种方式(除了 AEADParameters),并且 AAD 不会与密文一起存储。

这是正确的,一般AEADParameters情况下,处理方式与 中的数据相同processAADBytes。AAD 可能并不总是必须在*1前面提供,并且它可能包含大量数据(即使它通常不会)。这意味着processAADBytes更灵活,AEADParameters因为它允许流式传输并且不需要同时缓冲所有 AAD。

另一方面,AEADParameters对于向后兼容可能很有用,并且可能是更高效/更清洁的设计。

  1. 这是一种在解密期间验证 AAD 的方法。AAD(来自其他地方)需要在这里输入以进行 MAC 验证。

嗯,是的,通常情况就是这样,但你也可以AEADParameters在这里使用。

所以两者都是正确的。是的,您需要确保消息的接收者接收(和/或能够生成)AAD。


*1 EAX 允许随时提供 AAD,如果您在加密/解密开始后提供 AAD,则 GCM 需要额外的计算(模幂运算!)。CCM 需要所有 AAD 前期。如果可以,您应该在加密/解密之前提供所有 AAD。

于 2015-12-13T02:38:31.707 回答