java - 如何使用 BouncyCaSTLe 轻量级 API 在 GCM 密码中利用 AAD

标签 java encryption cryptography bouncycastle aes-gcm

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

我认为processAADBytes很可能就是我正在寻找的。 processAADBytes

If the implementation supports it, this will be an online operation and will not retain the associated data.

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

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

我本来希望找到像 getAAD() 这样的方法。所以我猜这个密码根本不存储AAD和密文,而只是对我们声称是AAD的数据提供MAC验证?

最佳答案

  1. This is an alternative way to pass in AAD during encryption (in addition to AEADParameters), and the AAD will not be stored with cipher text.

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

另一方面,AEADParameters 对于向后兼容性以及可能实现更高效/更简洁的设计可能很有用。

  1. This is a method to verify AAD during decryption. The AAD (from somewhere else) needs to be fed here for MAC verification.

嗯,是的,通常情况如此,但您也可以在此处使用 AEADParameters

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

<小时/>

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

关于java - 如何使用 BouncyCaSTLe 轻量级 API 在 GCM 密码中利用 AAD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34215637/

相关文章:

java - android studio 3.0.1 中的 Gradle 同步字段

java - 如何在Android中滚动项目时添加圆角作为Recyclerview的背景

java - 如何在 postman 中显示异常消息?

hash - 硬件 token 设备如何工作?

Java 事件与 C# - Java 新手

php - 可以在php和unity中使用的加密

php - 无法比较/解密密码 (PHP/Android)

php - Lua/PHP加密/解密

flutter - 如何将 sha256 的摘要添加到 flutter 中的字符串?

hash - 了解sha-1碰撞的弱点