2012-07-12 35 views
2

我在c#中以GCM模式实现了AES密码。我的问题涉及“额外的认证数据”(AAD)。在从c#中的GCM实现#

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将非常感激。 谢谢

+1

尽管它使用了不同的库,但下面是C#中AES-GCM的示例http://stackoverflow.com/a/10366194/637783 – jbtule 2012-07-19 21:00:13

+0

谢谢,我希望在看到之前我刚刚写下了自己的 – crawfish 2012-07-19 21:37:43

回答

6

AAD表示附加认证数据或附加关联数据。这是可以与密文一起发送的数据。当您执行AEAD密码的组合验证和解密时,密文和AAD都会进行完整性验证。

AAD数据不是关键,它只是可以包含在协议中的普通数据,它需要受到完整性保护,但不需要(或者更加合乎逻辑地说对加密无用)。一个很好的例子就是加密IP数据包的头部。如果您对其进行加密,则不能将其用于路由,如果您不保护其完整性,则攻击者可能会更改消息长度或源地址,而无需接收方知道。

+0

AAD确实代表“其他验证数据”,请参阅http://csrc.nist.gov/publications/nistpubs/800-38D/SP-800-38D.pdf中的第4.1节。 – 2015-09-01 02:10:46

+0

也列在更新的出版物中。请参阅http://csrc.nist.gov/groups/STM/cavp/documents/mac/gcmvs.pdf中的第3页。 – 2015-09-01 14:22:09

+0

@KlemensBaum我很确定我也看到了另一个定义。我已经相应地改变了答案,NIST的定义应该是领先的。谢谢! – 2015-09-01 14:23:57

-2

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

在最后的解密步骤中,读取附加的认证标签,并与解密数据时生成的值进行比较。

+0

好的,这是有道理的。所以验证数据只是一些盐,使标签更随机?并且你知道如果当 ciphertext = ms.ToArray();呼叫已完成,是否已添加IV和标记? 感谢您的帮助 – crawfish 2012-07-12 15:42:44

+0

IV是一个秘密,因此不会附加 - 至少在我所知道的实现中并不存在。认证数据可以看作是HMAC的密钥 - 如果您使用未加密的GCM作为“GHASH”,则认证数据将变得非常重要。 – Robert 2012-07-12 17:35:36

+0

我的印象是,您将IV附加到密文以允许解密。这是不正确的? – crawfish 2012-07-12 19:08:21