Konfiguration der AWS Encryption SDK - AWS Encryption SDK

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Konfiguration der AWS Encryption SDK

Das AWS Encryption SDK ist so konzipiert, dass es einfach zu bedienen ist. Obwohl es AWS Encryption SDK mehrere Konfigurationsoptionen gibt, wurden die Standardwerte sorgfältig ausgewählt, damit sie für die meisten Anwendungen praktisch und sicher sind. Möglicherweise müssen Sie jedoch Ihre Konfiguration anpassen, um die Leistung zu verbessern, oder Sie müssen eine benutzerdefinierte Funktion in Ihr Design aufnehmen.

Lesen Sie sich bei der Konfiguration Ihrer Implementierung die AWS Encryption SDK bewährten Methoden durch und implementieren Sie so viele wie möglich.

Auswahl einer Programmiersprache

Das AWS Encryption SDK ist in mehreren Programmiersprachen verfügbar. Die Sprachimplementierungen sind so konzipiert, dass sie vollständig interoperabel sind und dieselben Funktionen bieten, obwohl sie möglicherweise auf unterschiedliche Weise implementiert werden. In der Regel verwenden Sie die Bibliothek, die mit Ihrer Anwendung kompatibel ist. Sie können jedoch eine Programmiersprache für eine bestimmte Implementierung auswählen. Wenn Sie beispielsweise lieber mit Schlüsselanhängern arbeiten, können Sie den AWS-Verschlüsselungs-SDK for C oder den AWS-Verschlüsselungs-SDK for JavaScript wählen.

Auswahl von Schlüsseln zum Umbrechen

Der AWS Encryption SDK generiert einen eindeutigen symmetrischen Datenschlüssel, um jede Nachricht zu verschlüsseln. Sofern Sie das Zwischenspeichern von Datenschlüsseln nicht verwenden, müssen Sie die Datenschlüssel nicht konfigurieren, verwalten oder verwenden. Das AWS Encryption SDK erledigt das für Sie.

Sie müssen jedoch einen oder mehrere Wrapping-Schlüssel auswählen, um jeden Datenschlüssel zu verschlüsseln. Der AWS Encryption SDK unterstützt AES symmetrische Schlüssel und RSA asymmetrische Schlüssel in verschiedenen Größen. Es unterstützt auch AWS Key Management Service(AWS KMS) symmetrische Verschlüsselung. AWS KMS keys Sie sind für die Sicherheit und Haltbarkeit Ihrer Wrapping-Schlüssel verantwortlich. Wir empfehlen Ihnen daher, einen Verschlüsselungsschlüssel in einem Hardware-Sicherheitsmodul oder einem wichtigen Infrastrukturdienst zu verwenden, wie AWS KMS z.

Um Ihre Wrapping-Schlüssel für die Verschlüsselung und Entschlüsselung anzugeben, verwenden Sie einen Schlüsselbund (C und JavaScript) oder einen Hauptschlüsselanbieter (Java, Python, AWS VerschlüsselungCLI). Sie können einen Wrapping-Schlüssel oder mehrere Wrapping-Schlüssel desselben oder verschiedener Typen angeben. Wenn Sie mehrere Umschließungsschlüssel verwenden, um einen Datenschlüssel zu umschließen, verschlüsselt jeder Umschließungsschlüssel eine Kopie desselben Datenschlüssels. Die verschlüsselten Datenschlüssel (einer pro Umschließungsschlüssel) werden zusammen mit den verschlüsselten Daten in der verschlüsselten Nachricht gespeichert, die AWS Encryption SDK zurückgegeben wird. Um die Daten zu entschlüsseln, AWS Encryption SDK müssen sie zuerst einen Ihrer Wrapping-Schlüssel verwenden, um einen verschlüsselten Datenschlüssel zu entschlüsseln.

Um AWS KMS key in einem Schlüsselbund oder einem Hauptschlüsselanbieter anzugeben, verwenden Sie eine unterstützte AWS KMS Schlüssel-ID. Einzelheiten zu den Schlüsselbezeichnern für einen AWS KMS Schlüssel finden Sie unter Schlüsselkennungen im AWS Key Management Service Entwicklerhandbuch.

  • Bei der Verschlüsselung mit der AWS-Verschlüsselungs-SDK for Java, AWS-Verschlüsselungs-SDK for JavaScript AWS-Verschlüsselungs-SDK for Python, oder der AWS Verschlüsselung CLI können Sie jede gültige Schlüssel-ID (Schlüssel-ID, SchlüsselARN, Aliasname oder AliasARN) für einen Schlüssel verwenden. KMS Bei der Verschlüsselung mit dem AWS-Verschlüsselungs-SDK for C können Sie nur eine Schlüssel-ID oder einen Schlüssel verwenden. ARN

    Wenn Sie bei der Verschlüsselung einen Aliasnamen oder Alias ARN für einen KMS Schlüssel angeben, AWS Encryption SDK speichert der den Schlüssel, der ARN aktuell mit diesem Alias verknüpft ist. Der Alias wird nicht gespeichert. Änderungen am Alias wirken sich nicht auf den KMS Schlüssel aus, der zum Entschlüsseln Ihrer Datenschlüssel verwendet wird.

  • Bei der Entschlüsselung im strikten Modus (in dem Sie bestimmte Wrapping-Schlüssel angeben) müssen Sie einen Schlüssel ARN zur Identifizierung verwenden. AWS KMS keys Diese Anforderung gilt für alle Sprachenimplementierungen des AWS Encryption SDK.

    Wenn Sie mit einem AWS KMS Schlüsselbund verschlüsseln, AWS Encryption SDK speichert der den Schlüssel ARN von AWS KMS key in den Metadaten des verschlüsselten Datenschlüssels. Bei der Entschlüsselung im strikten Modus AWS Encryption SDK überprüft der, ob derselbe Schlüssel im ARN Schlüsselbund (oder Hauptschlüsselanbieter) enthalten ist, bevor versucht wird, den verschlüsselten Datenschlüssel mit dem Wrapping-Schlüssel zu entschlüsseln. Wenn Sie eine andere Schlüssel-ID verwenden, AWS Encryption SDK wird sie nicht erkannt oder verwendet AWS KMS key, auch wenn sich die Kennungen auf denselben Schlüssel beziehen.

Um einen AESRohschlüssel oder ein RSARohschlüsselpaar als Umschließungsschlüssel in einem Schlüsselbund anzugeben, müssen Sie einen Namespace und einen Namen angeben. In einem Hauptschlüsselanbieter Provider ID entspricht der dem Namespace und der Key ID entspricht dem Namen. Beim Entschlüsseln müssen Sie für jeden Rohverpackungsschlüssel genau denselben Namespace und denselben Namen verwenden wie beim Verschlüsseln. Wenn Sie einen anderen Namespace oder Namen verwenden, AWS Encryption SDK wird der Wrapping-Schlüssel nicht erkannt oder verwendet, selbst wenn das Schlüsselmaterial identisch ist.

Verwenden Sie mehrere Regionen AWS KMS keys

Sie können AWS Key Management Service (AWS KMS) Schlüssel mit mehreren Regionen als Schlüssel in der verwenden. AWS Encryption SDK Wenn Sie mit einem Schlüssel für mehrere Regionen in einem verschlüsseln AWS-Region, können Sie mit einem zugehörigen Schlüssel für mehrere Regionen in einem anderen verschlüsseln. AWS-Region Die Support für Schlüssel mit mehreren Regionen wurde in Version 2.3 eingeführt. x der Version AWS Encryption SDK und Version 3.0. x der AWS VerschlüsselungCLI.

AWS KMS Schlüssel für mehrere Regionen bestehen aus AWS KMS keys verschiedenen Schlüsseln AWS-Regionen , die dasselbe Schlüsselmaterial und dieselbe Schlüssel-ID haben. Sie können diese verwandten Schlüssel so verwenden, als ob es sich um denselben Schlüssel in verschiedenen Regionen handeln würde. Schlüssel mit mehreren Regionen unterstützen gängige Notfallwiederherstellungs- und Sicherungsszenarien, bei denen die Verschlüsselung in einer Region und die Entschlüsselung in einer anderen Region erforderlich ist, ohne dass ein regionsübergreifender Anruf erforderlich ist. AWS KMSInformationen zu Schlüsseln für mehrere Regionen finden Sie unter Verwenden von Schlüsseln für mehrere Regionen im Entwicklerhandbuch.AWS Key Management Service

Zur Unterstützung von Schlüsseln für mehrere Regionen AWS Encryption SDK umfasst dies Schlüsselringe, die AWS KMS mehrere Regionen berücksichtigen, und Hauptschlüsselanbieter. Das neue multi-Region-aware Symbol in jeder Programmiersprache unterstützt sowohl Schlüssel für einzelne Regionen als auch Schlüssel für mehrere Regionen.

In den multi-Region-aware Schlüsselbunden und Hauptschlüsselanbietern, die mehr als einen Schlüssel verwenden, können Sie mehrere KMS Schlüssel für eine Region und mehrere Regionen angeben. Sie können jedoch nur einen Schlüssel aus jedem Satz verwandter Replikatschlüssel für mehrere Regionen angeben. Wenn Sie mehr als einen Schlüsselbezeichner mit derselben Schlüssel-ID angeben, schlägt der Konstruktoraufruf fehl.

