Raw AES 키링 - AWS Encryption SDK

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

Raw AES 키링

AWS Encryption SDK를 사용하면 데이터 키를 보호하는 래핑 키로 제공한 AES 대칭 키를 사용할 수 있습니다. 가급적이면 하드웨어 보안 모듈(HSM) 또는 키 관리 시스템에서 키 자료를 생성, 저장 및 보호해야 합니다. 래핑 키를 제공하고 로컬 또는 오프라인에서 데이터 키를 암호화해야 하는 경우 Raw AES 키링을 사용하세요.

Raw AES 키링은 데이터를 암호화하기 위해 바이트 배열로 지정하는 AES-GCM 알고리즘 및 래핑 키를 사용합니다. 각 Raw AES 키링에는 래핑 키를 하나만 지정할 수 있지만, 여러 개의 Raw AES 키링을 단독으로 또는 다른 키링과 함께 다중 키링에 포함할 수 있습니다.

Raw AES 키링은 AES 암호화 키와 함께 사용되는 AWS Encryption SDK for Python 경우 의 RawMasterKey클래스 AWS Encryption SDK for Java 및 클래스와 동일하며 상호 운용됩니다. JceMasterKey 한 구현으로 데이터를 암호화하고 다른 구현으로는 동일한 래핑 키를 사용하여 데이터를 복호화할 수 있습니다. 자세한 내용은 키링 호환성 섹션을 참조하세요.

키 네임스페이스 및 이름

키링에서 AES 키를 식별하기 위해 Raw AES 키링은 사용자가 제공한 키 네임스페이스키 이름을 사용합니다. 이 값은 비밀이 아닙니다. 암호화 작업이 반환하는 암호화된 메시지 헤더에 일반 텍스트로 나타납니다. HSM 또는 키 관리 시스템의 키 네임스페이스와 해당 시스템에서 AES 키를 식별하는 키 이름을 사용하는 것이 좋습니다.

참고

키 네임스페이스와 키 이름은 JceMasterKeyRawMasterKey공급자 ID(또는 공급자) 및 키 ID 필드와 동일합니다.

AWS Encryption SDK for C 및 AWS Encryption SDK for .NET은 KMS 키에 대한 aws-kms 키 네임스페이스 값을 예약합니다. 이 라이브러리의 Raw AES 키링 또는 Raw RSA 키링에는 해당 네임스페이스 값을 사용하지 마세요.

특정 메시지를 암호화하고 복호화하기 위해 서로 다른 키링을 구성하는 경우 네임스페이스와 이름 값이 중요합니다. 복호화 키링의 키 네임스페이스와 키 이름이 대/소문자를 구분하여 암호화 키링의 키 네임스페이스와 키 이름이 정확히 일치하지 않으면 키 자료 바이트가 동일하더라도 복호화 키링이 사용되지 않습니다.

예를 들어 키 네임스페이스 HSM_01과 키 이름 AES_256_012를 사용하여 Raw AES 키링을 정의할 수 있습니다. 그런 다음 해당 키링을 사용하여 일부 데이터를 암호화합니다. 해당 데이터를 복호화하려면 동일한 키 네임스페이스, 키 이름 및 키 자료를 사용하여 Raw AES 키링을 구성하세요.

다음 예제에서는 Raw AES 키링을 생성하는 방법을 보여줍니다. AESWrappingKey 변수는 사용자가 제공하는 키 자료를 나타냅니다.

C

에서 Raw AES 키링을 인스턴스화하려면 를 사용하십시오. AWS Encryption SDK for C aws_cryptosdk_raw_aes_keyring_new() 전체 예제를 보려면 raw_aes_keyring.c를 참조하세요.

struct aws_allocator *alloc = aws_default_allocator(); AWS_STATIC_STRING_FROM_LITERAL(wrapping_key_namespace, "HSM_01"); AWS_STATIC_STRING_FROM_LITERAL(wrapping_key_name, "AES_256_012"); struct aws_cryptosdk_keyring *raw_aes_keyring = aws_cryptosdk_raw_aes_keyring_new( alloc, wrapping_key_namespace, wrapping_key_name, aes_wrapping_key, wrapping_key_len);
C# / .NET

