Raw AES 키링 - AWS 데이터베이스 암호화 SDK

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

Raw AES 키링

클라이언트 측 암호화 라이브러리는 AWS 데이터베이스 암호화 SDK로 이름이 변경되었습니다. 이 개발자 안내서는 여전히 DynamoDB Encryption Client에 대한 정보를 제공합니다.

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

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

키 네임스페이스 및 이름

키링에서 AES 키를 식별하기 위해 Raw AES 키링은 사용자가 제공한 키 네임스페이스키 이름을 사용합니다. 이 값은 비밀이 아닙니다. AWS 데이터베이스 암호화 SDK가 레코드에 추가하는 자료 설명에는 일반 텍스트로 표시됩니다. HSM 또는 키 관리 시스템의 키 네임스페이스와 해당 시스템에서 AES 키를 식별하는 키 이름을 사용하는 것이 좋습니다.

참고

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

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

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

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

Java
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);
C# / .NET
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 var keyringInput = new CreateRawAesKeyringInput { KeyNamespace = keyNamespace, KeyName = keyName, WrappingKey = AESWrappingKey, WrappingAlg = AesWrappingAlg.ALG_AES256_GCM_IV12_TAG16 }; var matProv = new MaterialProviders(new MaterialProvidersConfig()); IKeyring rawAesKeyring = matProv.CreateRawAesKeyring(keyringInput);