Sie können auch einen Schlüssel für mehrere Regionen zusammen mit den standardmäßigen AWS KMS Schlüsselanhängern und Hauptschlüsselanbietern für einzelne Regionen verwenden. Sie müssen jedoch denselben Schlüssel für mehrere Regionen in derselben Region zum Verschlüsseln und Entschlüsseln verwenden. Die Schlüsselringe für einzelne Regionen und die Anbieter von Masterschlüsseln versuchen, Chiffretext nur mit den Schlüsseln zu entschlüsseln, mit denen die Daten verschlüsselt wurden.

Die folgenden Beispiele zeigen, wie Daten mithilfe von Schlüsseln für mehrere Regionen sowie mit den neuen Schlüsselbändern und Masterschlüsselanbietern ver- und entschlüsselt werden. multi-Region-aware In diesen Beispielen werden Daten in der us-east-1 Region verschlüsselt und die Daten in der Region mithilfe verwandter multiregionaler Replikatschlüssel in us-west-2 jeder Region entschlüsselt. Bevor Sie diese Beispiele ausführen, ersetzen Sie den Beispielschlüssel für mehrere Regionen durch einen ARN gültigen Wert aus Ihrem. AWS-Konto

C

Um mit einem Schlüssel für mehrere Regionen zu verschlüsseln, verwenden Sie die Aws::Cryptosdk::KmsMrkAwareSymmetricKeyring::Builder() Methode, um den Schlüsselbund zu instanziieren. Geben Sie einen Schlüssel für mehrere Regionen an.

Dieses einfache Beispiel enthält keinen Verschlüsselungskontext. Ein Beispiel, das einen Verschlüsselungskontext in C verwendet, finden Sie unterVerschlüsseln und Entschlüsseln von Zeichenfolgen.

Ein vollständiges Beispiel finden Sie unter kms_multi_region_keys.cpp im AWS-Verschlüsselungs-SDK for C Repository unter GitHub.

/* Encrypt with a multi-Region KMS key in us-east-1 */ /* Load error strings for debugging */ aws_cryptosdk_load_error_strings(); /* Initialize a multi-Region keyring */ const char *mrk_us_east_1 = "arn:aws:kms:us-east-1:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab"; struct aws_cryptosdk_keyring *mrk_keyring = Aws::Cryptosdk::KmsMrkAwareSymmetricKeyring::Builder().Build(mrk_us_east_1); /* Create a session; release the keyring */ struct aws_cryptosdk_session *session = aws_cryptosdk_session_new_from_keyring_2(aws_default_allocator(), AWS_CRYPTOSDK_ENCRYPT, mrk_keyring); aws_cryptosdk_keyring_release(mrk_keyring); /* Encrypt the data * aws_cryptosdk_session_process_full is designed for non-streaming data */ aws_cryptosdk_session_process_full( session, ciphertext, ciphertext_buf_sz, &ciphertext_len, plaintext, plaintext_len)); /* Clean up the session */ aws_cryptosdk_session_destroy(session);
C# / .NET

Um mit einem Schlüssel für mehrere Regionen in der Region USA Ost (Nord-Virginia) (us-east-1) zu verschlüsseln, instanziieren Sie ein CreateAwsKmsMrkKeyringInput Objekt mit einer Schlüssel-ID für den Schlüssel für mehrere Regionen und einem Client für die angegebene Region. AWS KMS Verwenden Sie dann die Methode, um den Schlüsselbund zu erstellen. CreateAwsKmsMrkKeyring()

Die CreateAwsKmsMrkKeyring() Methode erstellt einen Schlüsselbund mit genau einem Schlüssel für mehrere Regionen. Verwenden Sie die Methode, um mit mehreren Umschließungsschlüsseln, einschließlich eines Schlüssels für mehrere Regionen, zu verschlüsseln. CreateAwsKmsMrkMultiKeyring()

Ein vollständiges Beispiel finden Sie unter AwsKmsMrkKeyringExample.cs im Forum. AWS Encryption SDK NETRepository aktiviert. GitHub

//Encrypt with a multi-Region KMS key in us-east-1 Region // Instantiate the AWS Encryption SDK and material providers var encryptionSdk = AwsEncryptionSdkFactory.CreateDefaultAwsEncryptionSdk(); var materialProviders = AwsCryptographicMaterialProvidersFactory.CreateDefaultAwsCryptographicMaterialProviders(); // Multi-Region keys have a distinctive key ID that begins with 'mrk' // Specify a multi-Region key in us-east-1 string mrkUSEast1 = "arn:aws:kms:us-east-1:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab"; // Create the keyring // You can specify the Region or get the Region from the key ARN var createMrkEncryptKeyringInput = new CreateAwsKmsMrkKeyringInput { KmsClient = new AmazonKeyManagementServiceClient(RegionEndpoint.USEast1), KmsKeyId = mrkUSEast1 }; var mrkEncryptKeyring = materialProviders.CreateAwsKmsMrkKeyring(createMrkEncryptKeyringInput); // Define the encryption context var encryptionContext = new Dictionary<string, string>() { {"purpose", "test"} }; // Encrypt your plaintext data. var encryptInput = new EncryptInput { Plaintext = plaintext, Keyring = mrkEncryptKeyring, EncryptionContext = encryptionContext }; var encryptOutput = encryptionSdk.Encrypt(encryptInput);
AWS Encryption CLI

In diesem Beispiel wird die hello.txt Datei unter einem Schlüssel für mehrere Regionen in der Region us-east-1 verschlüsselt. Da in dem Beispiel ein Schlüssel ARN mit einem Region-Element angegeben wird, wird in diesem Beispiel das Region-Attribut des Parameters nicht verwendet. --wrapping-keys

Wenn die Schlüssel-ID des Wrapping-Schlüssels keine Region angibt, können Sie das Region-Attribut von verwenden, --wrapping-keys um die Region anzugeben, z. --wrapping-keys key=$keyID region=us-east-1 B.

# Encrypt with a multi-Region KMS key in us-east-1 Region # To run this example, replace the fictitious key ARN with a valid value. $ mrkUSEast1=arn:aws:kms:us-east-1:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab $ aws-encryption-cli --encrypt \ --input hello.txt \ --wrapping-keys key=$mrkUSEast1 \ --metadata-output ~/metadata \ --encryption-context purpose=test \ --output .
Java

Um mit einem Schlüssel für mehrere Regionen zu verschlüsseln, instanziieren Sie einen AwsKmsMrkAwareMasterKeyProvider und geben Sie einen Schlüssel für mehrere Regionen an.

Ein vollständiges Beispiel finden Sie unter BasicMultiRegionKeyEncryptionExample.javaim AWS-Verschlüsselungs-SDK for Java Repository auf GitHub.

//Encrypt with a multi-Region KMS key in us-east-1 Region // Instantiate the client final AwsCrypto crypto = AwsCrypto.builder() .withCommitmentPolicy(CommitmentPolicy.RequireEncryptRequireDecrypt) .build(); // Multi-Region keys have a distinctive key ID that begins with 'mrk' // Specify a multi-Region key in us-east-1 final String mrkUSEast1 = "arn:aws:kms:us-east-1:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab"; // Instantiate an AWS KMS master key provider in strict mode for multi-Region keys // Configure it to encrypt with the multi-Region key in us-east-1 final AwsKmsMrkAwareMasterKeyProvider kmsMrkProvider = AwsKmsMrkAwareMasterKeyProvider .builder() .buildStrict(mrkUSEast1); // Create an encryption context final Map<String, String> encryptionContext = Collections.singletonMap("Purpose", "Test"); // Encrypt your plaintext data final CryptoResult<byte[], AwsKmsMrkAwareMasterKey> encryptResult = crypto.encryptData( kmsMrkProvider, encryptionContext, sourcePlaintext); byte[] ciphertext = encryptResult.getResult();
JavaScript Browser

Um mit einem Schlüssel für mehrere Regionen zu verschlüsseln, verwenden Sie die buildAwsKmsMrkAwareStrictMultiKeyringBrowser() Methode, um den Schlüsselbund zu erstellen, und geben Sie einen Schlüssel für mehrere Regionen an.

Ein vollständiges Beispiel finden Sie unter kms_multi_region_simple.ts im Repository unter. AWS-Verschlüsselungs-SDK for JavaScript GitHub

/* Encrypt with a multi-Region KMS key in us-east-1 Region */ import { buildAwsKmsMrkAwareStrictMultiKeyringBrowser, buildClient, CommitmentPolicy, KMS, } from '@aws-crypto/client-browser' /* Instantiate an AWS Encryption SDK client */ const { encrypt } = buildClient( CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT ) declare const credentials: { accessKeyId: string secretAccessKey: string sessionToken: string } /* Instantiate an AWS KMS client * The AWS-Verschlüsselungs-SDK for JavaScript gets the Region from the key ARN */ const clientProvider = (region: string) => new KMS({ region, credentials }) /* Specify a multi-Region key in us-east-1 */ const multiRegionUsEastKey = 'arn:aws:kms:us-east-1:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab' /* Instantiate the keyring */ const encryptKeyring = buildAwsKmsMrkAwareStrictMultiKeyringBrowser({ generatorKeyId: multiRegionUsEastKey, clientProvider, }) /* Set the encryption context */ const context = { purpose: 'test', } /* Test data to encrypt */ const cleartext = new Uint8Array([1, 2, 3, 4, 5]) /* Encrypt the data */ const { result } = await encrypt(encryptKeyring, cleartext, { encryptionContext: context, })
JavaScript Node.js