AWS Encryption SDK for .NET에서 Raw AES 키링을 만들려면 materialProviders.CreateRawAesKeyring() 메서드를 사용하세요. 전체 예제를 보려면 RawAES .cs를 참조하십시오. KeyringExample

다음 예제에서는 AWS Encryption SDK for .NET 4.x 버전을 사용합니다.

// Instantiate the AWS Encryption SDK and material providers var esdk = new ESDK(new AwsEncryptionSdkConfig()); var mpl = new MaterialProviders(new MaterialProvidersConfig()); var keyNamespace = "HSM_01"; var keyName = "AES_256_012"; // This example uses the key generator in Bouncy Castle to generate the key material. // In production, use key material from a secure source. var aesWrappingKey = new MemoryStream(GeneratorUtilities.GetKeyGenerator("AES256").GenerateKey()); // Create the keyring that determines how your data keys are protected. var createKeyringInput = new CreateRawAesKeyringInput { KeyNamespace = keyNamespace, KeyName = keyName, WrappingKey = aesWrappingKey, WrappingAlg = AesWrappingAlg.ALG_AES256_GCM_IV12_TAG16 }; var keyring = materialProviders.CreateRawAesKeyring(createKeyringInput);
JavaScript Browser

브라우저의 암호화 프리미티브를 AWS Encryption SDK for JavaScript API에서 가져옵니다. WebCrypto 키링을 구성하기 전에 원시 키 자료를 백엔드로 가져오는 RawAesKeyringWebCrypto.importCryptoKey() 데 사용해야 합니다. WebCrypto 이렇게 하면 모든 호출이 비동기식이더라도 키링이 완전하게 유지됩니다. WebCrypto

다음으로 Raw AES 키링을 인스턴스화하려면 RawAesKeyringWebCrypto() 메서드를 사용하세요. 키 자료의 길이에 따라 AES 래핑 알고리즘(“래핑 제품군)을 지정해야 합니다. 전체 예제는 aes_simple.ts (브라우저) 를 참조하십시오. JavaScript

const keyNamespace = 'HSM_01' const keyName = 'AES_256_012' const wrappingSuite = RawAesWrappingSuiteIdentifier.AES256_GCM_IV12_TAG16_NO_PADDING /* Import the plaintext AES key into the WebCrypto backend. */ const aesWrappingKey = await RawAesKeyringWebCrypto.importCryptoKey( rawAesKey, wrappingSuite ) const rawAesKeyring = new RawAesKeyringWebCrypto({ keyName, keyNamespace, wrappingSuite, aesWrappingKey })
JavaScript Node.js

AWS Encryption SDK for JavaScript for Node.js에서 Raw AES 키링을 인스턴스화하려면 RawAesKeyringNode 클래스 인스턴스를 만드세요. 키 자료의 길이에 따라 AES 래핑 알고리즘("래핑 제품군")을 지정해야 합니다. 전체 예제를 보려면 aes_simple.ts (Node.js) 를 참조하십시오. JavaScript

const keyName = 'AES_256_012' const keyNamespace = 'HSM_01' const wrappingSuite = RawAesWrappingSuiteIdentifier.AES256_GCM_IV12_TAG16_NO_PADDING const rawAesKeyring = new RawAesKeyringNode({ keyName, keyNamespace, aesWrappingKey, wrappingSuite, })
Java

에서 Raw AES 키링을 인스턴스화하려면 를 사용하십시오. AWS Encryption SDK for Java matProv.CreateRawAesKeyring()

final CreateRawAesKeyringInput keyringInput = CreateRawAesKeyringInput.builder() .keyName("AES_256_012") .keyNamespace("HSM_01") .wrappingKey(AESWrappingKey) .wrappingAlg(AesWrappingAlg.ALG_AES256_GCM_IV12_TAG16) .build(); final MaterialProviders matProv = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); IKeyring rawAesKeyring = matProv.CreateRawAesKeyring(keyringInput);