기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
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
디렉터리의 예제
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.
- 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"); }