Um mit einem Schlüssel für mehrere Regionen zu verschlüsseln, verwenden Sie die Methode, um den Schlüsselbund zu erstellen, und geben Sie einen Schlüssel für mehrere Regionen an. buildAwsKmsMrkAwareStrictMultiKeyringNode()

Ein vollständiges Beispiel finden Sie unter kms_multi_region_simple.ts im Repository unter. AWS-Verschlüsselungs-SDK for JavaScript GitHub

//Encrypt with a multi-Region KMS key in us-east-1 Region import { buildClient } from '@aws-crypto/client-node' /* Instantiate the AWS Encryption SDK client const { encrypt } = buildClient( CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT ) /* Test string to encrypt */ const cleartext = 'asdf' /* Multi-Region keys have a distinctive key ID that begins with 'mrk' * Specify a multi-Region key in us-east-1 */ const multiRegionUsEastKey = 'arn:aws:kms:us-east-1:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab' /* Create an AWS KMS keyring */ const mrkEncryptKeyring = buildAwsKmsMrkAwareStrictMultiKeyringNode({ generatorKeyId: multiRegionUsEastKey, }) /* Specify an encryption context */ const context = { purpose: 'test', } /* Create an encryption keyring */ const { result } = await encrypt(mrkEncryptKeyring, cleartext, { encryptionContext: context, })
Python

Um mit einem Schlüssel für mehrere Regionen zu verschlüsseln, verwenden Sie die Methode und geben Sie einen Schlüssel für AWS KMS mehrere Regionen an. MRKAwareStrictAwsKmsMasterKeyProvider()

Ein vollständiges Beispiel finden Sie unter mrk_aware_kms_provider.py im AWS-Verschlüsselungs-SDK for Python Repository unter. GitHub

* Encrypt with a multi-Region KMS key in us-east-1 Region # Instantiate the client client = aws_encryption_sdk.EncryptionSDKClient(commitment_policy=CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT) # Specify a multi-Region key in us-east-1 mrk_us_east_1 = "arn:aws:kms:us-east-1:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab" # Use the multi-Region method to create the master key provider # in strict mode strict_mrk_key_provider = MRKAwareStrictAwsKmsMasterKeyProvider( key_ids=[mrk_us_east_1] ) # Set the encryption context encryption_context = { "purpose": "test" } # Encrypt your plaintext data ciphertext, encrypt_header = client.encrypt( source=source_plaintext, encryption_context=encryption_context, key_provider=strict_mrk_key_provider )

Verschieben Sie als Nächstes Ihren Chiffretext in die us-west-2 Region. Sie müssen den Chiffretext nicht erneut verschlüsseln.

Um den Chiffretext im strikten Modus in der us-west-2 Region zu entschlüsseln, instanziieren Sie das multi-Region-aware Symbol mit dem Schlüssel des zugehörigen Multiregions-Schlüssels ARN in der Region. us-west-2 Wenn Sie den Schlüssel ARN eines zugehörigen Multiregions-Schlüssels in einer anderen Region angeben (einschließlich des Ortes, an dem er verschlüsselt wurde)us-east-1, ruft das multi-Region-aware Symbol diesen Schlüssel regionsübergreifend auf. AWS KMS key

Bei der Entschlüsselung im strikten Modus ist multi-Region-aware für das Symbol ein Schlüssel erforderlich. ARN Es akzeptiert nur einen Schlüssel ARN aus jedem Satz verwandter Schlüssel für mehrere Regionen.

Bevor Sie diese Beispiele ausführen, ersetzen Sie den Beispielschlüssel für mehrere Regionen ARN durch einen gültigen Wert aus Ihrem. AWS-Konto

C

Um im strikten Modus mit einem Schlüssel für mehrere Regionen zu entschlüsseln, verwenden Sie die Aws::Cryptosdk::KmsMrkAwareSymmetricKeyring::Builder() Methode, um den Schlüsselbund zu instanziieren. Geben Sie den zugehörigen Schlüssel für mehrere Regionen in der lokalen Region (us-west-2) an.

Ein vollständiges Beispiel finden Sie unter kms_multi_region_keys.cpp im AWS-Verschlüsselungs-SDK for C Repository unter. GitHub

/* Decrypt with a related multi-Region KMS key in us-west-2 Region */ /* Load error strings for debugging */ aws_cryptosdk_load_error_strings(); /* Initialize a multi-Region keyring */ const char *mrk_us_west_2 = "arn:aws:kms:us-west-2:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab"; struct aws_cryptosdk_keyring *mrk_keyring = Aws::Cryptosdk::KmsMrkAwareSymmetricKeyring::Builder().Build(mrk_us_west_2); /* Create a session; release the keyring */ struct aws_cryptosdk_session *session = aws_cryptosdk_session_new_from_keyring_2(aws_default_allocator(), AWS_CRYPTOSDK_ENCRYPT, mrk_keyring); aws_cryptosdk_session_set_commitment_policy(session, COMMITMENT_POLICY_REQUIRE_ENCRYPT_REQUIRE_DECRYPT); aws_cryptosdk_keyring_release(mrk_keyring); /* Decrypt the ciphertext * aws_cryptosdk_session_process_full is designed for non-streaming data */ aws_cryptosdk_session_process_full( session, plaintext, plaintext_buf_sz, &plaintext_len, ciphertext, ciphertext_len)); /* Clean up the session */ aws_cryptosdk_session_destroy(session);
C# / .NET

Um im strikten Modus mit einem einzigen Schlüssel für mehrere Regionen zu entschlüsseln, verwenden Sie dieselben Konstruktoren und Methoden, mit denen Sie die Eingabe zusammengestellt und den Schlüsselbund für die Verschlüsselung erstellt haben. Instanziieren Sie ein CreateAwsKmsMrkKeyringInput Objekt mit dem Schlüssel ARN eines zugehörigen Multiregions-Schlüssels und einem AWS KMS Client für die Region USA West (Oregon) (us-west-2). Verwenden Sie dann die CreateAwsKmsMrkKeyring() Methode, um einen Schlüsselbund für mehrere Regionen mit einem Schlüssel für mehrere Regionen zu erstellen. KMS

Ein vollständiges Beispiel finden Sie unter AwsKmsMrkKeyringExample.cs im Forum. AWS Encryption SDK NETRepository aktiviert. GitHub

// Decrypt with a related multi-Region KMS key in us-west-2 Region // Instantiate the AWS Encryption SDK and material providers var encryptionSdk = AwsEncryptionSdkFactory.CreateDefaultAwsEncryptionSdk(); var materialProviders = AwsCryptographicMaterialProvidersFactory.CreateDefaultAwsCryptographicMaterialProviders(); // Specify the key ARN of the multi-Region key in us-west-2 string mrkUSWest2 = "arn:aws:kms:us-west-2:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab"; // Instantiate the keyring input // You can specify the Region or get the Region from the key ARN var createMrkDecryptKeyringInput = new CreateAwsKmsMrkKeyringInput { KmsClient = new AmazonKeyManagementServiceClient(RegionEndpoint.USWest2), KmsKeyId = mrkUSWest2 }; // Create the multi-Region keyring var mrkDecryptKeyring = materialProviders.CreateAwsKmsMrkKeyring(createMrkDecryptKeyringInput); // Decrypt the ciphertext var decryptInput = new DecryptInput { Ciphertext = ciphertext, Keyring = mrkDecryptKeyring }; var decryptOutput = encryptionSdk.Decrypt(decryptInput);
AWS Encryption CLI

Um mit dem zugehörigen Schlüssel für mehrere Regionen in der Region us-west-2 zu entschlüsseln, verwenden Sie das Schlüsselattribut des --wrapping-keys Parameters, um seinen Schlüssel anzugeben. ARN

# Decrypt with a related multi-Region KMS key in us-west-2 Region # To run this example, replace the fictitious key ARN with a valid value. $ mrkUSWest2=arn:aws:kms:us-west-2:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab $ aws-encryption-cli --decrypt \ --input hello.txt.encrypted \ --wrapping-keys key=$mrkUSWest2 \ --commitment-policy require-encrypt-require-decrypt \ --encryption-context purpose=test \ --metadata-output ~/metadata \ --max-encrypted-data-keys 1 \ --buffer \ --output .
Java

Um im strikten Modus zu entschlüsseln, instanziieren Sie einen AwsKmsMrkAwareMasterKeyProvider und geben Sie den zugehörigen Schlüssel für mehrere Regionen in der lokalen Region (us-west-2) an.

Ein vollständiges Beispiel finden Sie unter .java im Repository unterBasicMultiRegionKeyEncryptionExample. AWS-Verschlüsselungs-SDK for Java GitHub

