Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Multi-kunci
Anda dapat menggabungkan keyrings menjadi multi-keyring. Multi-keyring adalah keyring yang terdiri dari satu atau lebih gantungan kunci individu dari jenis yang sama atau berbeda. Efeknya seperti menggunakan beberapa gantungan kunci dalam satu seri. Bila Anda menggunakan multi-keyring untuk mengenkripsi data, salah satu kunci pembungkus di salah satu keyrings nya dapat mendekripsi data tersebut.
Saat Anda membuat multi-keyring untuk mengenkripsi data, Anda menunjuk salah satu keyring sebagai keyring generator. Semua gantungan kunci lainnya dikenal sebagai gantungan kunci anak. Generator keyring menghasilkan dan mengenkripsi kunci data plaintext. Kemudian, semua kunci pembungkus di semua keyring anak mengenkripsi kunci data teks biasa yang sama. Multi-keyring mengembalikan kunci plaintext dan satu kunci data terenkripsi untuk setiap kunci pembungkus di multi-keyring. Jika keyring generator adalah KMSkeyring, kunci generator di AWS KMS keyring menghasilkan dan mengenkripsi kunci plaintext. Kemudian, semua tambahan AWS KMS keys di AWS KMS keyring, dan semua kunci pembungkus di semua keyring anak di multi-keyring, mengenkripsi kunci plaintext yang sama.
Jika Anda membuat multi-keyring tanpa keyring generator, Anda dapat menggunakannya sendiri untuk mendekripsi data, tetapi tidak untuk mengenkripsi. Atau, untuk menggunakan multi-keyring tanpa keyring genertor dalam operasi enkripsi, Anda dapat menentukannya sebagai keyring anak di multi-keyring lain. Multi-keyring tanpa keyring generator tidak dapat ditetapkan sebagai keyring generator di multi-keyring lain.
Saat mendekripsi, AWS Encryption SDK menggunakan keyrings untuk mencoba mendekripsi salah satu kunci data terenkripsi. Gantungan kunci dipanggil dalam urutan yang ditentukan dalam multi-keyring. Pemrosesan berhenti segera setelah kunci apa pun di keyring apa pun dapat mendekripsi kunci data terenkripsi.
Dimulai pada versi 1.7. x, ketika kunci data terenkripsi dienkripsi di bawah keyring AWS Key Management Service (AWS KMS) (atau penyedia kunci master), AWS Encryption SDK
selalu meneruskan kunci AWS KMS key ke KeyId
parameter ARN operasi Dekripsi. AWS KMS Ini adalah praktik AWS KMS terbaik yang memastikan bahwa Anda mendekripsi kunci data terenkripsi dengan kunci pembungkus yang ingin Anda gunakan.
Untuk melihat contoh kerja multi-keyring, lihat:
Untuk membuat multi-keyring, pertama-tama buat instance keyrings anak. Dalam contoh ini, kami menggunakan AWS KMS keyring dan keyring Raw, tetapi Anda dapat menggabungkan AES keyrings yang didukung dalam multi-keyring.
- 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
-
Contoh berikut menggunakan buildClient
fungsi untuk menentukan kebijakan komitmen default,REQUIRE_ENCRYPT_REQUIRE_DECRYPT
. Anda juga dapat menggunakan buildClient
untuk membatasi jumlah kunci data terenkripsi dalam pesan terenkripsi. Untuk informasi selengkapnya, lihat Membatasi kunci data terenkripsi.
import {
KmsKeyringBrowser,
KMS,
getClient,
RawAesKeyringWebCrypto,
RawAesWrappingSuiteIdentifier,
MultiKeyringWebCrypto,
buildClient,
CommitmentPolicy,
synchronousRandomValues,
} from '@aws-crypto/client-browser'
const { encrypt, decrypt } = buildClient(
CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT
)
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
-
Contoh berikut menggunakan buildClient
fungsi untuk menentukan kebijakan komitmen default,REQUIRE_ENCRYPT_REQUIRE_DECRYPT
. Anda juga dapat menggunakan buildClient
untuk membatasi jumlah kunci data terenkripsi dalam pesan terenkripsi. Untuk informasi selengkapnya, lihat Membatasi kunci data terenkripsi.
import {
MultiKeyringNode,
KmsKeyringNode,
RawAesKeyringNode,
RawAesWrappingSuiteIdentifier,
buildClient,
CommitmentPolicy,
} from '@aws-crypto/client-node'
const { encrypt, decrypt } = buildClient(
CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT
)
// 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 })
- Java
-
// Define the raw AES keyring.
final MaterialProviders matProv = MaterialProviders.builder()
.MaterialProvidersConfig(MaterialProvidersConfig.builder().build())
.build();
final CreateRawAesKeyringInput createRawAesKeyringInput = CreateRawAesKeyringInput.builder()
.keyName("AES_256_012")
.keyNamespace("HSM_01")
.wrappingKey(AESWrappingKey)
.wrappingAlg(AesWrappingAlg.ALG_AES256_GCM_IV12_TAG16)
.build();
IKeyring rawAesKeyring = matProv.CreateRawAesKeyring(createRawAesKeyringInput);
// Define the AWS KMS keyring.
final CreateAwsKmsMrkMultiKeyringInput createAwsKmsMrkMultiKeyringInput = CreateAwsKmsMrkMultiKeyringInput.builder()
.generator(kmsKeyArn)
.build();
IKeyring awsKmsMrkMultiKeyring = matProv.CreateAwsKmsMrkMultiKeyring(createAwsKmsMrkMultiKeyringInput);
- Python
-
Contoh berikut membuat instance AWS Encryption SDK klien dengan kebijakan komitmen default,. REQUIRE_ENCRYPT_REQUIRE_DECRYPT
# Create the AWS KMS keyring
kms_client = boto3.client('kms', region_name="us-west-2")
mat_prov: AwsCryptographicMaterialProviders = AwsCryptographicMaterialProviders(
config=MaterialProvidersConfig()
)
kms_keyring_input: CreateAwsKmsKeyringInput = CreateAwsKmsKeyringInput(
generator=arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
,
kms_client=kms_client
)
kms_keyring: IKeyring = mat_prov.create_aws_kms_keyring(
input=kms_keyring_input
)
# Create Raw AES keyring
key_name_space = "HSM_01
"
key_name = "AES_256_012
"
raw_aes_keyring_input: CreateRawAesKeyringInput = CreateRawAesKeyringInput(
key_namespace=key_name_space,
key_name=key_name,
wrapping_key=AESWrappingKey
,
wrapping_alg=AesWrappingAlg.ALG_AES256_GCM_IV12_TAG16
)
raw_aes_keyring: IKeyring = mat_prov.create_raw_aes_keyring(
input=raw_aes_keyring_input
)
Selanjutnya, buat multi-keyring dan tentukan keyring generatornya, jika ada. Dalam contoh ini, kita membuat multi-keyring di mana keyring adalah AWS KMS keyring generator dan keyring adalah AES keyring anak.
- C
-
Dalam konstruktor multi-keyring di C, Anda hanya menentukan keyring generatornya.
struct aws_cryptosdk_keyring *multi_keyring = aws_cryptosdk_multi_keyring_new(alloc, kms_keyring);
Untuk menambahkan keyring anak ke multi-keyring Anda, gunakan metode ini. aws_cryptosdk_multi_keyring_add_child
Anda perlu memanggil metode satu kali untuk setiap keyring anak yang Anda tambahkan.
// Add the Raw AES keyring (C only)
aws_cryptosdk_multi_keyring_add_child(multi_keyring, aes_keyring);
- C# / .NET
-
The. NETCreateMultiKeyringInput
konstruktor memungkinkan Anda menentukan keyring generator dan keyrings anak. CreateMultiKeyringInput
Objek yang dihasilkan tidak dapat diubah.
var createMultiKeyringInput = new CreateMultiKeyringInput
{
Generator = kmsKeyring,
ChildKeyrings = new List<IKeyring>() {aesKeyring}
};
var multiKeyring = materialProviders.CreateMultiKeyring(createMultiKeyringInput);
- JavaScript Browser
-
JavaScript multi-keyrings tidak dapat diubah. Konstruktor JavaScript multi-keyring memungkinkan Anda menentukan keyring generator dan beberapa keyring anak.
const clientProvider = getClient(KMS, { credentials })
const multiKeyring = new MultiKeyringWebCrypto(generator: kmsKeyring, children: [aesKeyring]);
- JavaScript Node.js
-
JavaScript multi-keyrings tidak dapat diubah. Konstruktor JavaScript multi-keyring memungkinkan Anda menentukan keyring generator dan beberapa keyring anak.
const multiKeyring = new MultiKeyringNode(generator: kmsKeyring, children: [aesKeyring]);
- Java
-
CreateMultiKeyringInput
Konstruktor Java memungkinkan Anda menentukan keyring generator dan keyrings anak. createMultiKeyringInput
Objek yang dihasilkan tidak dapat diubah.
final CreateMultiKeyringInput createMultiKeyringInput = CreateMultiKeyringInput.builder()
.generator(awsKmsMrkMultiKeyring)
.childKeyrings(Collections.singletonList(rawAesKeyring))
.build();
IKeyring multiKeyring = matProv.CreateMultiKeyring(createMultiKeyringInput);
- Python
-
multi_keyring_input: CreateMultiKeyringInput = CreateMultiKeyringInput(
generator=kms_keyring,
child_keyrings=[raw_aes_keyring]
)
multi_keyring: IKeyring = mat_prov.create_multi_keyring(
input=multi_keyring_input
)
Sekarang, Anda dapat menggunakan multi-keyring untuk mengenkripsi dan mendekripsi data.