Raw AES キーリング - AWS Encryption SDK

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

Raw AES キーリング

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

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

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

キーネームスペースと名前

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

注記

キーの名前空間とキー名は、プロバイダー ID(またはプロバイダー) とキー ID内のフィールドJceMasterKeyそしてRawMasterKey

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

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

たとえば、キー名前空間を持つ Raw AES キーリングを定義するとします。HSM_01キー名AES_256_012。次に、そのキーリングを使用して一部のデータを暗号化します。そのデータを復号化するには、同じキー名前空間、キー名、およびキーマテリアルを使用して 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

で Raw AES キーリングを作成するにはAWS Encryption SDK.NET については、materialProviders.CreateRawAesKeyring()方法。詳しい例については、を参照してください。RawAESKeyringExample.cs

// Instantiate the AWS Encryption SDK and material providers var encryptionSdk = AwsEncryptionSdkFactory.CreateDefaultAwsEncryptionSdk(); var materialProviders = AwsCryptographicMaterialProvidersFactory.CreateDefaultAwsCryptographicMaterialProviders(); 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アピ。キーリングを作成する前に、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

で Raw AES キーリングをインスタンス化するにはAWS Encryption SDK for JavaScriptNode.js の場合は、 RawAesKeyringNodeクラス。キーマテリアルの長さに基づいて 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, })