// Decrypt with a related multi-Region KMS key in us-west-2 Region // Instantiate the client final AwsCrypto crypto = AwsCrypto.builder() .withCommitmentPolicy(CommitmentPolicy.RequireEncryptRequireDecrypt) .build(); // Related multi-Region keys have the same key ID. Their key ARNs differs only in the Region field. String mrkUSWest2 = "arn:aws:kms:us-west-2:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab"; // Use the multi-Region method to create the master key provider // in strict mode AwsKmsMrkAwareMasterKeyProvider kmsMrkProvider = AwsKmsMrkAwareMasterKeyProvider.builder() .buildStrict(mrkUSWest2); // Decrypt your ciphertext CryptoResult<byte[], AwsKmsMrkAwareMasterKey> decryptResult = crypto.decryptData( kmsMrkProvider, ciphertext); byte[] decrypted = decryptResult.getResult();
JavaScript Browser

Um im strikten Modus zu entschlüsseln, verwenden Sie die buildAwsKmsMrkAwareStrictMultiKeyringBrowser() Methode, um den Schlüsselbund zu erstellen, und geben Sie den zugehörigen Schlüssel für mehrere Regionen in der lokalen Region (us-west-2) an.

Ein vollständiges Beispiel finden Sie unter kms_multi_region_simple.ts im Repository unter. AWS-Verschlüsselungs-SDK for JavaScript GitHub

/* Decrypt with a related multi-Region KMS key in us-west-2 Region */ import { buildAwsKmsMrkAwareStrictMultiKeyringBrowser, buildClient, CommitmentPolicy, KMS, } from '@aws-crypto/client-browser' /* Instantiate an AWS Encryption SDK client */ const { decrypt } = buildClient( CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT ) declare const credentials: { accessKeyId: string secretAccessKey: string sessionToken: string } /* Instantiate an AWS KMS client * The AWS-Verschlüsselungs-SDK for JavaScript gets the Region from the key ARN */ const clientProvider = (region: string) => new KMS({ region, credentials }) /* Specify a multi-Region key in us-west-2 */ const multiRegionUsWestKey = 'arn:aws:kms:us-west-2:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab' /* Instantiate the keyring */ const mrkDecryptKeyring = buildAwsKmsMrkAwareStrictMultiKeyringBrowser({ generatorKeyId: multiRegionUsWestKey, clientProvider, }) /* Decrypt the data */ const { plaintext, messageHeader } = await decrypt(mrkDecryptKeyring, result)
JavaScript Node.js

Um im strikten Modus zu entschlüsseln, verwenden Sie die buildAwsKmsMrkAwareStrictMultiKeyringNode() Methode, um den Schlüsselbund zu erstellen, und geben Sie den zugehörigen Schlüssel für mehrere Regionen in der lokalen Region (us-west-2) an.

Ein vollständiges Beispiel finden Sie unter kms_multi_region_simple.ts im Repository unter. AWS-Verschlüsselungs-SDK for JavaScript GitHub

/* Decrypt with a related multi-Region KMS key in us-west-2 Region */ import { buildClient } from '@aws-crypto/client-node' /* Instantiate the client const { decrypt } = buildClient( CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT ) /* Multi-Region keys have a distinctive key ID that begins with 'mrk' * Specify a multi-Region key in us-west-2 */ const multiRegionUsWestKey = 'arn:aws:kms:us-west-2:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab' /* Create an AWS KMS keyring */ const mrkDecryptKeyring = buildAwsKmsMrkAwareStrictMultiKeyringNode({ generatorKeyId: multiRegionUsWestKey, }) /* Decrypt your ciphertext */ const { plaintext, messageHeader } = await decrypt(decryptKeyring, result)
Python

Um im strikten Modus zu entschlüsseln, verwenden Sie die Methode, um den Hauptschlüsselanbieter zu erstellen. MRKAwareStrictAwsKmsMasterKeyProvider() Geben Sie den zugehörigen Schlüssel für mehrere Regionen in der lokalen Region (us-west-2) an.

Ein vollständiges Beispiel finden Sie unter mrk_aware_kms_provider.py im AWS-Verschlüsselungs-SDK for Python Repository unter. GitHub

# Decrypt with a related multi-Region KMS key in us-west-2 Region # Instantiate the client client = aws_encryption_sdk.EncryptionSDKClient(commitment_policy=CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT) # Related multi-Region keys have the same key ID. Their key ARNs differs only in the Region field mrk_us_west_2 = "arn:aws:kms:us-west-2:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab" # Use the multi-Region method to create the master key provider # in strict mode strict_mrk_key_provider = MRKAwareStrictAwsKmsMasterKeyProvider( key_ids=[mrk_us_west_2] ) # Decrypt your ciphertext plaintext, _ = client.decrypt( source=ciphertext, key_provider=strict_mrk_key_provider )

Sie können auch im Discovery-Modus mit Schlüsseln für AWS KMS mehrere Regionen entschlüsseln. Beim Entschlüsseln im Discovery-Modus geben Sie keine an. AWS KMS keys(Informationen zu Schlüsselanhängern für die AWS KMS Erkennung einzelner Regionen finden Sie unter.) Verwenden Sie einen Discovery-Schlüsselbund AWS KMS

Wenn Sie mit einem Schlüssel für mehrere Regionen verschlüsselt haben, versucht das multi-Region-aware Symbol im Erkennungsmodus, mithilfe eines zugehörigen Regionsschlüssels in der lokalen Region zu entschlüsseln. Wenn keine vorhanden ist, schlägt der Anruf fehl. Im Erkennungsmodus versucht der nicht, den Schlüssel für mehrere Regionen, der für die Verschlüsselung verwendet AWS Encryption SDK wird, regionsübergreifend aufzurufen.

Anmerkung

Wenn Sie im Discovery-Modus ein multi-Region-aware Symbol verwenden, um Daten zu verschlüsseln, schlägt der Verschlüsselungsvorgang fehl.

Das folgende Beispiel zeigt, wie im Discovery-Modus mit dem multi-Region-aware Symbol entschlüsselt wird. Da Sie kein angeben AWS KMS key, AWS Encryption SDK muss die Region aus einer anderen Quelle abgerufen werden. Wenn möglich, geben Sie die lokale Region explizit an. Andernfalls AWS Encryption SDK ruft der die lokale Region aus der Region ab, die AWS SDK in Ihrer Programmiersprache konfiguriert ist.

Bevor Sie diese Beispiele ausführen, ersetzen Sie die Beispielkonto-ID und den Schlüssel für mehrere Regionen ARN durch gültige Werte aus Ihrem AWS-Konto.

C

Um im Discovery-Modus mit einem Schlüssel für mehrere Regionen zu entschlüsseln, verwenden Sie die Aws::Cryptosdk::KmsMrkAwareSymmetricKeyring::Builder() Methode, um den Schlüsselbund zu erstellen, und die Methode, um den Aws::Cryptosdk::KmsKeyring::DiscoveryFilter::Builder() Discovery-Filter zu erstellen. Um die lokale Region anzugeben, definieren Sie a ClientConfiguration und geben Sie sie im Client an. AWS KMS

Ein vollständiges Beispiel finden Sie unter kms_multi_region_keys.cpp im AWS-Verschlüsselungs-SDK for C Repository unter GitHub.

/* Decrypt in discovery mode with a multi-Region KMS key */ /* Load error strings for debugging */ aws_cryptosdk_load_error_strings(); /* Construct a discovery filter for the account and partition. The * filter is optional, but it's a best practice that we recommend. */ const char *account_id = "111122223333"; const char *partition = "aws"; const std::shared_ptr<Aws::Cryptosdk::KmsKeyring::DiscoveryFilter> discovery_filter = Aws::Cryptosdk::KmsKeyring::DiscoveryFilter::Builder(partition).AddAccount(account_id).Build(); /* Create an AWS KMS client in the desired region. */ const char *region = "us-west-2"; Aws::Client::ClientConfiguration client_config; client_config.region = region; const std::shared_ptr<Aws::KMS::KMSClient> kms_client = Aws::MakeShared<Aws::KMS::KMSClient>("AWS_SAMPLE_CODE", client_config); struct aws_cryptosdk_keyring *mrk_keyring = Aws::Cryptosdk::KmsMrkAwareSymmetricKeyring::Builder() .WithKmsClient(kms_client) .BuildDiscovery(region, discovery_filter); /* Create a session; release the keyring */ struct aws_cryptosdk_session *session = aws_cryptosdk_session_new_from_keyring_2(aws_default_allocator(), AWS_CRYPTOSDK_DECRYPT, mrk_keyring); aws_cryptosdk_keyring_release(mrk_keyring); commitment_policy=CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT /* Decrypt the ciphertext * aws_cryptosdk_session_process_full is designed for non-streaming data */ aws_cryptosdk_session_process_full( session, plaintext, plaintext_buf_sz, &plaintext_len, ciphertext, ciphertext_len)); /* Clean up the session */ aws_cryptosdk_session_destroy(session);
C# / .NET

