AWS Encryption SDK 용.NET 예 - AWS Encryption SDK

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

AWS Encryption SDK 용.NET 예

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

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

AWS Encryption SDK 용 를 사용한 프로그래밍의 자세한 예는 의 aws-encryption-sdk-dafny리포지토리 aws-encryption-sdk-net 디렉터리의 예제를 NET참조하세요 GitHub.

AWS Encryption SDK 용 에서 데이터 암호화.NET

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

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

먼저 AWS Encryption SDK 및 재료 공급자 라이브러리를 인스턴스화합니다. 의 메서드 AWS Encryption SDK 를 사용하여 데이터를 암호화하고 복호화합니다. 구성 요소 공급자 라이브러리의 메서드를 사용하여, 데이터를 보호하는 키를 지정하는 키링을 만들 수 있습니다.

AWS Encryption SDK 와 재료 공급자 라이브러리를 인스턴스화하는 방법은 AWS Encryption SDK 용 의 버전 3.x와 4.x 간에 다릅니다NET. 다음 단계는 모두 용 의 버전 3.x와 4.x에서 동일합니다 AWS Encryption SDK NET.

Version 3.x
// Instantiate the AWS Encryption SDK and material providers var encryptionSdk = AwsEncryptionSdkFactory.CreateDefaultAwsEncryptionSdk(); var materialProviders = AwsCryptographicMaterialProvidersFactory.CreateDefaultAwsCryptographicMaterialProviders();
Version 4.x
// Instantiate the AWS Encryption SDK and material providers var esdk = new ESDK(new AwsEncryptionSdkConfig()); var mpl = new MaterialProviders(new MaterialProvidersConfig());
2단계: 키링에 대한 입력 객체를 생성합니다.

키링을 만드는 각 메서드에는 해당하는 입력 객체 클래스가 있습니다. 예를 들어, CreateAwsKmsKeyring() 메서드의 입력 객체를 만들려면 CreateAwsKmsKeyringInput 클래스의 인스턴스를 생성합니다.

이 키링에 대한 입력이 생성기 키 를 지정하지는 않지만 KmsKeyId 파라미터로 지정된 단일 KMS 키는 생성기 키입니다. 데이터를 암호화하는 데이터 키를 생성하고 암호화합니다.

이 입력 객체에는 KMS 키 AWS 리전 의 에 대한 AWS KMS 클라이언트가 필요합니다. AWS KMS 클라이언트를 생성하려면 에서 AmazonKeyManagementServiceClient 클래스를 인스턴스화합니다 AWS SDK for .NET. 파라미터 없이 AmazonKeyManagementServiceClient() 생성자를 호출하면 기본값으로 클라이언트가 만들어집니다.

용 를 사용하여 암호화하는 AWS Encryption SDK 데 사용되는 AWS KMS 키링에서 키 IDNET, 키 , ARN별칭 이름 또는 별칭을 사용하여 키를 식별할 수 있습니다ARN. KMS 복호화에 사용되는 AWS KMS 키링에서는 키를 사용하여 각 KMS 키를 ARN 식별해야 합니다. 복호화에 암호화 키링을 재사용하려는 경우 모든 키에 키 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단계: 키링을 생성합니다.

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

var keyring = materialProviders.CreateAwsKmsKeyring(kmsKeyringInput);
4단계: 암호화 컨텍스트를 정의합니다.

암호화 컨텍스트는 선택 사항이지만 에서 암호화 작업을 수행하는 데 적극 권장됩니다 AWS Encryption SDK. 비밀이 아닌 키-값 페어를 하나 이상 정의할 수 있습니다.

참고

AWS Encryption SDK 용 의 버전 4.x를 사용하면 필요한 암호화 컨텍스트 를 사용하여 모든 암호화 요청에 암호화 컨텍스트CMM를 요구할 NET수 있습니다.

// 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 대한 의 Decrypt() 메서드입니다.NET 는 EncryptOutput 인스턴스의 Ciphertext 멤버를 가져옵니다.

