2012-07-12 102 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