Um einen multi-Region-aware Discovery-Schlüsselbund im Formular AWS Encryption SDK zu erstellen. NET, instanziieren Sie ein CreateAwsKmsMrkDiscoveryKeyringInput Objekt, das einen AWS KMS Client für ein bestimmtes Objekt verwendet AWS-Region, und einen optionalen Erkennungsfilter, der KMS Schlüssel auf eine bestimmte AWS Partition und ein bestimmtes Konto beschränkt. Rufen Sie dann die CreateAwsKmsMrkDiscoveryKeyring() Methode mit dem Eingabeobjekt auf. Ein vollständiges Beispiel finden Sie unter AwsKmsMrkDiscoveryKeyringExample.cs im Forum AWS Encryption SDK . NETRepository aktiviert. GitHub

Um einen multi-Region-aware Discovery-Schlüsselbund für mehrere zu erstellen AWS-Region, verwenden Sie die CreateAwsKmsMrkDiscoveryMultiKeyring() Methode, um einen Mehrfachschlüsselbund zu erstellen, oder verwenden Sie diese Methode, CreateAwsKmsMrkDiscoveryKeyring() um mehrere multi-Region-aware Discovery-Schlüsselbunde zu erstellen und sie dann mit der CreateMultiKeyring() Methode zu einem Mehrfachschlüsselbund zu kombinieren.

Ein Beispiel finden Sie unter .cs. AwsKmsMrkDiscoveryMultiKeyringExample

// Decrypt in discovery mode with a multi-Region KMS key // Instantiate the AWS Encryption SDK and material providers var encryptionSdk = AwsEncryptionSdkFactory.CreateDefaultAwsEncryptionSdk(); var materialProviders = AwsCryptographicMaterialProvidersFactory.CreateDefaultAwsCryptographicMaterialProviders(); List<string> account = new List<string> { "111122223333" }; // Instantiate the discovery filter DiscoveryFilter mrkDiscoveryFilter = new DiscoveryFilter() { AccountIds = account, Partition = "aws" } // Create the keyring var createMrkDiscoveryKeyringInput = new CreateAwsKmsMrkDiscoveryKeyringInput { KmsClient = new AmazonKeyManagementServiceClient(RegionEndpoint.USWest2), DiscoveryFilter = mrkDiscoveryFilter }; var mrkDiscoveryKeyring = materialProviders.CreateAwsKmsMrkDiscoveryKeyring(createMrkDiscoveryKeyringInput); // Decrypt the ciphertext var decryptInput = new DecryptInput { Ciphertext = ciphertext, Keyring = mrkDiscoveryKeyring }; var decryptOutput = encryptionSdk.Decrypt(decryptInput);
AWS Encryption CLI

Verwenden Sie das Discovery-Attribut des Parameters, um im Discovery-Modus zu entschlüsseln. --wrapping-keys Die Attribute discovery-account und discovery-partition erstellen einen Discovery-Filter, der optional, aber empfohlen wird.

Um die Region anzugeben, enthält dieser Befehl das Regionsattribut des Parameters. --wrapping-keys

# Decrypt in discovery mode with a multi-Region KMS key $ aws-encryption-cli --decrypt \ --input hello.txt.encrypted \ --wrapping-keys discovery=true \ discovery-account=111122223333 \ discovery-partition=aws \ region=us-west-2 \ --encryption-context purpose=test \ --metadata-output ~/metadata \ --max-encrypted-data-keys 1 \ --buffer \ --output .
Java

Verwenden Sie den builder().withDiscoveryMrkRegion Parameter, um die lokale Region anzugeben. Andernfalls AWS Encryption SDK ruft der die lokale Region aus der Region ab, die in der konfiguriert ist AWS SDK for Java.

Ein vollständiges Beispiel finden Sie unter DiscoveryMultiRegionDecryptionExample.java im AWS-Verschlüsselungs-SDK for Java Repository unter GitHub.

// Decrypt in discovery mode with a multi-Region KMS key // Instantiate the client final AwsCrypto crypto = AwsCrypto.builder() .withCommitmentPolicy(CommitmentPolicy.RequireEncryptRequireDecrypt) .build(); DiscoveryFilter discoveryFilter = new DiscoveryFilter("aws", 111122223333); AwsKmsMrkAwareMasterKeyProvider mrkDiscoveryProvider = AwsKmsMrkAwareMasterKeyProvider .builder() .withDiscoveryMrkRegion(Region.US_WEST_2) .buildDiscovery(discoveryFilter); // Decrypt your ciphertext final CryptoResult<byte[], AwsKmsMrkAwareMasterKey> decryptResult = crypto .decryptData(mrkDiscoveryProvider, ciphertext);
JavaScript Browser

Verwenden Sie die Methode, um im Discovery-Modus mit einem symmetrischen Schlüssel für mehrere Regionen zu entschlüsseln. AwsKmsMrkAwareSymmetricDiscoveryKeyringBrowser()

Ein vollständiges Beispiel finden Sie unter kms_multi_region_discovery.ts im Repository unter. AWS-Verschlüsselungs-SDK for JavaScript GitHub

/* Decrypt in discovery mode with a multi-Region KMS key */ import { AwsKmsMrkAwareSymmetricDiscoveryKeyringBrowser, buildClient, CommitmentPolicy, KMS, } from '@aws-crypto/client-browser' /* Instantiate an AWS Encryption SDK client */ const { decrypt } = buildClient() declare const credentials: { accessKeyId: string secretAccessKey: string sessionToken: string } /* Instantiate the KMS client with an explicit Region */ const client = new KMS({ region: 'us-west-2', credentials }) /* Create a discovery filter */ const discoveryFilter = { partition: 'aws', accountIDs: ['111122223333'] } /* Create an AWS KMS discovery keyring */ const mrkDiscoveryKeyring = new AwsKmsMrkAwareSymmetricDiscoveryKeyringBrowser({ client, discoveryFilter, }) /* Decrypt the data */ const { plaintext, messageHeader } = await decrypt(mrkDiscoveryKeyring, ciphertext)
JavaScript Node.js

Verwenden Sie die Methode, um im Discovery-Modus mit einem symmetrischen Schlüssel für mehrere Regionen zu entschlüsseln. AwsKmsMrkAwareSymmetricDiscoveryKeyringNode()

Ein vollständiges Beispiel finden Sie unter kms_multi_region_discovery.ts im Repository unter. AWS-Verschlüsselungs-SDK for JavaScript GitHub

/* Decrypt in discovery mode with a multi-Region KMS key */ import { AwsKmsMrkAwareSymmetricDiscoveryKeyringNode, buildClient, CommitmentPolicy, KMS, } from '@aws-crypto/client-node' /* Instantiate the Encryption SDK client const { decrypt } = buildClient() /* Instantiate the KMS client with an explicit Region */ const client = new KMS({ region: 'us-west-2' }) /* Create a discovery filter */ const discoveryFilter = { partition: 'aws', accountIDs: ['111122223333'] } /* Create an AWS KMS discovery keyring */ const mrkDiscoveryKeyring = new AwsKmsMrkAwareSymmetricDiscoveryKeyringNode({ client, discoveryFilter, }) /* Decrypt your ciphertext */ const { plaintext, messageHeader } = await decrypt(mrkDiscoveryKeyring, result)
Python

Verwenden Sie die Methode, um im Discovery-Modus mit einem Schlüssel für mehrere Regionen zu entschlüsseln. MRKAwareDiscoveryAwsKmsMasterKeyProvider()

Ein vollständiges Beispiel finden Sie unter mrk_aware_kms_provider.py im AWS-Verschlüsselungs-SDK for Python Repository unter. GitHub

# Decrypt in discovery mode with a multi-Region KMS key # Instantiate the client client = aws_encryption_sdk.EncryptionSDKClient() # Create the discovery filter and specify the region decrypt_kwargs = dict( discovery_filter=DiscoveryFilter(account_ids="111122223333", partition="aws"), discovery_region="us-west-2", ) # Use the multi-Region method to create the master key provider # in discovery mode mrk_discovery_key_provider = MRKAwareDiscoveryAwsKmsMasterKeyProvider(**decrypt_kwargs) # Decrypt your ciphertext plaintext, _ = client.decrypt( source=ciphertext, key_provider=mrk_discovery_key_provider )

Auswahl einer Algorithmus-Suite

Die AWS Encryption SDK unterstützt mehrere symmetrische und asymmetrische Verschlüsselungsalgorithmen zur Verschlüsselung Ihrer Datenschlüssel unter den von Ihnen angegebenen Wrapping-Schlüsseln. Wenn diese Datenschlüssel jedoch zur Verschlüsselung Ihrer Daten verwendet werden, wird AWS Encryption SDK standardmäßig eine empfohlene Algorithmussuite verwendet, die den GCM Algorithmus AES - mit Schlüsselableitung, digitalen Signaturen und Schlüsselbindung verwendet. Obwohl die standardmäßige Algorithmussuite wahrscheinlich für die meisten Anwendungen geeignet ist, können Sie auch eine alternative Algorithmussuite wählen. Einige Vertrauensmodelle würden beispielsweise durch eine Algorithmus-Suite ohne digitale Signaturen erfüllt. Hinweise zu den von der AWS Encryption SDK unterstützten Algorithmus-Suites finden Sie unterUnterstützte Algorithmen-Pakete im AWS Encryption SDK.