EncryptOutput 객체의 Ciphertext 멤버는 암호화 컨텍스트를 비롯해 암호화된 데이터, 암호화된 데이터 키 및 메타데이터를 포함하는 이동 가능 객체인 암호화된 메시지입니다. 암호화된 메시지를 장기간 안전하게 저장하거나 Decrypt() 메서드에 제출하여 일반 텍스트를 복구할 수 있습니다.

var encryptedMessage = encryptOutput.Ciphertext;

AWS Encryption SDK 용 에서 엄격한 모드로 복호화.NET

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

이 예제는 AWS Encryption SDK 용 를 사용하여 엄격한 모드에서 복호화하는 기본 패턴을 보여줍니다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 용 의 각 키링 메서드.NET 에는 해당 입력 객체가 있습니다. 이 예제에서는 CreateAwsKmsKeyring() 메서드를 사용하여 키링을 만들기 때문에 입력에 대한 CreateAwsKmsKeyringInput 클래스를 인스턴스화합니다.

복호화 키링에서는 키를 사용하여 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단계: 키링을 생성합니다.

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

var keyring = materialProviders.CreateAwsKmsKeyring(kmsKeyringInput);
4단계: 복호화에 대한 입력 객체를 생성합니다.

Decrypt() 메서드의 입력 객체를 만들려면 DecryptInput 클래스를 인스턴스화합니다.

DecryptInput() 생성자의 Ciphertext 파라미터는 Encrypt() 메서드가 반환한 EncryptOutput 객체의 Ciphertext 멤버를 가져옵니다. Ciphertext 속성은 암호화된 메시지를 나타내며, 여기에는 AWS Encryption SDK 가 메시지를 복호화하는 데 필요한 암호화된 데이터, 암호화된 데이터 키 및 메타데이터가 포함됩니다.

AWS Encryption SDK 용 의 버전 4.x를 사용하면 선택적 EncryptionContext 파라미터를 사용하여 Decrypt() 메서드에서 암호화 컨텍스트를 지정할 NET수 있습니다.

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 용 의 버전 3.x Decrypt() 메서드입니다.NET 는 암호화 컨텍스트를 사용하지 않습니다. 암호화된 메시지의 메타데이터에서 암호화 컨텍스트 값을 가져옵니다. 하지만 일반 텍스트를 반환하거나 사용하기 전에, 사이퍼텍스트를 복호화하는 데 사용된 암호화 컨텍스트에 암호화 시 제공한 암호화 컨텍스트가 포함되어 있는지 확인하는 것이 모범 사례입니다.

암호화에 사용된 암호화 컨텍스트가 사이퍼텍스트를 복호화하는 데 사용된 암호화 컨텍스트에 포함되어 있는지 확인합니다. 는 기본 알고리즘 제품군과 같이 서명과 함께 알고리즘 제품군을 사용하는 경우 디지털 서명을 포함하여 암호화 컨텍스트에 페어를 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 용 에서 검색 키링을 사용하여 복호화합니다.NET

복호화할 KMS 키를 지정하는 대신 KMS 키를 지정하지 않는 키링인 검색 키링을 제공할 AWS KMS 수 있습니다. 발신자에게 KMS 키에 대한 AWS Encryption SDK 복호화 권한이 있는 경우 검색 키링을 사용하면 가 데이터를 암호화한 키를 사용하여 데이터를 복호화할 수 있습니다. 모범 사례를 위해 AWS 계정 특정 파티션의 키로 사용할 수 있는 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 용 의 각 키링 메서드.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 용 의 버전 4.x를 사용하면 선택적 EncryptionContext 파라미터를 사용하여 Decrypt() 메서드에서 암호화 컨텍스트를 지정할 NET수 있습니다.

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 용 의 버전 3.x Decrypt() 메서드입니다.NET 는 에서 암호화 컨텍스트를 취하지 않습니다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"); }