我正在尝试实现 AES-GCM 加密,但是什么时候
cipher.Encrypt(_iv, toEncrypt, cipherText, tag, associatedData);
我意识到我还需要实现关联的数据,这是一个 byte[] 数据类型,任何人都知道 AAD 部分应该来自哪里?
最佳答案
由于您正在尝试实现 AES-GCM 加密,我假设您已经知道 AES-GCM 加密的两个主要部分是:
- 使用计数器操作模式的变体来保证输入数据的 secret 性。在您的情况下,AES 被用作底层分组密码。
- 使用 GHASH 算法验证 secret 数据的真实性。
这意味着需要使用计数器模式的变体对明文 (toEncrypt) 进行加密,并根据生成的密文 (cipherText) 计算身份验证标记。
附加身份验证数据 (AAD) 保护明文的 secret 性而不对其进行加密,通常 AAD 意味着少量数据,例如版本号、地址和端口。
所以你只需要在AAD(关联数据)上应用GHASH算法,并将加密操作的输出标签值分配给GHASH算法的输入标签即可。请注意,这假设函数使用的方案是加密输入数据,然后对 AAD 进行哈希处理,如果顺序相反,则必须将 AAD 的 GHASH 函数的输出标记分配给要加密的数据的 GHASH 函数的输入标记。
关于c# - AES-GCM:#C Microsoft 类附加验证数据“(AAD)”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66283868/