Die folgenden Beispiele zeigen Ihnen, wie Sie beim Verschlüsseln eine alternative Algorithmus-Suite auswählen. In diesen Beispielen wird eine empfohlene AES GCM Algorithmus-Suite mit Schlüsselableitung und Schlüsselzusage ausgewählt, jedoch ohne digitale Signaturen. Wenn Sie mit einer Algorithmus-Suite verschlüsseln, die keine digitalen Signaturen enthält, verwenden Sie beim Entschlüsseln den Entschlüsselungsmodus „Nur ohne Vorzeichen“. Dieser Modus schlägt fehl, wenn er auf einen signierten Chiffretext trifft, und ist vor allem bei der Streaming-Entschlüsselung nützlich.

C

Um eine alternative Algorithmus-Suite in der anzugeben AWS-Verschlüsselungs-SDK for C, müssen Sie explizit eine erstellen. CMM Verwenden Sie dann die aws_cryptosdk_default_cmm_set_alg_id mit der CMM und der ausgewählten Algorithmus-Suite.

/* Specify an algorithm suite without signing */ /* Load error strings for debugging */ aws_cryptosdk_load_error_strings(); /* Construct an AWS KMS keyring */ struct aws_cryptosdk_keyring *kms_keyring = Aws::Cryptosdk::KmsKeyring::Builder().Build(key_arn); /* To set an alternate algorithm suite, create an cryptographic materials manager (CMM) explicitly */ struct aws_cryptosdk_cmm *cmm = aws_cryptosdk_default_cmm_new(aws_default_allocator(), kms_keyring); aws_cryptosdk_keyring_release(kms_keyring); /* Specify the algorithm suite for the CMM */ aws_cryptosdk_default_cmm_set_alg_id(cmm, ALG_AES256_GCM_HKDF_SHA512_COMMIT_KEY); /* Construct the session with the CMM, then release the CMM reference */ struct aws_cryptosdk_session *session = aws_cryptosdk_session_new_from_cmm_2(alloc, AWS_CRYPTOSDK_ENCRYPT, cmm); aws_cryptosdk_cmm_release(cmm); /* Encrypt the data Use aws_cryptosdk_session_process_full with non-streaming data */ if (AWS_OP_SUCCESS != aws_cryptosdk_session_process_full( session, ciphertext, ciphertext_buf_sz, &ciphertext_len, plaintext, plaintext_len)) { aws_cryptosdk_session_destroy(session); return AWS_OP_ERR; }

Verwenden AWS_CRYPTOSDK_DECRYPT_UNSIGNED Sie beim Entschlüsseln von Daten, die ohne digitale Signaturen verschlüsselt wurden. Dies führt dazu, dass die Entschlüsselung fehlschlägt, wenn signierter Chiffretext gefunden wird.

/* Decrypt unsigned streaming data */ /* Load error strings for debugging */ aws_cryptosdk_load_error_strings(); /* Construct an AWS KMS keyring */ struct aws_cryptosdk_keyring *kms_keyring = Aws::Cryptosdk::KmsKeyring::Builder().Build(key_arn); /* Create a session for decrypting with the AWS KMS keyring Then release the keyring reference */ struct aws_cryptosdk_session *session = aws_cryptosdk_session_new_from_keyring_2(alloc, AWS_CRYPTOSDK_DECRYPT_UNSIGNED, kms_keyring); aws_cryptosdk_keyring_release(kms_keyring); if (!session) { return AWS_OP_ERR; } /* Limit encrypted data keys */ aws_cryptosdk_session_set_max_encrypted_data_keys(session, 1); /* Decrypt Use aws_cryptosdk_session_process_full with non-streaming data */ if (AWS_OP_SUCCESS != aws_cryptosdk_session_process_full( session, plaintext, plaintext_buf_sz, &plaintext_len, ciphertext, ciphertext_len)) { aws_cryptosdk_session_destroy(session); return AWS_OP_ERR; }
C# / .NET

Um eine alternative Algorithmus-Suite im Formular anzugeben. AWS Encryption SDK NET, geben Sie die AlgorithmSuiteId Eigenschaft eines EncryptInputObjekts an. Das AWS Encryption SDK für. NETenthält Konstanten, anhand derer Sie Ihre bevorzugte Algorithmussuite identifizieren können.

Das AWS Encryption SDK für. NETverfügt nicht über eine Methode zur Erkennung von signiertem Chiffretext bei der Streaming-Entschlüsselung, da diese Bibliothek keine Streaming-Daten unterstützt.

// Specify an algorithm suite without signing // Instantiate the AWS Encryption SDK and material providers var encryptionSdk = AwsEncryptionSdkFactory.CreateDefaultAwsEncryptionSdk(); var materialProviders = AwsCryptographicMaterialProvidersFactory.CreateDefaultAwsCryptographicMaterialProviders(); // Create the keyring var keyringInput = new CreateAwsKmsKeyringInput { KmsClient = new AmazonKeyManagementServiceClient(), KmsKeyId = keyArn }; var keyring = materialProviders.CreateAwsKmsKeyring(keyringInput); // Encrypt your plaintext data var encryptInput = new EncryptInput { Plaintext = plaintext, Keyring = keyring, AlgorithmSuiteId = AlgorithmSuiteId.ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY }; var encryptOutput = encryptionSdk.Encrypt(encryptInput);
AWS Encryption CLI

Bei der Verschlüsselung der hello.txt Datei verwendet dieses Beispiel den --algorithm Parameter, um eine Algorithmussuite ohne digitale Signaturen anzugeben.

# Specify an algorithm suite without signing # To run this example, replace the fictitious key ARN with a valid value. $ keyArn=arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab $ aws-encryption-cli --encrypt \ --input hello.txt \ --wrapping-keys key=$keyArn \ --algorithm AES_256_GCM_HKDF_SHA512_COMMIT_KEY \ --metadata-output ~/metadata \ --encryption-context purpose=test \ --commitment-policy require-encrypt-require-decrypt \ --output hello.txt.encrypted \ --decode

Bei der Entschlüsselung verwendet dieses Beispiel den --decrypt-unsigned Parameter. Dieser Parameter wird empfohlen, um sicherzustellen, dass Sie unsignierten Chiffretext entschlüsseln, insbesondere bei der, bei der immer ein- und CLI ausgegebene Daten gestreamt werden.

# Decrypt unsigned streaming data # To run this example, replace the fictitious key ARN with a valid value. $ keyArn=arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab $ aws-encryption-cli --decrypt-unsigned \ --input hello.txt.encrypted \ --wrapping-keys key=$keyArn \ --max-encrypted-data-keys 1 \ --commitment-policy require-encrypt-require-decrypt \ --encryption-context purpose=test \ --metadata-output ~/metadata \ --output .
Java

Verwenden Sie die Methode, um eine alternative Algorithmus-Suite anzugeben. AwsCrypto.builder().withEncryptionAlgorithm() Dieses Beispiel spezifiziert eine alternative Algorithmussuite ohne digitale Signaturen.

// Specify an algorithm suite without signing // Instantiate the client AwsCrypto crypto = AwsCrypto.builder() .withCommitmentPolicy(CommitmentPolicy.RequireEncryptRequireDecrypt) .withEncryptionAlgorithm(CryptoAlgorithm.ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY) .build(); String awsKmsKey = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; // Create a master key provider in strict mode KmsMasterKeyProvider masterKeyProvider = KmsMasterKeyProvider.builder() .buildStrict(awsKmsKey); // Create an encryption context to identify this ciphertext Map<String, String> encryptionContext = Collections.singletonMap("Example", "FileStreaming"); // Encrypt your plaintext data CryptoResult<byte[], KmsMasterKey> encryptResult = crypto.encryptData( masterKeyProvider, sourcePlaintext, encryptionContext); byte[] ciphertext = encryptResult.getResult();

Verwenden Sie beim Streamen von Daten zur Entschlüsselung diese createUnsignedMessageDecryptingStream() Methode, um sicherzustellen, dass der gesamte Chiffretext, den Sie entschlüsseln, nicht signiert ist.

// Decrypt unsigned streaming data // Instantiate the client AwsCrypto crypto = AwsCrypto.builder() .withCommitmentPolicy(CommitmentPolicy.RequireEncryptRequireDecrypt) .withMaxEncryptedDataKeys(1) .build(); // Create a master key provider in strict mode String awsKmsKey = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; KmsMasterKeyProvider masterKeyProvider = KmsMasterKeyProvider.builder() .buildStrict(awsKmsKey); // Decrypt the encrypted message FileInputStream in = new FileInputStream(srcFile + ".encrypted"); CryptoInputStream<KmsMasterKey> decryptingStream = crypto.createUnsignedMessageDecryptingStream(masterKeyProvider, in); // Return the plaintext data // Write the plaintext data to disk FileOutputStream out = new FileOutputStream(srcFile + ".decrypted"); IOUtils.copy(decryptingStream, out); decryptingStream.close();
JavaScript Browser

Um eine alternative Algorithmussuite anzugeben, verwenden Sie den suiteId Parameter mit einem Enum-Wert. AlgorithmSuiteIdentifier

