

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# AWS Encryption SDK .NET용
<a name="dot-net"></a>

 AWS Encryption SDK for .NET은 C\$1 및 기타 .NET 프로그래밍 언어로 애플리케이션을 작성하는 개발자를 위한 클라이언트 측 암호화 라이브러리입니다. 이는 Windows, macOS, Linux에서 지원됩니다.

**참고**  
 AWS Encryption SDK for .NET 버전 4.0.0은 AWS Encryption SDK 메시지 사양을 벗어납니다. 따라서 버전 4.0.0으로 암호화된 메시지는 for .NET 버전 4.0.0 이상으로만 복호화할 수 AWS Encryption SDK 있습니다. 다른 프로그래밍 언어 구현으로는 복호화할 수 없습니다.  
 AWS Encryption SDK for .NET 버전 4.0.1은 AWS Encryption SDK 메시지 사양에 따라 메시지를 작성하고 다른 프로그래밍 언어 구현과 상호 운용할 수 있습니다. 기본적으로 버전 4.0.1은 버전 4.0.0으로 암호화된 메시지를 읽을 수 있습니다. 그러나 버전 4.0.0으로 암호화된 메시지를 복호화하지 않으려면 클라이언트가 이러한 메시지를 읽지 못하도록 [https://github.com/aws/aws-encryption-sdk/tree/mainline/AwsEncryptionSDK/runtimes/net/Examples/NetV4_0_0Example.cs](https://github.com/aws/aws-encryption-sdk/tree/mainline/AwsEncryptionSDK/runtimes/net/Examples/NetV4_0_0Example.cs) 속성을 지정합니다. 자세한 내용은 GitHub의 aws-encryption-sdk 리포지토리에서 [v4.0.1 릴리스 정보를](https://github.com/aws/aws-encryption-sdk/releases/tag/v4.0.1) 참조하세요.

 AWS Encryption SDK for .NET은 다음과 같은 점 AWS Encryption SDK 에서의 다른 프로그래밍 언어 구현과 다릅니다.
+ [데이터 키 캐싱](data-key-caching.md)이 지원되지 않음
**참고**  
for .NET 버전 AWS Encryption SDK 4.*x*는 대체 암호화 자료 캐싱 솔루션인 [AWS KMS 계층적 키링](use-hierarchical-keyring.md)을 지원합니다.
+ 스트리밍 데이터가 지원되지 않음
+  AWS Encryption SDK for .NET에서 [로깅 또는 스택 추적이 없음](#dot-net-debugging)
+ [가 필요합니다. AWS SDK for .NET](#dot-net-install)

 AWS Encryption SDK for .NET에는의 다른 언어 구현 버전 2.0.*x* 이상에 도입된 모든 보안 기능이 포함되어 있습니다 AWS Encryption SDK. 그러나 AWS Encryption SDK for .NET을 사용하여의 다른 언어 구현인 2.0.*x* 이전 버전으로 암호화된 데이터를 해독 AWS Encryption SDK하는 경우 [커밋 정책을](concepts.md#commitment-policy) 조정해야 할 수 있습니다. 자세한 내용은 [커밋 정책 설정 방법](migrate-commitment-policy.md#migrate-commitment-step1)을 참조하세요.

 AWS Encryption SDK for .NET은 사양을 작성하는 공식 확인 언어인 [Dafny](https://github.com/dafny-lang/dafny/blob/master/README.md) AWS Encryption SDK 의 제품이며, 이를 구현할 코드와 이를 테스트하기 위한 증명입니다. 그 결과, 기능적 정확성을 보장하는 프레임워크에서 AWS Encryption SDK 의 기능을 구현하는 라이브러리가 탄생했습니다.

**자세히 알아보기**
+ 대체 알고리즘 제품군 지정 AWS Encryption SDK, 암호화된 데이터 키 제한, AWS KMS 다중 리전 키 사용 등에서 옵션을 구성하는 방법을 보여주는 예제는 섹션을 참조하세요[구성 AWS Encryption SDK](configure.md).
+  AWS Encryption SDK for .NET을 사용한 프로그래밍에 대한 자세한 내용은 GitHub의 aws-encryption-sdk 리포지토리 [https://github.com/aws/aws-encryption-sdk/tree/mainline/AwsEncryptionSDK/runtimes/net/](https://github.com/aws/aws-encryption-sdk/tree/mainline/AwsEncryptionSDK/runtimes/net/) 디렉터리를 참조하세요.

**Topics**
+ [설치 및 빌드](#dot-net-install)
+ [디버깅](#dot-net-debugging)
+ [예제](dot-net-examples.md)

## AWS Encryption SDK for .NET 설치
<a name="dot-net-install"></a>

 AWS Encryption SDK for .NET은 NuGet에서 [https://www.nuget.org/packages/AWS.Cryptography.EncryptionSDK](https://www.nuget.org/packages/AWS.Cryptography.EncryptionSDK) 패키지로 사용할 수 있습니다. for .NET 설치 및 빌드 AWS Encryption SDK 에 대한 자세한 내용은 `aws-encryption-sdk-net`리포지토리의 [README.md](https://github.com/aws/aws-encryption-sdk/tree/mainline/AwsEncryptionSDK/runtimes/net/#readme) 파일을 참조하세요.

**버전 3.x**  
 AWS Encryption SDK for .NET 버전 3.*x*는 Windows에서만 .NET Framework 4.5.2\$14.8을 지원합니다. 지원되는 모든 운영 체제에서 .NET Core 3.0 이상 및 .NET 5.0 이상을 지원합니다.

**버전 4.x**  
 AWS Encryption SDK for .NET 버전 4.*x*는 .NET 6.0 및 .NET Framework net48 이상을 지원합니다. 버전 4.*x*에는 .NET v3용 AWS SDK가 필요합니다.

**버전 5.x**  
 AWS Encryption SDK for .NET 버전 5.*x*는 .NET 6.0 및 .NET Framework net48 이상을 지원합니다. 버전 5.*x*에는 .NET v4용 재료 공급자 라이브러리(MPL) 및 AWS SDK 버전 2.*x*가 필요합니다.

 AWS Encryption SDK for .NET에는 AWS Key Management Service (AWS KMS) 키를 사용하지 않더라도 SDK for .NET 가 필요합니다. NuGet 패키지와 함께 설치됩니다. 그러나 AWS KMS 키를 사용하지 않는 한 AWS Encryption SDK for .NET에는 AWS 계정자격 AWS 증명 또는 AWS 서비스와의 상호 작용이 필요하지 않습니다. 필요한 경우 AWS 계정 설정에 대한 도움말은 섹션을 참조하세요[와 AWS Encryption SDK 함께 사용 AWS KMS](getting-started.md).

## AWS Encryption SDK for .NET 디버깅
<a name="dot-net-debugging"></a>

 AWS Encryption SDK for .NET은 로그를 생성하지 않습니다. AWS Encryption SDK for .NET의 예외는 예외 메시지를 생성하지만 스택 추적은 생성하지 않습니다.

디버깅에 도움이 되도록 SDK for .NET에서 로그인을 활성화해야 합니다. 의 로그 및 오류 메시지는에서 발생하는 오류를 AWS Encryption SDK for .NET의 오류 SDK for .NET 와 구별하는 데 도움이 될 SDK for .NET 수 있습니다. SDK for .NET 로깅에 대한 도움말은 *AWS SDK for .NET 개발자 안내서*의 [AWSLogging](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-config-other.html#config-setting-awslogging)을 참조하세요. (이 주제를 보려면 **.NET Framework 콘텐츠를 열어서 보기** 섹션을 확장하세요.)

# AWS Encryption SDK for .NET 예제
<a name="dot-net-examples"></a>

다음 예제에서는 for AWS Encryption SDK .NET을 사용하여 프로그래밍할 때 사용하는 기본 코딩 패턴을 보여줍니다. 특히 AWS Encryption SDK 및 재료 공급자 라이브러리를 인스턴스화합니다. 그런 다음 각 메서드를 호출하기 전에 메서드의 입력을 정의하는 객체를 인스턴스화합니다. 이는 SDK for .NET에서 사용하는 코딩 패턴과 매우 비슷합니다.

대체 알고리즘 제품군 지정 AWS Encryption SDK, 암호화된 데이터 키 제한, AWS KMS 다중 리전 키 사용 등에서 옵션을 구성하는 방법을 보여주는 예제는 섹션을 참조하세요[구성 AWS Encryption SDK](configure.md).

for .NET을 사용한 프로그래밍에 AWS Encryption SDK 대한 자세한 예는 GitHub의 `aws-encryption-sdk`리포지토리 `aws-encryption-sdk-net` 디렉터리에 있는 [예제](https://github.com/aws/aws-encryption-sdk/tree/mainline/AwsEncryptionSDK/runtimes/net/Examples)를 참조하세요.

## AWS Encryption SDK for .NET에서 데이터 암호화
<a name="dot-net-example-encrypt"></a>

이 예제에서는 데이터를 암호화하는 기본 패턴을 보여줍니다. 하나의 AWS KMS 래핑 키로 보호되는 데이터 키로 작은 파일을 암호화합니다.

1단계: AWS Encryption SDK 및 재료 공급자 라이브러리를 인스턴스화합니다.  
먼저 AWS Encryption SDK 및 재료 공급자 라이브러리를 인스턴스화합니다. 의 메서드를 사용하여 데이터를 암호화하고 해독 AWS Encryption SDK 합니다. 구성 요소 공급자 라이브러리의 메서드를 사용하여, 데이터를 보호하는 키를 지정하는 키링을 만들 수 있습니다.  
 AWS Encryption SDK 및 재료 공급자 라이브러리를 인스턴스화하는 방법은 for . AWS Encryption SDK NET의 버전 3.*x*와 4.*x* 간에 다릅니다. 다음 단계는 for . AWS Encryption SDK NET의 버전 3.*x*와 4.*x*에서 모두 동일합니다.  

```
// Instantiate the AWS Encryption SDK and material providers
var encryptionSdk = AwsEncryptionSdkFactory.CreateDefaultAwsEncryptionSdk();
var materialProviders =
    AwsCryptographicMaterialProvidersFactory.CreateDefaultAwsCryptographicMaterialProviders();
```

```
// Instantiate the AWS Encryption SDK and material providers
var esdk =  new ESDK(new AwsEncryptionSdkConfig());
var mpl = new MaterialProviders(new MaterialProvidersConfig());
```

2단계: 키링에 대한 입력 객체를 생성합니다.  
키링을 만드는 각 메서드에는 해당하는 입력 객체 클래스가 있습니다. 예를 들어, `CreateAwsKmsKeyring()` 메서드의 입력 객체를 만들려면 `CreateAwsKmsKeyringInput` 클래스의 인스턴스를 생성합니다.  
이 키링의 입력에 [생성기 키](use-kms-keyring.md#kms-keyring-encrypt)를 지정하지 않더라도 `KmsKeyId` 파라미터로 지정된 단일 KMS 키는 생성기 키입니다. 데이터를 암호화하는 데이터 키를 생성하고 암호화합니다.  
이 입력 객체에는 KMS 키 AWS 리전 의에 대한 AWS KMS 클라이언트가 필요합니다. AWS KMS 클라이언트를 생성하려면에서 `AmazonKeyManagementServiceClient` 클래스를 인스턴스화합니다 SDK for .NET. 파라미터 없이 `AmazonKeyManagementServiceClient()` 생성자를 호출하면 기본값으로 클라이언트가 만들어집니다.  
 AWS Encryption SDK for .NET을 사용한 암호화에 사용되는 AWS KMS 키링에서 키 ID, 키 ARN, 별칭 이름 또는 별칭 ARN을 사용하여 [KMS 키를 식별할](use-kms-keyring.md#kms-keyring-id) 수 있습니다. 복호화에 사용되는 AWS KMS 키링에서는 키 ARN을 사용하여 각 KMS 키를 식별해야 합니다. 복호화에 암호화 키링을 재사용하려는 경우 모든 KMS 키에 키 ARN 식별자를 사용합니다.  

```
string keyArn = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab";

// Instantiate the keyring input object
var kmsKeyringInput = new CreateAwsKmsKeyringInput
{    
    KmsClient = new AmazonKeyManagementServiceClient(),
    KmsKeyId = keyArn
};
```

3단계: 키링을 생성합니다.  
키링을 생성하려면 키링 입력 객체를 사용하여 키링 메서드를 호출합니다. 이 예제에서는 KMS 키를 하나만 사용하는 `CreateAwsKmsKeyring()` 메서드를 사용합니다.  

```
var keyring = materialProviders.CreateAwsKmsKeyring(kmsKeyringInput);
```

4단계: 암호화 컨텍스트를 정의합니다.  
[암호화 컨텍스트](concepts.md#encryption-context)는 선택 사항이지만에서 암호화 작업의 권장 요소입니다 AWS Encryption SDK. 비밀이 아닌 키-값 페어를 하나 이상 정의할 수 있습니다.  
 AWS Encryption SDK for .NET 버전 4.*x*에서는 필요한 암호화 컨텍스트 [CMM을 사용하여 모든 암호화 요청에 암호화 컨텍스트](configure.md#config-required-encryption-context-cmm)를 요구할 수 있습니다.

```
// Define the encryption context
var encryptionContext = new Dictionary<string, string>()
{
    {"purpose", "test"}
};
```

5단계: 암호화에 대한 입력 객체를 생성합니다.  
`Encrypt()` 메서드를 호출하기 전에 `EncryptInput` 클래스의 인스턴스를 생성합니다.  

```
string plaintext = File.ReadAllText("C:\\Documents\\CryptoTest\\TestFile.txt");
            
// Define the encrypt input
var encryptInput = new EncryptInput
{
    Plaintext = plaintext,
    Keyring = keyring,
    EncryptionContext = encryptionContext
};
```

6단계: 일반 텍스트를 암호화합니다.  
의 `Encrypt()` 메 AWS Encryption SDK 서드를 사용하여 정의한 키링을 사용하여 일반 텍스트를 암호화합니다.  
`Encrypt() ` 메서드가 반환하는 `EncryptOutput`에는 암호화된 메시지(`Ciphertext`), 암호화 컨텍스트 및 알고리즘 제품군을 가져오는 메서드가 있습니다.  

```
var encryptOutput = encryptionSdk.Encrypt(encryptInput);
```

7단계: 암호화된 메시지를 가져옵니다.  
 AWS Encryption SDK for .NET의 `Decrypt()` 메서드는 `EncryptOutput` 인스턴스의 `Ciphertext` 멤버를 가져옵니다.  
`EncryptOutput` 객체의 `Ciphertext` 멤버는 암호화 컨텍스트를 비롯해 암호화된 데이터, 암호화된 데이터 키 및 메타데이터를 포함하는 이동 가능 객체인 [암호화된 메시지](concepts.md#message)입니다. 암호화된 메시지를 장기간 안전하게 저장하거나 `Decrypt()` 메서드에 제출하여 일반 텍스트를 복구할 수 있습니다.  

```
var encryptedMessage = encryptOutput.Ciphertext;
```

## AWS Encryption SDK for .NET의 엄격 모드에서 복호화
<a name="dot-net-decrypt-strict"></a>

모범 사례에서는 데이터를 복호화하는 데 사용할 키를 지정하는 것이 좋으며, 이러한 옵션을 *엄격한 모드*라고 합니다. 는 키링에 지정한 KMS 키만 AWS Encryption SDK 사용하여 사이퍼텍스트를 복호화합니다. 복호화 키링의 키에는 데이터를 암호화한 키가 하나 이상 포함되어야 합니다.

이 예제에서는 AWS Encryption SDK for .NET을 사용하여 엄격한 모드에서 복호화하는 기본 패턴을 보여줍니다.

1단계: AWS Encryption SDK 및 재료 공급자 라이브러리를 인스턴스화합니다.  

```
// Instantiate the AWS Encryption SDK and material providers
var esdk =  new ESDK(new AwsEncryptionSdkConfig());
var mpl = new MaterialProviders(new MaterialProvidersConfig());
```

2단계: 키링에 대한 입력 객체를 생성합니다.  
키링 메서드의 파라미터를 지정하려면 입력 객체를 생성합니다. AWS Encryption SDK for .NET의 각 키링 메서드에는 해당 입력 객체가 있습니다. 이 예제에서는 `CreateAwsKmsKeyring()` 메서드를 사용하여 키링을 만들기 때문에 입력에 대한 `CreateAwsKmsKeyringInput` 클래스를 인스턴스화합니다.  
복호화 키링에서는 키 ARN을 사용하여 KMS 키를 식별해야 합니다.  

```
string keyArn = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab";

// Instantiate the keyring input object
var kmsKeyringInput = new CreateAwsKmsKeyringInput
{
    KmsClient = new AmazonKeyManagementServiceClient(),
    KmsKeyId = keyArn
};
```

3단계: 키링을 생성합니다.  
이 예제에서는 복호화 키링을 생성하기 위해 `CreateAwsKmsKeyring()` 메서드와 키링 입력 객체를 사용합니다.  

```
var keyring = materialProviders.CreateAwsKmsKeyring(kmsKeyringInput);
```

4단계: 복호화에 대한 입력 객체를 생성합니다.  
`Decrypt()` 메서드의 입력 객체를 만들려면 `DecryptInput` 클래스를 인스턴스화합니다.  
`DecryptInput()` 생성자의 `Ciphertext` 파라미터는 `Encrypt()` 메서드가 반환한 `EncryptOutput` 객체의 `Ciphertext` 멤버를 가져옵니다. `Ciphertext` 속성은 [암호화된 메시지](concepts.md#message)를 나타내며, 여기에는 AWS Encryption SDK 가 메시지를 복호화하는 데 필요한 암호화된 데이터, 암호화된 데이터 키 및 메타데이터가 포함됩니다.  
 AWS Encryption SDK for .NET 버전 4.*x*에서는 선택적 `EncryptionContext` 파라미터를 사용하여 `Decrypt()` 메서드에서 암호화 컨텍스트를 지정할 수 있습니다.  
`EncryptionContext` 파라미터를 사용하여 암호화에 사용된 암호화 컨텍스트가 사이퍼텍스트를 복호화하는 데 사용되는 암호화 컨텍스트에 *포함되어 있는지* 확인합니다. 는 기본 알고리즘 제품군과 같이 서명과 함께 알고리즘 제품군을 사용하는 경우 디지털 서명을 포함하여 암호화 컨텍스트에 페어를 AWS Encryption SDK 추가합니다.  

```
var encryptedMessage = encryptOutput.Ciphertext;

var decryptInput = new DecryptInput
{
    Ciphertext = encryptedMessage,
    Keyring = keyring,
    EncryptionContext = encryptionContext // OPTIONAL
};
```

5단계: 사이퍼텍스트를 복호화합니다.  

```
var decryptOutput = encryptionSdk.Decrypt(decryptInput);
```

6단계: 암호화 컨텍스트 - 버전 3.*x*를 확인합니다.  
 AWS Encryption SDK for .NET 버전 3.*x*의 `Decrypt()` 메서드는 암호화 컨텍스트를 사용하지 않습니다. 암호화된 메시지의 메타데이터에서 암호화 컨텍스트 값을 가져옵니다. 하지만 일반 텍스트를 반환하거나 사용하기 전에, 사이퍼텍스트를 복호화하는 데 사용된 암호화 컨텍스트에 암호화 시 제공한 암호화 컨텍스트가 포함되어 있는지 확인하는 것이 모범 사례입니다.  
암호화에 사용된 암호화 컨텍스트가 사이퍼텍스트를 복호화하는 데 사용된 암호화 컨텍스트에 *포함되어 있는지* 확인합니다. 는 기본 알고리즘 제품군과 같이 서명과 함께 알고리즘 제품군을 사용하는 경우 디지털 서명을 포함하여 암호화 컨텍스트에 페어를 AWS Encryption SDK 추가합니다.  

```
// Verify the encryption context
string contextKey = "purpose";
string contextValue = "test";

if (!decryptOutput.EncryptionContext.TryGetValue(contextKey, out var decryptContextValue)
    || !decryptContextValue.Equals(contextValue))
{
    throw new Exception("Encryption context does not match expected values");
}
```

## AWS Encryption SDK for .NET에서 검색 키링을 사용하여 복호화
<a name="dot-net-decrypt-discovery"></a>

복호화를 위한 KMS 키를 지정하는 대신, KMS 키를 지정하지 않는 키링인 AWS KMS *검색 키링*을 제공할 수 있습니다. 호출자에게 키에 대한 AWS Encryption SDK 복호화 권한이 있는 경우 검색 키링을 사용하면가 데이터를 암호화한 KMS 키를 사용하여 데이터를 복호화할 수 있습니다. 모범 사례를 위해 지정된 파티션 AWS 계정 의 KMS 키로 사용할 수 있는 KMS 키를 제한하는 검색 필터를 추가합니다.

 AWS Encryption SDK for .NET은 클라이언트가 필요한 AWS KMS 기본 검색 키링과 하나 이상의를 지정해야 하는 검색 다중 키링을 제공합니다 AWS 리전. 클라이언트와 리전은 암호화된 메시지를 복호화하는 데 사용할 수 있는 KMS 키를 제한합니다. 두 키링의 입력 객체는 권장 검색 필터를 사용합니다.

다음 예제에서는 AWS KMS 검색 키링 및 검색 필터를 사용하여 데이터를 복호화하는 패턴을 보여줍니다.

1단계: AWS Encryption SDK 및 재료 공급자 라이브러리를 인스턴스화합니다.  

```
// Instantiate the AWS Encryption SDK and material providers
var esdk =  new ESDK(new AwsEncryptionSdkConfig());
var mpl = new MaterialProviders(new MaterialProvidersConfig());
```

2단계: 키링에 대한 입력 객체를 생성합니다.  
키링 메서드의 파라미터를 지정하려면 입력 객체를 생성합니다. AWS Encryption SDK for .NET의 각 키링 메서드에는 해당 입력 객체가 있습니다. 이 예제에서는 `CreateAwsKmsDiscoveryKeyring()` 메서드를 사용하여 키링을 만들기 때문에 입력에 대한 `CreateAwsKmsDiscoveryKeyringInput` 클래스를 인스턴스화합니다.  

```
List<string> accounts = new List<string> { "111122223333" };

var discoveryKeyringInput = new CreateAwsKmsDiscoveryKeyringInput
{
    KmsClient = new AmazonKeyManagementServiceClient(),
    DiscoveryFilter = new DiscoveryFilter()
    {
        AccountIds = accounts,
        Partition = "aws"
    }
};
```

3단계: 키링을 생성합니다.  
이 예제에서는 복호화 키링을 생성하기 위해 `CreateAwsKmsDiscoveryKeyring()` 메서드와 키링 입력 객체를 사용합니다.  

```
var discoveryKeyring = materialProviders.CreateAwsKmsDiscoveryKeyring(discoveryKeyringInput);
```

4단계: 복호화에 대한 입력 객체를 생성합니다.  
`Decrypt()` 메서드의 입력 객체를 만들려면 `DecryptInput` 클래스를 인스턴스화합니다. `Ciphertext` 파라미터의 값은 `Encrypt()` 메서드가 반환하는 `EncryptOutput` 객체의 `Ciphertext` 멤버입니다.  
 AWS Encryption SDK for .NET 버전 4.*x*에서는 선택적 `EncryptionContext` 파라미터를 사용하여 `Decrypt()` 메서드에서 암호화 컨텍스트를 지정할 수 있습니다.  
`EncryptionContext` 파라미터를 사용하여 암호화에 사용된 암호화 컨텍스트가 사이퍼텍스트를 복호화하는 데 사용되는 암호화 컨텍스트에 *포함되어 있는지* 확인합니다. 는 기본 알고리즘 제품군과 같이 서명과 함께 알고리즘 제품군을 사용하는 경우 디지털 서명을 포함하여 암호화 컨텍스트에 페어를 AWS Encryption SDK 추가합니다.  

```
var ciphertext = encryptOutput.Ciphertext;

var decryptInput = new DecryptInput
{
    Ciphertext = ciphertext,
    Keyring = discoveryKeyring,
    EncryptionContext = encryptionContext // OPTIONAL
    
};
var decryptOutput = encryptionSdk.Decrypt(decryptInput);
```

5단계: 암호화 컨텍스트 - 버전 3.*x*를 확인합니다.  
 AWS Encryption SDK for .NET 버전 3.*x*의 `Decrypt()` 메서드는에서 암호화 컨텍스트를 취하지 않습니다`Decrypt()`. 암호화된 메시지의 메타데이터에서 암호화 컨텍스트 값을 가져옵니다. 하지만 일반 텍스트를 반환하거나 사용하기 전에, 사이퍼텍스트를 복호화하는 데 사용된 암호화 컨텍스트에 암호화 시 제공한 암호화 컨텍스트가 포함되어 있는지 확인하는 것이 모범 사례입니다.  
암호화에 사용된 암호화 컨텍스트가 사이퍼텍스트를 복호화하는 데 사용된 암호화 컨텍스트에 *포함되어 있는지* 확인합니다. 는 기본 알고리즘 제품군과 같이 서명과 함께 알고리즘 제품군을 사용하는 경우 디지털 서명을 포함하여 암호화 컨텍스트에 페어를 AWS Encryption SDK 추가합니다.  

```
// Verify the encryption context
string contextKey = "purpose";
string contextValue = "test";

if (!decryptOutput.EncryptionContext.TryGetValue(contextKey, out var decryptContextValue)
    || !decryptContextValue.Equals(contextValue))
{
    throw new Exception("Encryption context does not match expected values");
}
```