Raw AESキーリング - AWS Encryption SDK

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Raw AESキーリング

AWS Encryption SDK では、データキーを保護するラッピングキーとして指定したAES対称キーを使用できます。できればハードウェアセキュリティモジュール (HSM) またはキー管理システムで、キーマテリアルを生成、保存、保護する必要があります。ラッピングAESキーを指定し、データキーをローカルまたはオフラインで暗号化する必要がある場合は、Raw キーリングを使用します。

Raw AESキーリングは、 AES-GCM アルゴリズムと、バイト配列として指定したラッピングキーを使用してデータを暗号化します。Raw キーリングごとに指定できるラッピングAESキーは 1 つだけですが、複数の Raw AESキーリングを単独で、または他のキーリングとともにマルチキーリングに含めることができます。

Raw AESキーリングは、AES暗号化キーとともに使用される AWS Encryption SDK for Python 場合、 の JceMasterKey クラス AWS Encryption SDK for Java と の RawMasterKey クラスと同等で相互運用されます。ある実装でデータを暗号化し、それを他の実装で、同じラッピングキーを使用して復号することができます。詳細については、「キーリングの互換性」を参照してください。

キーの名前空間と名前

AES キーリング内のキーを識別するために、Raw AESキーリングは指定したキー名前空間キー名を使用します。これらの値はシークレットではありません。これらは、暗号化オペレーションが返す 暗号化されたメッセージ のヘッダーにプレーンテキストで表示されます。キーの名前空間を HSMまたは キー管理システムとして使用し、そのシステム内のキーを識別するAESキー名を使用することをお勧めします。

注記

キーの名前空間とキー名は、JceMasterKeyRawMasterKey のプロバイダー ID (またはプロバイダー) とキー ID フィールドに相当します。

AWS Encryption SDK の AWS Encryption SDK for C と 。NET はaws-kmsキーの名前空間値をKMSキー用に予約します。これらのライブラリでは、この名前空間値を Raw AESキーリングまたは Raw RSAキーリングで使用しないでください。

特定のメッセージを暗号化および復号化するために異なるキーリングを作成する場合、名前空間と名前の値は重要です。復号キーリング内のキー名前空間とキー名が、暗号化キーリング内のキー名前空間とキー名と大文字と小文字を区別して完全に一致しない場合、キーマテリアルのバイトが同じであっても、復号キーリングは使用されません。

例えば、AESキー名前空間 HSM_01とキー名 を使用して Raw キーリングを定義できますAES_256_012。その後、そのキーリングを使用して一部のデータを暗号化します。そのデータを復号するには、同じAESキー名前空間、キー名、およびキーマテリアルを使用して Raw キーリングを作成します。

次の例は、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 の で Raw AESキーリングを作成するにはNET、 materialProviders.CreateRawAesKeyring()メソッドを使用します。完全な例については、「RawAESKeyringExample.cs」を参照してください。

次の例では、 AWS Encryption SDK に のバージョン 4.x を使用しています。NET

// 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 の は、 WebCrypto から暗号化プリミティブを取得しますAPI。キーリングを構築する前に、 RawAesKeyringWebCrypto.importCryptoKey()を使用して raw キーマテリアルを 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

Node.js AWS Encryption SDK for JavaScript の で Raw AESキーリングをインスタンス化するには、 RawAesKeyringNode クラスのインスタンスを作成します。キーマテリアルの長さに基づいてAES、ラップアルゴリズム (「ラップスイート」) を指定する必要があります。完全な例については、「aes_simple.ts (JavaScript Node.js)」を参照してください。

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);