// Specify an algorithm suite without signing // Instantiate the client const { encrypt } = buildClient( CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT ) // Specify a KMS key const generatorKeyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; // Create a keyring with the KMS key const keyring = new KmsKeyringBrowser({ generatorKeyId }) // Encrypt your plaintext data const { result } = await encrypt(keyring, cleartext, { suiteId: AlgorithmSuiteIdentifier.ALG_AES256_GCM_IV12_TAG16_HKDF_SHA512_COMMIT_KEY, encryptionContext: context, })

Verwenden Sie beim Entschlüsseln die decrypt Standardmethode. AWS-Verschlüsselungs-SDK for JavaScript hat im Browser keinen decrypt-unsigned Modus, weil der Browser kein Streaming unterstützt.

// Decrypt unsigned streaming data // Instantiate the client const { decrypt } = buildClient( CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT ) // Create a keyring with the same KMS key used to encrypt const generatorKeyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; const keyring = new KmsKeyringBrowser({ generatorKeyId }) // Decrypt the encrypted message const { plaintext, messageHeader } = await decrypt(keyring, ciphertextMessage)
JavaScript Node.js

Um eine alternative Algorithmus-Suite anzugeben, verwenden Sie den suiteId Parameter mit einem AlgorithmSuiteIdentifier Enum-Wert.

// Specify an algorithm suite without signing // Instantiate the client const { encrypt } = buildClient( CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT ) // Specify a KMS key const generatorKeyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; // Create a keyring with the KMS key const keyring = new KmsKeyringNode({ generatorKeyId }) // Encrypt your plaintext data const { result } = await encrypt(keyring, cleartext, { suiteId: AlgorithmSuiteIdentifier.ALG_AES256_GCM_IV12_TAG16_HKDF_SHA512_COMMIT_KEY, encryptionContext: context, })

Verwenden decryptUnsignedMessage Sie Stream, wenn Sie Daten entschlüsseln, die ohne digitale Signaturen verschlüsselt wurden. Diese Methode schlägt fehl, wenn sie auf signierten Chiffretext trifft.

// Decrypt unsigned streaming data // Instantiate the client const { decryptUnsignedMessageStream } = buildClient( CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT ) // Create a keyring with the same KMS key used to encrypt const generatorKeyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; const keyring = new KmsKeyringNode({ generatorKeyId }) // Decrypt the encrypted message const outputStream = createReadStream(filename) .pipe(decryptUnsignedMessageStream(keyring))
Python

Um einen alternativen Verschlüsselungsalgorithmus anzugeben, verwenden Sie den algorithm Parameter mit einem Algorithm Enum-Wert.

# Specify an algorithm suite without signing # Instantiate a client client = aws_encryption_sdk.EncryptionSDKClient(commitment_policy=CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT, max_encrypted_data_keys=1) # Create a master key provider in strict mode aws_kms_key = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" aws_kms_strict_master_key_provider = StrictAwsKmsMasterKeyProvider( key_ids=[aws_kms_key] ) # Encrypt the plaintext using an alternate algorithm suite ciphertext, encrypted_message_header = client.encrypt( algorithm=Algorithm.AES_256_GCM_HKDF_SHA512_COMMIT_KEY, source=source_plaintext, key_provider=kms_key_provider )

Verwenden Sie beim Entschlüsseln von Nachrichten, die ohne digitale Signaturen verschlüsselt wurden, den decrypt-unsigned Streaming-Modus, insbesondere beim Entschlüsseln während des Streamings.

# Decrypt unsigned streaming data # Instantiate the client client = aws_encryption_sdk.EncryptionSDKClient(commitment_policy=CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT, max_encrypted_data_keys=1) # Create a master key provider in strict mode aws_kms_key = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" aws_kms_strict_master_key_provider = StrictAwsKmsMasterKeyProvider( key_ids=[aws_kms_key] ) # Decrypt with decrypt-unsigned with open(ciphertext_filename, "rb") as ciphertext, open(cycled_plaintext_filename, "wb") as plaintext: with client.stream(mode="decrypt-unsigned", source=ciphertext, key_provider=master_key_provider) as decryptor: for chunk in decryptor: plaintext.write(chunk) # Verify that the encryption context assert all( pair in decryptor.header.encryption_context.items() for pair in encryptor.header.encryption_context.items() ) return ciphertext_filename, cycled_plaintext_filename

Beschränkung verschlüsselter Datenschlüssel

Sie können die Anzahl der verschlüsselten Datenschlüssel in einer verschlüsselten Nachricht einschränken. Diese bewährte Methode kann Ihnen helfen, einen falsch konfigurierten Schlüsselbund beim Verschlüsseln oder einen bösartigen Chiffretext beim Entschlüsseln zu erkennen. Es verhindert auch unnötige, teure und potenziell erschöpfende Zugriffe auf Ihre Schlüsselinfrastruktur. Die Einschränkung verschlüsselter Datenschlüssel ist am wertvollsten, wenn Sie Nachrichten aus einer nicht vertrauenswürdigen Quelle entschlüsseln.

Obwohl die meisten verschlüsselten Nachrichten einen verschlüsselten Datenschlüssel für jeden bei der Verschlüsselung verwendeten Umschließungsschlüssel haben, kann eine verschlüsselte Nachricht bis zu 65.535 verschlüsselte Datenschlüssel enthalten. Ein böswilliger Akteur könnte eine verschlüsselte Nachricht mit Tausenden von verschlüsselten Datenschlüsseln erstellen, von denen keiner entschlüsselt werden kann. In der Folge AWS Encryption SDK würde versucht werden, jeden verschlüsselten Datenschlüssel zu entschlüsseln, bis alle verschlüsselten Datenschlüssel in der Nachricht aufgebraucht sind.

Verwenden Sie den MaxEncryptedDataKeys Parameter, um die Anzahl der verschlüsselten Datenschlüssel einzuschränken. Dieser Parameter ist ab Version 1.9 für alle unterstützten Programmiersprachen verfügbar. x und 2.2. x der AWS Encryption SDK. Es ist optional und gültig beim Verschlüsseln und Entschlüsseln. In den folgenden Beispielen werden Daten entschlüsselt, die mit drei verschiedenen Wrapping-Schlüsseln verschlüsselt wurden. Der MaxEncryptedDataKeys Wert ist auf 3 festgelegt.

C
/* Load error strings for debugging */ aws_cryptosdk_load_error_strings(); /* Construct an AWS KMS keyring */ struct aws_cryptosdk_keyring *kms_keyring = Aws::Cryptosdk::KmsKeyring::Builder().Build(key_arn1, { key_arn2, key_arn3 }); /* Create a session */ struct aws_cryptosdk_session *session = aws_cryptosdk_session_new_from_keyring_2(alloc, AWS_CRYPTOSDK_DECRYPT, kms_keyring); aws_cryptosdk_keyring_release(kms_keyring); /* Limit encrypted data keys */ aws_cryptosdk_session_set_max_encrypted_data_keys(session, 3); /* Decrypt */ size_t ciphertext_consumed_output; aws_cryptosdk_session_process(session, plaintext_output, plaintext_buf_sz_output, &plaintext_len_output, ciphertext_input, ciphertext_len_input, &ciphertext_consumed_output); assert(aws_cryptosdk_session_is_done(session)); assert(ciphertext_consumed == ciphertext_len);
C# / .NET

Um verschlüsselte Datenschlüssel im Formular AWS Encryption SDK einzuschränken. NET, instanziieren Sie einen Client für das AWS Encryption SDK for. NETund setzen Sie seinen optionalen MaxEncryptedDataKeys Parameter auf den gewünschten Wert. Rufen Sie dann die Decrypt() Methode auf der konfigurierten AWS Encryption SDK Instanz auf.

// Decrypt with limited data keys // Instantiate the material providers var materialProviders = AwsCryptographicMaterialProvidersFactory.CreateDefaultAwsCryptographicMaterialProviders(); // Configure the commitment policy on the AWS Encryption SDK instance var config = new AwsEncryptionSdkConfig { MaxEncryptedDataKeys = 3 }; var encryptionSdk = AwsEncryptionSdkFactory.CreateAwsEncryptionSdk(config); // Create the keyring string keyArn = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; var createKeyringInput = new CreateAwsKmsKeyringInput { KmsClient = new AmazonKeyManagementServiceClient(), KmsKeyId = keyArn }; var decryptKeyring = materialProviders.CreateAwsKmsKeyring(createKeyringInput); // Decrypt the ciphertext var decryptInput = new DecryptInput { Ciphertext = ciphertext, Keyring = decryptKeyring }; var decryptOutput = encryptionSdk.Decrypt(decryptInput);
AWS Encryption CLI
# Decrypt with limited encrypted data keys $ aws-encryption-cli --decrypt \ --input hello.txt.encrypted \ --wrapping-keys key=$key_arn1 key=$key_arn2 key=$key_arn3 \ --buffer \ --max-encrypted-data-keys 3 \ --encryption-context purpose=test \ --metadata-output ~/metadata \ --output .
Java
// Construct a client with limited encrypted data keys final AwsCrypto crypto = AwsCrypto.builder() .withMaxEncryptedDataKeys(3) .build(); // Create an AWS KMS master key provider final KmsMasterKeyProvider keyProvider = KmsMasterKeyProvider.builder() .buildStrict(keyArn1, keyArn2, keyArn3); // Decrypt final CryptoResult<byte[], KmsMasterKey> decryptResult = crypto.decryptData(keyProvider, ciphertext)
JavaScript Browser
// Construct a client with limited encrypted data keys const { encrypt, decrypt } = buildClient({ maxEncryptedDataKeys: 3 }) declare const credentials: { accessKeyId: string secretAccessKey: string sessionToken: string } const clientProvider = getClient(KMS, { credentials: { accessKeyId, secretAccessKey, sessionToken } }) // Create an AWS KMS keyring const keyring = new KmsKeyringBrowser({ clientProvider, keyIds: [keyArn1, keyArn2, keyArn3], }) // Decrypt const { plaintext, messageHeader } = await decrypt(keyring, ciphertext)
JavaScript Node.js
// Construct a client with limited encrypted data keys const { encrypt, decrypt } = buildClient({ maxEncryptedDataKeys: 3 }) // Create an AWS KMS keyring const keyring = new KmsKeyringBrowser({ keyIds: [keyArn1, keyArn2, keyArn3], }) // Decrypt const { plaintext, messageHeader } = await decrypt(keyring, ciphertext)
Python
# Instantiate a client with limited encrypted data keys client = aws_encryption_sdk.EncryptionSDKClient(max_encrypted_data_keys=3) # Create an AWS KMS master key provider master_key_provider = aws_encryption_sdk.StrictAwsKmsMasterKeyProvider( key_ids=[key_arn1, key_arn2, key_arn3]) # Decrypt plaintext, header = client.decrypt(source=ciphertext, key_provider=master_key_provider)

