다중 키링 - AWS Encryption SDK

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

다중 키링

키링을 여러 개의 키링으로 결합할 수 있습니다. 다중 키링은 유형이 같거나 다른 하나 이상의 개별 키링으로 구성된 키링입니다. 이 효과는 여러 개의 키링을 연속으로 사용하는 것과 같습니다. 다중 키링을 사용하여 데이터를 암호화하는 경우 해당 키링의 모든 래핑 키로 해당 데이터를 복호화할 수 있습니다.

다중 키링을 생성하여 데이터를 암호화하는 경우, 키링 중 하나를 생성기 키링으로 지정하세요. 다른 모든 키링은 하위 키링이라고 합니다. 생성기 키링은 일반 텍스트 데이터 키를 생성하고 암호화합니다. 그러면 모든 하위 키링의 모든 래핑 키가 동일한 일반 텍스트 데이터 키를 암호화합니다. 다중 키링은 다중 키링의 각 래핑 키에 대해 일반 텍스트 키와 암호화된 데이터 키 하나를 반환합니다. 생성기 키링 없이 다중 키링을 생성하는 경우 이를 사용하여 데이터를 복호화할 수 있지만 암호화에는 사용할 수 없습니다. 생성기 키링이 KMS 키링인 경우 AWS KMS의 생성기 키가 일반 텍스트 키를 생성하고 암호화합니다. 그런 다음, AWS KMS의 모든 추가 AWS KMS keys와 다중 링의 모든 하위 키링의 모든 래핑 키는 동일한 일반 텍스트 키를 암호화합니다.

AWS Encryption SDK에서는 키링을 사용하여 암호화된 데이터 키 중 하나를 복호화합니다. 키링은 다중 키링에 지정된 순서대로 호출됩니다. 모든 키링의 모든 키가 암호화된 데이터 키를 복호화할 수 있는 즉시 처리가 중지됩니다.

버전 1.7.x부터 암호화된 데이터 키가 AWS Key Management Service(AWS KMS) 키링(또는 마스터 키 제공자)으로 암호화되면 AWS Encryption SDK는 항상 AWS KMS key의 키 ARN을 AWS KMS 복호화 작업의 KeyId 매개변수로 전달합니다. 이는 사용하려는 래핑 키로 암호화된 데이터 키의 암호를 해독하는 AWS KMS 모범 사례입니다.

다중 키링의 작동 예제를 보려면 다음을 참조하세요.

다중 키링을 만들려면 먼저 하위 키링을 인스턴스화하세요. 이 예제에서는 AWS KMS과 Raw AES 키링을 사용합니다. 하지만 지원되는 다른 키링을 다중 키링에 조합해도 됩니다.

