2

AuthenticatedAesCngこのサイトから呼び出されたクラスを使用して、GCMモードでAES256暗号化を使用しています: CLRセキュリティ

暗号ストリームを介して平文を書き込んだ後、IV、TAG、および暗号化されたデータを手動で連結し、その値を返します。

csクリプトストリームとmsメモリストリームです

// Write through and retrieve encrypted data.
cs.Write(message, 0, message.Length);
cs.FlushFinalBlock();
byte[] cipherText = ms.ToArray();                   

// Retrieve tag and create array to hold encrypted data.
byte[] authenticationTag = encryptor.GetTag();      
byte[] encrypted = new byte[cipherText.Length + aes.IV.Length + authenticationTag.Length];

// Set needed data in byte array.
aes.IV.CopyTo(encrypted, 0);                       
authenticationTag.CopyTo(encrypted, IV_LENGTH);
cipherText.CopyTo(encrypted, IV_LENGTH + TAG_LENGTH);

// Store encrypted value in base 64.
return Convert.ToBase64String(encrypted);

これは、GCMモードでAES暗号を使用する正しい方法ですか?これらすべての値を手動でまとめる必要がありますか、それとも自動的に行われ、それを見逃しただけですか?

4

1 に答える 1

1

暗号文は単なるデータですが、タグなしで GCM 暗号文を使用することはできません。GCM の目的全体が無効になります。タグは通常、暗号文に追加されます。

AAD データはオプションであり、その全体的な目的は、クリア テキストで送信することです。

IV は実際にはノンスであるため、両側で計算できます。ランダムな NONCE を使用するか、事前に計算できない場合は、暗号文の前に付けるのが普通です (ただし、両側でこれを明示的にコーディングする必要があります)。

于 2013-02-09T16:00:59.523 に答える