翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
マルチキーリング
キーリングは組み合わせてマルチキーリングにすることができます。マルチキーリングは、種類に関係なく、1 つ以上の個別のキーリングで構成されるキーリングです。一連のキーリングを複数使用した場合のように動作します。マルチキーリングを使用してデータを暗号化する場合は、そのキーリングに含まれる任意のラッピングキーを使用してそのデータを復号できます。
マルチキーリングを作成してデータを暗号化する場合は、いずれかのキーリングをジェネレーターキーリングに指定します。他のすべてのキーリングは、子キーリングと呼ばれます。ジェネレーターキーリングは、プレーンテキストのデータキーを生成して暗号化します。その後、すべての子キーリングのすべてのラッピングキーによって、そのプレーンテキストデータキーが暗号化されます。マルチキーリングは、プレーンテキストのキーと、マルチキーリングのラッピングキーごとに 1 つの暗号化されたデータキーを返します。ジェネレーターキーリングを使用せずにマルチキーリングを作成する場合は、データを復号できますが暗号化することはできません。ジェネレーターキーリングが KMS キーリングの場合、AWS KMS キーリングのジェネレーターキーはプレーンテキストのキーを生成して暗号化します。その後、AWS KMS キーリングのすべての追加の AWS KMS keys と、マルチキーリングのすべての子キーリングのすべてのラッピングキーによって、同じプレーンテキストのキーが暗号化されます。
復号する際、AWS Encryption SDK では、キーリングを使用して暗号化されたデータキーのいずれかの復号を試みます。キーリングは、マルチキーリングで指定された順番で呼び出されます。暗号化されたデータキーがキーリングの任意のキーによって復号されると、処理は停止されます。
バージョン 1.7.x からは、暗号化されたデータキーが AWS Key Management Service (AWS KMS) キーリング (またはマスターキープロバイダー) で暗号化されるとき、AWS Encryption SDK は AWS KMS key のキー ARN を AWS KMS 復号オペレーションの KeyId
パラメータに常に渡します。これが AWS KMS のベストプラクティスです。使用を意図したラッピングキーで、暗号化されたデータキーを復号できるようになります。
マルチキーリングの実際の例については、以下を参照してください。
マルチキーリングを作成するにはまず、子キーリングをインスタンス化します。この例では、AWS KMS キーリングと Raw AES キーリングを使用していますが、サポートされている任意のキーリングをマルチキーリングに組み合わせることができます。
- C
-
/* Define an AWS KMS keyring. For details, see string.cpp */
struct aws_cryptosdk_keyring *kms_keyring = Aws::Cryptosdk::KmsKeyring::Builder().Build(example_key);
// Define a Raw AES keyring. For details, see raw_aes_keyring.c */
struct aws_cryptosdk_keyring *aes_keyring = aws_cryptosdk_raw_aes_keyring_new(
alloc, wrapping_key_namespace, wrapping_key_name, wrapping_key, AWS_CRYPTOSDK_AES256);
- C# / .NET
-
// Define an AWS KMS keyring. For details, see AwsKmsKeyringExample.cs.
var kmsKeyring = materialProviders.CreateAwsKmsKeyring(createKmsKeyringInput);
// Define a Raw AES keyring. For details, see RawAESKeyringExample.cs.
var aesKeyring = materialProviders.CreateRawAesKeyring(createAesKeyringInput);
- JavaScript Browser
-
const clientProvider = getClient(KMS, { credentials })
// Define an AWS KMS keyring. For details, see kms_simple.ts.
const kmsKeyring = new KmsKeyringBrowser({ generatorKeyId: exampleKey })
// Define a Raw AES keyring. For details, see aes_simple.ts.
const aesKeyring = new RawAesKeyringWebCrypto({ keyName, keyNamespace, wrappingSuite, masterKey })
- JavaScript Node.js
-
// Define an AWS KMS keyring. For details, see kms_simple.ts.
const kmsKeyring = new KmsKeyringNode({ generatorKeyId: exampleKey })
// Define a Raw AES keyring. For details, see raw_aes_keyring_node.ts.
const aesKeyring = new RawAesKeyringNode({ keyName, keyNamespace, wrappingSuite, unencryptedMasterKey })
次に、マルチキーリングを作成し、ジェネレーターキーリングがある場合はそれを指定します。この例では、AWS KMS キーリングがジェネレーターキーリングで AES キーリングが子キーリングのマルチキーリングを作成します。
- C
-
C のマルチキーリングのコンストラクタでは、ジェネレーターキーリングのみを指定します。
struct aws_cryptosdk_keyring *multi_keyring = aws_cryptosdk_multi_keyring_new(alloc, kms_keyring);
マルチキーリングに子キーリングを追加するには、aws_cryptosdk_multi_keyring_add_child
メソッドを使用します。このメソッドは、追加する子キーリングごとに呼び出す必要があります。
// Add the Raw AES keyring (C only)
aws_cryptosdk_multi_keyring_add_child(multi_keyring, aes_keyring);
- C# / .NET
-
.NETCreateMultiKeyringInput
コンストラクタを使用すると、ジェネレータのキーリングと子キーリングを定義できます。結果のCreateMultiKeyringInput
オブジェクトはイミュータブルです。
var createMultiKeyringInput = new CreateMultiKeyringInput
{
Generator = kmsKeyring,
ChildKeyrings = new List<IKeyring>() {aesKeyring}
};
var multiKeyring = materialProviders.CreateMultiKeyring(createMultiKeyringInput);
- JavaScript Browser
-
JavaScript のマルチキーリングはイミュータブルです。- JavaScript のマルチキーリングのコンストラクタでは、ジェネレーターキーリングと複数の子キーリングを指定できます。
const clientProvider = getClient(KMS, { credentials })
const multiKeyring = new MultiKeyringWebCrypto(generator: kmsKeyring, children: [aesKeyring]);
- JavaScript Node.js
-
JavaScript のマルチキーリングはイミュータブルです。- JavaScript のマルチキーリングのコンストラクタでは、ジェネレーターキーリングと複数の子キーリングを指定できます。
const multiKeyring = new MultiKeyringNode(generator: kmsKeyring, children: [aesKeyring]);
これで、データの暗号化と復号にマルチキーリングを使用できます。
C でマルチキーリングを作成して使用する方法の詳しい例については、multi_keyring.cpp を参照してください。