翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Raw AES キーリング
AWS Encryption SDK では、データキーを保護するラッピングキーとして指定した AES 対称キーを使用できます。できればハードウェアセキュリティモジュール (HSM) またはキー管理システムで、キーマテリアルを生成、保存、保護する必要があります。ラッピングキーを指定し、ローカルまたはオフラインでデータキーを暗号化する必要がある場合は、Raw AES キーリングを使用します。
Raw AES キーリングは、AES-GCM アルゴリズムと、バイト配列として指定したラッピングキーを使用することによってデータを暗号化します。各 Raw AES キーリングで指定できるラッピングキーは 1 つだけですが、複数の Raw AES キーリングを単独で、または他のキーリングとともにマルチキーリングに含めることができます。
RAW AES キーリングは AES AWS Encryption SDK for Python 暗号化キーとともに使用すると、JceMasterKeyAWS Encryption SDK for JavaRawMasterKey内のクラスおよび内のクラスと同等であり、相互運用できます。ある実装でデータを暗号化し、それを他の実装で、同じラッピングキーを使用して復号することができます。詳細については、 キーリングの互換性 を参照してください。
キーの名前空間と名前
キーリング内の AES キーを識別するために、Raw AES キーリングは、指定したキーの名前空間とキー名を使用します。これらの値はシークレットではありません。これらは、暗号化オペレーションが返す 暗号化されたメッセージ のヘッダーにプレーンテキストで表示されます。HSM またはキー管理システムのキー名前空間と、そのシステムの AES キーを識別するキー名を使用することをお勧めします。
キーの名前空間とキー名は、JceMasterKey
と RawMasterKey
のプロバイダー ID (またはプロバイダー) とキー ID フィールドに相当します。
.NET 用 AWS Encryption SDK for C と AWS Encryption SDK は、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
-
.NET 用 AWS Encryption SDK で Raw AES キーリングを作成するには、materialProviders.CreateRawAesKeyring()
メソッドを使用してください。詳細な例については、RawAES.cs を参照してください。KeyringExample
次の例では、.NET 用 AWS Encryption SDK のバージョン 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
-
Node.js 用「AWS Encryption SDK for JavaScript」で 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);