C
/* Define an AWS KMS keyring. For details, see string.cpp */ struct aws_cryptosdk_keyring *kms_keyring = Aws::Cryptosdk::KmsKeyring::Builder().Build(example_key); // Define a Raw AES keyring. For details, see raw_aes_keyring.c */ struct aws_cryptosdk_keyring *aes_keyring = aws_cryptosdk_raw_aes_keyring_new( alloc, wrapping_key_namespace, wrapping_key_name, wrapping_key, AWS_CRYPTOSDK_AES256);
C# / .NET
// Define an AWS KMS keyring. For details, see AwsKmsKeyringExample.cs. var kmsKeyring = materialProviders.CreateAwsKmsKeyring(createKmsKeyringInput); // Define a Raw AES keyring. For details, see RawAESKeyringExample.cs. var aesKeyring = materialProviders.CreateRawAesKeyring(createAesKeyringInput);
JavaScript Browser
const clientProvider = getClient(KMS, { credentials }) // Define an AWS KMS keyring. For details, see kms_simple.ts. const kmsKeyring = new KmsKeyringBrowser({ generatorKeyId: exampleKey }) // Define a Raw AES keyring. For details, see aes_simple.ts. const aesKeyring = new RawAesKeyringWebCrypto({ keyName, keyNamespace, wrappingSuite, masterKey })
JavaScript Node.js
// Define an AWS KMS keyring. For details, see kms_simple.ts. const kmsKeyring = new KmsKeyringNode({ generatorKeyId: exampleKey }) // Define a Raw AES keyring. For details, see raw_aes_keyring_node.ts. const aesKeyring = new RawAesKeyringNode({ keyName, keyNamespace, wrappingSuite, unencryptedMasterKey })
Java
// Define the raw AES keyring. final MaterialProviders matProv = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); final CreateRawAesKeyringInput createRawAesKeyringInput = CreateRawAesKeyringInput.builder() .keyName("AES_256_012") .keyNamespace("HSM_01") .wrappingKey(AESWrappingKey) .wrappingAlg(AesWrappingAlg.ALG_AES256_GCM_IV12_TAG16) .build(); IKeyring rawAesKeyring = matProv.CreateRawAesKeyring(createRawAesKeyringInput); // Define the AWS KMS keyring. final CreateAwsKmsMrkMultiKeyringInput createAwsKmsMrkMultiKeyringInput = CreateAwsKmsMrkMultiKeyringInput.builder() .generator(kmsKeyArn) .build(); IKeyring awsKmsMrkMultiKeyring = matProv.CreateAwsKmsMrkMultiKeyring(createAwsKmsMrkMultiKeyringInput);

그런 다음 다중 키링을 만들고 생성기 키링(있는 경우)을 지정합니다. 이 예제에서는 AWS KMS가 생성기 키링이고 AES 키링이 하위 키링인 다중 키링을 만듭니다.

C

C의 다중 키링 생성자에서는 생성기 키링만 지정합니다.

struct aws_cryptosdk_keyring *multi_keyring = aws_cryptosdk_multi_keyring_new(alloc, kms_keyring);

다중 키링에 하위 키링을 추가하려면 aws_cryptosdk_multi_keyring_add_child 메서드를 사용합니다. 추가하는 각 하위 키링에 대해 메서드를 한 번 호출해야 합니다.

// Add the Raw AES keyring (C only) aws_cryptosdk_multi_keyring_add_child(multi_keyring, aes_keyring);
C# / .NET

.NET CreateMultiKeyringInput 생성자를 사용하면 생성기 키링과 자식 키링을 정의할 수 있습니다. 결과 CreateMultiKeyringInput 객체는 변경할 수 없습니다.

var createMultiKeyringInput = new CreateMultiKeyringInput { Generator = kmsKeyring, ChildKeyrings = new List<IKeyring>() {aesKeyring} }; var multiKeyring = materialProviders.CreateMultiKeyring(createMultiKeyringInput);
JavaScript Browser

JavaScript 멀티 키링은 변경할 수 없습니다. JavaScript 다중 키링 생성자를 사용하면 제너레이터 키링과 여러 개의 하위 키링을 지정할 수 있습니다.

const clientProvider = getClient(KMS, { credentials }) const multiKeyring = new MultiKeyringWebCrypto(generator: kmsKeyring, children: [aesKeyring]);
JavaScript Node.js

JavaScript 다중 키링은 변경할 수 없습니다. JavaScript 다중 키링 생성자를 사용하면 제너레이터 키링과 여러 개의 하위 키링을 지정할 수 있습니다.

const multiKeyring = new MultiKeyringNode(generator: kmsKeyring, children: [aesKeyring]);
Java

Java CreateMultiKeyringInput 생성자를 사용하면 제너레이터 키링과 자식 키링을 정의할 수 있습니다. 결과 createMultiKeyringInput 객체는 변경할 수 없습니다.

final CreateMultiKeyringInput createMultiKeyringInput = CreateMultiKeyringInput.builder() .generator(awsKmsMrkMultiKeyring) .childKeyrings(Collections.singletonList(rawAesKeyring)) .build(); IKeyring multiKeyring = matProv.CreateMultiKeyring(createMultiKeyringInput);

이제 다중 키링을 사용하여 데이터를 암호화 및 복호화할 수 있습니다.