EncryptedAndAuthenticatedData Class

暗号化され、認証されたデータから取得できるデータが含まれます。認証された暗号化アルゴリズムは SymmetricKeyAlgorithmProvider クラスを使用して開きます。

構文


var encryptedAndAuthenticatedData = encryptAndAuthenticate();

属性

[DualApiPartition()]
[MarshalingBehavior(Agile)]
[Version(0x06020000)]

メンバー

EncryptedAndAuthenticatedDataクラス には次の種類のメンバーがあります。

メソッド

The EncryptedAndAuthenticatedData クラス からメソッドを継承します。Object クラス (C#/VB/C++).

プロパティ

EncryptedAndAuthenticatedDataクラス には次のプロパティがあります。

プロパティアクセスの種類説明

AuthenticationTag

読み取り専用Gets the authentication tag.

EncryptedData

読み取り専用Gets the encrypted data.

 

解説

認証された暗号はコンテンツを 1 つの操作で暗号化し、認証します。認証システムは、タグとも呼ばれ、暗号化で使用されます。プロセスの出力にはタグと暗号文のペアが含まれます。詳細については、AuthenticationTag プロパティおよび EncryptedData プロパティを参照してください。復号化プロセスは、タグに対して暗号文を検証します。

認証された暗号化アルゴリズムは、SymmetricKeyAlgorithmProvider クラスで OpenAlgorithm メソッドを呼び出して、開くアルゴリズムの名前を指定すると使用できるようになります。次のアルゴリズム名は、認証された暗号化と復号化でサポートされています。

  • AES_GCM
  • AES_CCM


using Windows.Security.Cryptography;
using Windows.Security.Cryptography.Core;
using Windows.Storage.Streams;

namespace SampleEncryptedAndAuthenticatedData
{
    sealed partial class EncryptedAuthenticatedDataApp : Application
    {
        // Initialize a static nonce value.
        static byte[] NonceBytes = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

        public EncryptedAuthenticatedDataApp()
        {
            // Initialize the application.
            this.InitializeComponent();

            // Initialize the encryption method.
            String strMsg = "This is a message.";   // Message to encrypt and authenticate.
            String strAlgName = SymmetricAlgorithmNames.AesGcm;
            UInt32 keyLength = 32;                  // Length of the key, in bytes
            BinaryStringEncoding encoding;          // Binary encoding
            IBuffer buffNonce;                      // Nonce
            CryptographicKey key;                   // Symmetric key

            // Encrypt and authenticate the message.
            EncryptedAndAuthenticatedData objEncrypted = this.AuthenticatedEncryption(
                strMsg,
                strAlgName,
                keyLength,
                out encoding,
                out buffNonce,
                out key);

            // Decrypt the encrypted data.
            this.AuthenticatedDecryption(
                strAlgName,
                key,
                objEncrypted,
                encoding,
                buffNonce);
        }

        public EncryptedAndAuthenticatedData AuthenticatedEncryption(
            String strMsg,
            String strAlgName, 
            UInt32 keyLength, 
            out BinaryStringEncoding encoding, 
            out IBuffer buffNonce,
            out CryptographicKey key)
        {
            // Open a SymmetricKeyAlgorithmProvider object for the specified algorithm.
            SymmetricKeyAlgorithmProvider objAlgProv = SymmetricKeyAlgorithmProvider.OpenAlgorithm(strAlgName);

            // Create a buffer that contains the data to be encrypted.
            encoding = BinaryStringEncoding.Utf8;
            IBuffer buffMsg = CryptographicBuffer.ConvertStringToBinary(strMsg, encoding);

            // Generate a symmetric key.
            IBuffer keyMaterial = CryptographicBuffer.GenerateRandom(keyLength);
            key = objAlgProv.CreateSymmetricKey(keyMaterial);

            // Generate a new nonce value.
            buffNonce = GetNonce();

            // Encrypt and authenticate the message.
            EncryptedAndAuthenticatedData objEncrypted = CryptographicEngine.EncryptAndAuthenticate(
                key,
                buffMsg,
                buffNonce,
                null);

            return objEncrypted;

        }

        public void AuthenticatedDecryption(
            String strAlgName, 
            CryptographicKey key,
            EncryptedAndAuthenticatedData objEncrypted,
            BinaryStringEncoding encoding, 
            IBuffer buffNonce)
        {
            // Declare a buffer to contain the decrypted data.
            IBuffer buffDecrypted;

            // Open a SymmetricKeyAlgorithmProvider object for the specified algorithm.
            SymmetricKeyAlgorithmProvider objAlgProv = SymmetricKeyAlgorithmProvider.OpenAlgorithm(strAlgName);

            // The input key must be securely shared between the sender of the encrypted message
            // and the recipient. The nonce must also be shared but does not need to be shared
            // in a secure manner. If the sender encodes the message string to a buffer, the
            // binary encoding method must also be shared with the recipient.
            // The recipient uses the DecryptAndAuthenticate() method as follows to decrypt the 
            // message, authenticate it, and verify that it has not been altered in transit.
            buffDecrypted = CryptographicEngine.DecryptAndAuthenticate(
                key,
                objEncrypted.EncryptedData,
                buffNonce,
                objEncrypted.AuthenticationTag,
                null);

            // Convert the decrypted buffer to a string (for display). If the sender created the
            // original message buffer from a string, the sender must tell the recipient what 
            // BinaryStringEncoding value was used. Here, BinaryStringEncoding.Utf8 is used to
            // convert the message to a buffer before encryption and to convert the decrypted
            // buffer back to the original plaintext.
            String strDecrypted = CryptographicBuffer.ConvertBinaryToString(encoding, buffDecrypted);

        }

        IBuffer GetNonce()
        {
            // Security best practises require that an ecryption operation not
            // be called more than once with the same nonce for the same key.
            // A nonce value can be predictable, but must be unique for each
            // secure session.

            NonceBytes[0]++;
            for (int i = 0; i < NonceBytes.Length - 1; i++)
            {
                if (NonceBytes[i] == 255)
                {
                    NonceBytes[i + 1]++;
                }
            }

            return CryptographicBuffer.CreateFromByteArray(NonceBytes);
        }
    }
}


要件

最小限サポートされるクライアント

Windows 8 [Windows ストア アプリ, デスクトップ アプリ]

最小限サポートされるサーバー

Windows Server 2012 [Windows ストア アプリ, デスクトップ アプリ]

名前空間

Windows.Security.Cryptography.Core
Windows::Security::Cryptography::Core [C++]

メタデータ

Windows.winmd

参照

CryptographicEngine
DecryptAndAuthenticate
EncryptAndAuthenticate
SymmetricKeyAlgorithmProvider

 

 

表示:
© 2015 Microsoft