Einen Discovery-Filter erstellen

Beim Entschlüsseln von Daten, die mit KMS Schlüsseln verschlüsselt wurden, empfiehlt es sich, im strikten Modus zu entschlüsseln, d. h., die verwendeten Wrapping-Schlüssel auf die von Ihnen angegebenen zu beschränken. Bei Bedarf können Sie jedoch auch im Discovery-Modus entschlüsseln, in dem Sie keine Umschließungsschlüssel angeben. In diesem Modus AWS KMS kann der verschlüsselte Datenschlüssel mit dem Schlüssel, mit dem er verschlüsselt wurde, entschlüsselt werden, unabhängig davon, wem dieser KMS Schlüssel gehört oder wer Zugriff darauf KMS hat.

Wenn Sie im Discovery-Modus entschlüsseln müssen, empfehlen wir, immer einen Discovery-Filter zu verwenden, der die Schlüssel, die verwendet werden können, auf die KMS Schlüssel beschränkt, die sich in einer bestimmten Partition befinden AWS-Konto . Der Discovery-Filter ist optional, hat sich aber bewährt.

Verwenden Sie die folgende Tabelle, um den Partitionswert für Ihren Discovery-Filter zu ermitteln.

Region Partition
AWS-Regionen aws
Regionen in China aws-cn
AWS GovCloud (US) Regions aws-us-gov

Die Beispiele in diesem Abschnitt zeigen, wie Sie einen Discovery-Filter erstellen. Bevor Sie den Code verwenden, ersetzen Sie die Beispielwerte durch gültige Werte für die Partition AWS-Konto und.

C

Vollständige Beispiele finden Sie in der Datei kms_discovery.cpp in der AWS-Verschlüsselungs-SDK for C.

/* Create a discovery filter for an AWS account and partition */ const char *account_id = "111122223333"; const char *partition = "aws"; const std::shared_ptr<Aws::Cryptosdk::KmsKeyring::DiscoveryFilter> discovery_filter = Aws::Cryptosdk::KmsKeyring::DiscoveryFilter::Builder(partition).AddAccount(account_id).Build();
C# / .NET

Ein vollständiges Beispiel finden Sie unter DiscoveryFilterExample.cs im Forum AWS Encryption SDK . NET.

// Create a discovery filter for an AWS account and partition List<string> account = new List<string> { "111122223333" }; DiscoveryFilter exampleDiscoveryFilter = new DiscoveryFilter() { AccountIds = account, Partition = "aws" }
AWS Encryption CLI
# Decrypt in discovery mode with a discovery filter $ aws-encryption-cli --decrypt \ --input hello.txt.encrypted \ --wrapping-keys discovery=true \ discovery-account=111122223333 \ discovery-partition=aws \ --encryption-context purpose=test \ --metadata-output ~/metadata \ --max-encrypted-data-keys 1 \ --buffer \ --output .
Java

Ein vollständiges Beispiel finden Sie unter DiscoveryDecryptionExample.java in der AWS-Verschlüsselungs-SDK for Java.

// Create a discovery filter for an AWS account and partition DiscoveryFilter discoveryFilter = new DiscoveryFilter("aws", 111122223333);
JavaScript (Node and Browser)

Vollständige Beispiele finden Sie unter kms_filtered_discovery.ts (Node.js) und kms_multi_region_discovery.ts (Browser) im. AWS-Verschlüsselungs-SDK for JavaScript

/* Create a discovery filter for an AWS account and partition */ const discoveryFilter = { accountIDs: ['111122223333'], partition: 'aws', }
Python

Ein vollständiges Beispiel finden Sie unter AWS-Verschlüsselungs-SDK for Python discovery_kms_provider.py in der.

# Create the discovery filter and specify the region decrypt_kwargs = dict( discovery_filter=DiscoveryFilter(account_ids="111122223333", partition="aws"), discovery_region="us-west-2", )

Festlegung einer Verpflichtungspolitik

Eine Commitment-Richtlinie ist eine Konfigurationseinstellung, die bestimmt, ob Ihre Anwendung mit Key Commitment ver- oder entschlüsselt wird. Das Verschlüsseln und Entschlüsseln mit Key Commitment ist eine bewährte Methode.AWS Encryption SDK

Die Festlegung und Anpassung Ihrer Verpflichtungsrichtlinie ist ein wichtiger Schritt bei der Migration von Versionen 1.7. x und frühere Versionen von AWS Encryption SDK auf Version 2.0. x und später. Dieser Fortschritt wird im Thema Migration ausführlich erklärt.

Der Standardwert der Commitment-Richtlinie in den neuesten Versionen von AWS Encryption SDK (ab Version 2.0). x),RequireEncryptRequireDecrypt, ist für die meisten Situationen ideal. Wenn Sie jedoch Chiffretext entschlüsseln müssen, der ohne Schlüsselbindung verschlüsselt wurde, müssen Sie Ihre Verpflichtungsrichtlinie möglicherweise auf ändern. RequireEncryptAllowDecrypt Beispiele dafür, wie Sie in jeder Programmiersprache eine Commitment-Richtlinie einrichten, finden Sie unter. Festlegung Ihrer Verpflichtungspolitik

Arbeiten mit Streaming-Daten

Beachten Sie beim Streamen von Daten zur Entschlüsselung, dass der entschlüsselte Klartext AWS Encryption SDK zurückgibt, nachdem die Integritätsprüfungen abgeschlossen sind, aber bevor die digitale Signatur verifiziert wurde. Um sicherzustellen, dass Sie erst dann Klartext zurückgeben oder verwenden, wenn die Signatur verifiziert ist, empfehlen wir, den gestreamten Klartext zu puffern, bis der gesamte Entschlüsselungsprozess abgeschlossen ist.

Dieses Problem tritt nur auf, wenn Sie Chiffretext zur Entschlüsselung streamen und nur, wenn Sie eine Algorithmussuite verwenden, z. B. die Standard-Algorithmussuite, die digitale Signaturen enthält.

Um die Pufferung zu vereinfachen, enthalten einige AWS Encryption SDK Sprachimplementierungen, z. B. AWS-Verschlüsselungs-SDK for JavaScript in Node.js, eine Pufferfunktion als Teil der Entschlüsselungsmethode. Durch die AWS VerschlüsselungCLI, bei der Eingabe und Ausgabe immer gestreamt werden, wurde in Version 1.9 ein --buffer Parameter eingeführt. x und 2.2. x. In anderen Sprachimplementierungen können Sie vorhandene Pufferfunktionen verwenden. (Das für AWS Encryption SDK . NETunterstützt kein Streaming.)

Wenn Sie eine Algorithmus-Suite ohne digitale Signaturen verwenden, stellen Sie sicher, dass Sie die decrypt-unsigned Funktion in jeder Sprachimplementierung verwenden. Diese Funktion entschlüsselt Chiffretext, schlägt jedoch fehl, wenn signierter Chiffretext gefunden wird. Details hierzu finden Sie unter Auswahl einer Algorithmus-Suite.

Zwischenspeichern von Datenschlüsseln

Im Allgemeinen wird von der Wiederverwendung von Datenschlüsseln abgeraten, AWS Encryption SDK bietet jedoch eine Option zum Zwischenspeichern von Datenschlüsseln, die eine begrenzte Wiederverwendung von Datenschlüsseln ermöglicht. Durch das Zwischenspeichern von Datenschlüsseln kann die Leistung einiger Anwendungen verbessert und die Anzahl der Zugriffe auf Ihre wichtige Infrastruktur reduziert werden. Bevor Sie das Zwischenspeichern von Datenschlüsseln in der Produktion verwenden, passen Sie die Sicherheitsschwellenwerte an und testen Sie, ob die Vorteile die Nachteile der Wiederverwendung von Datenschlüsseln überwiegen.