AES-GCM:#C Microsoft Class 附加验证数据"(AAD)"

问题描述

我正在尝试实现 aes-gcm 加密,但何时实现

cipher.Encrypt(_iv,toEncrypt,cipherText,tag,associatedData);

我意识到我还需要实现关联数据,这是一个byte[]数据类型,有没有人知道AAD部分应该从哪里来?

解决方法

既然您正在尝试实施 AES-GCM 加密,我假设您已经知道 AES-GCM 加密的两个主要部分是:

  • 使用一种变体的计数器操作模式来保证输入数据的机密性。在您的情况下,AES 用作底层分组密码。
  • 使用 GHASH 算法验证机密数据的真实性。

这意味着明文 (toEncrypt) 需要使用计数器模式的变体进行加密,并根据生成的密文 (cipherText) 计算身份验证标签。

额外的认证数据 (AAD) 保护明文的机密性而不对其进行加密,通常 AAD 意味着少量数据,如版本号、地址和端口..

所以你只需要将GHASH算法应用到AAD(associatedData)上,并将加密操作的输出标签值赋给GHASH算法的输入标签即可。请注意,这里假设函数使用的方案是对输入数据进行加密然后对 AAD 进行哈希处理,如果是相反的顺序,则必须将 AAD 的 GHASH 函数的输出标签分配给要加密的数据的 GHASH 函数的输入标签。