c#中的AES GCM实现

时间:2012-07-12 14:33:44

标签: c# aes aes-gcm

我正在c#中以GCM模式实现AES密码。我的问题涉及“额外的经过身份验证的数据”(AAD)。在以下代码中来自

http://blogs.msdn.com/b/shawnfa/archive/2009/03/17/authenticated-symmetric-encryption-in-net.aspx

目前还不清楚我应该从哪里获取AAD,以及如何在解密期间检索特定于此加密的AAD:

// Authenticated data becomes part of the authentication tag that is generated during
// encryption, however it is not part of the ciphertext.  That is, when decrypting the
// ciphertext the authenticated data will not be produced.  However, if the
// authenticated data does not match at encryption and decryption time, the
// authentication tag will not validate.
aes.AuthenticatedData = Encoding.UTF8.GetBytes("Additional authenticated data");

非常感谢有关如何使用此AAD的任何说明。 感谢

2 个答案:

答案 0 :(得分:8)

AAD代表其他经过身份验证的数据或其他关联数据。这是可以与密文一起以明文形式发送的数据。当您执行AEAD密码的组合验证和解密时,密文和AAD都会经过验证,以确保其完整性。

AAD数据不是密钥,它只是您可以包含在协议中的普通数据,需要保护其完整性,但不需要(或者,更逻辑地说,没有用)加密。一个很好的例子是加密IP数据包的标题;如果加密它就不能用它进行路由,如果你不保护它的完整性,攻击者可能会改变消息长度或源地址,而接收者不知道它。

请注意,AEAD密码已在计算身份验证标记时包含IV / nonce。因此不必将其包含在AAD中。 AAD通常用于包括发送方,接收方以及可能的消息标识号,如果它们尚未存在于IV中。

答案 1 :(得分:-2)

用作加密和解密输入的认证数据可以看作是预共享密钥,类似于IV。基于它和要加密的数据,计算认证标签。此身份验证标记通常附加到加密数据。

在最后的解密步骤中,将读取此附加的身份验证标记,并将其与解密数据时生成的值进行比较。