Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Keyring multipli
È possibile combinare più keyring in un keyring multiplo. Un keyring multiplo è composto da uno o più keyring dello stesso tipo o di tipi diversi. Il risultato è analogo a quello ottenuto utilizzando diversi keyring in serie. Quando utilizzi un keyring multiplo per crittografare i dati, questi possono essere decrittati con le chiavi di wrapping contenute in qualsiasi keyring.
Quando crei un keyring multiplo per crittografare i dati, uno dei keyring viene designato come keyring generatore, tutti gli altri keyring sono i keyring figlio. che si occupa di generare e crittografare la chiave di dati di testo normale. Quindi, tutte le chiavi di wrapping in tutti i keyring figlio crittografano la stessa chiave di dati di testo normale. Il keyring multiplo restituisce la chiave di dati di testo normale e una chiave di dati crittografata per ciascuna chiave di wrapping nel keyring multiplo. Se il portachiavi del generatore è un portachiavi, la KMSchiave del generatore nel portachiavi genera e crittografa la AWS KMS chiave in testo semplice. Quindi, tutte le chiavi aggiuntive AWS KMS keys presenti nel portachiavi e tutte le AWS KMS chiavi inserite in tutti i portachiavi secondari del portachiavi multiplo crittografano la stessa chiave in chiaro.
Se create un portachiavi multiplo senza un generatore di chiavi, potete utilizzarlo da solo per decrittografare i dati, ma non per cifrarli. Oppure, per utilizzare un portachiavi multiplo senza un generatore nelle operazioni di crittografia, potete specificarlo come portachiavi secondario in un altro portachiavi multiplo. Un portachiavi multiplo senza portachiavi non può essere designato come portachiavi generatore in un altro portachiavi multiplo.
Durante la decrittografia, AWS Encryption SDK utilizza i portachiavi per cercare di decrittografare una delle chiavi di dati crittografate. I keyring sono chiamati nell'ordine in cui sono specificati nel keyring multiplo. L'elaborazione si interrompe non appena una chiave in qualsiasi keyring può decrittare una chiave di dati crittografata.
A partire dalla versione 1.7. x, quando una chiave dati crittografata viene crittografata con un portachiavi AWS Key Management Service (AWS KMS) (o provider di chiavi master), passa AWS Encryption SDK
sempre la chiave ARN del AWS KMS key al KeyId
parametro dell'operazione AWS KMS Decrypt. Si tratta di una procedura AWS KMS consigliata che garantisce la decrittografia della chiave dati crittografata con la chiave di wrapping che si intende utilizzare.
Per un esempio di utilizzo di un keyring multiplo consulta:
Per creare un keyring multiplo, crea prima un'istanza dei keyring figlio. In questo esempio, utilizziamo un AWS KMS portachiavi e un portachiavi Raw, ma puoi combinare tutti i AES portachiavi supportati in un portachiavi multiplo.
- 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
-
L'esempio seguente utilizza la buildClient funzione per specificare la politica di impegno predefinita,. REQUIRE_ENCRYPT_REQUIRE_DECRYPT
È inoltre possibile utilizzare il buildClient
per limitare il numero di chiavi di dati crittografate in un messaggio crittografato. Per ulteriori informazioni, consulta Limitazione delle chiavi di dati crittografate.
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
-
L'esempio seguente utilizza la buildClient
funzione per specificare la politica di impegno predefinita,REQUIRE_ENCRYPT_REQUIRE_DECRYPT
. È inoltre possibile utilizzare il buildClient
per limitare il numero di chiavi di dati crittografate in un messaggio crittografato. Per ulteriori informazioni, consulta Limitazione delle chiavi di dati crittografate.
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
-
L'esempio seguente crea un'istanza del AWS Encryption SDK client con la politica di impegno predefinita,. 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
)
Crea quindi il keyring multiplo e specifica il keyring generatore, se presente. In questo esempio, creiamo un portachiavi multiplo in cui il portachiavi è il AWS KMS portachiavi del generatore e il portachiavi è il portachiavi del AES bambino.
- C
-
Nel costruttore del keyring multiplo in C, specifica solo il keyring generatore.
struct aws_cryptosdk_keyring *multi_keyring = aws_cryptosdk_multi_keyring_new(alloc, kms_keyring);
Per aggiungere un keyring figlio al tuo keyring multiplo, usa il metodo aws_cryptosdk_multi_keyring_add_child
. Devi chiamare il metodo una volta per ogni keyring figlio che aggiungi.
// Add the Raw AES keyring (C only)
aws_cryptosdk_multi_keyring_add_child(multi_keyring, aes_keyring);
- C# / .NET
-
Il. NETCreateMultiKeyringInput
il costruttore consente di definire un portachiavi per generatori e portachiavi per bambini. L'CreateMultiKeyringInput
oggetto risultante è immutabile.
var createMultiKeyringInput = new CreateMultiKeyringInput
{
Generator = kmsKeyring,
ChildKeyrings = new List<IKeyring>() {aesKeyring}
};
var multiKeyring = materialProviders.CreateMultiKeyring(createMultiKeyringInput);
- JavaScript Browser
-
JavaScript i portachiavi multipli sono immutabili. Il JavaScript costruttore multi-portachiavi consente di specificare il portachiavi del generatore e più portachiavi per bambini.
const clientProvider = getClient(KMS, { credentials })
const multiKeyring = new MultiKeyringWebCrypto(generator: kmsKeyring, children: [aesKeyring]);
- JavaScript Node.js
-
JavaScript i portachiavi multipli sono immutabili. Il JavaScript costruttore multi-portachiavi consente di specificare il portachiavi del generatore e più portachiavi per bambini.
const multiKeyring = new MultiKeyringNode(generator: kmsKeyring, children: [aesKeyring]);
- Java
-
Il CreateMultiKeyringInput
costruttore Java consente di definire un portachiavi del generatore e dei portachiavi secondari. L'createMultiKeyringInput
oggetto risultante è immutabile.
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
)
Ora puoi utilizzare il keyring multiplo per crittografare e decrittare i dati.