Festlegung Ihrer Engagement-Richtlinie - 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.

Festlegung Ihrer Engagement-Richtlinie

Key Commitment stellt sicher, dass Ihre verschlüsselten Daten immer im gleichen Klartext entschlüsselt werden. Um diese Sicherheitseigenschaft bereitzustellen, ab Version 1.7. x, derAWS Encryption SDK verwendet neue Algorithmus-Suiten mit großem Engagement. Verwenden Sie die Konfigurationseinstellung der Commitment-Richtlinie, um festzustellen, ob Ihre Daten mit Key Commitment ver- und entschlüsselt werden. Das Verschlüsseln und Entschlüsseln von Daten mit Schlüsselbindung ist eine AWS Encryption SDKbewährte Methode.

Die Festlegung einer Verpflichtungspolitik ist ein wichtiger Bestandteil des zweiten Schritts im Migrationsprozess — die Migration vom letzten 1. x Versionen derAWS Encryption SDK beiden Versionen 2.0. x und später. Nachdem Sie Ihre Bindungsrichtlinie festgelegt und geändert haben, sollten Sie Ihre Anwendung gründlich testen, bevor Sie sie in der Produktion bereitstellen. Hinweise zur Migration finden Sie unterSo migrieren und implementieren Sie dasAWS Encryption SDK.

Die Einstellung der Commitment-Richtlinie hat in Version 2.0 drei gültige Werte. x und später. In der letzten 1. x Versionen (ab Version 1.7. x),ForbidEncryptAllowDecrypt ist nur gültig.

  • ForbidEncryptAllowDecrypt— SieAWS Encryption SDK können nicht mit Schlüsselbindung verschlüsseln. Es kann Chiffretexte entschlüsseln, die mit oder ohne Schlüsselbindung verschlüsselt sind.

    In der letzten 1. x Versionen, dies ist der einzig gültige Wert. Es stellt sicher, dass Sie nicht mit Schlüsselbindung verschlüsseln, bis Sie vollständig auf die Entschlüsselung mit Schlüsselbindung vorbereitet sind. Wenn Sie den Wert explizit festlegen, wird verhindert, dass Ihre Commitment-Richtlinierequire-encrypt-require-decrypt automatisch auf das Upgrade auf Version 2.0 geändert wird. x oder später. Stattdessen können Sie Ihre Engagement-Richtlinie schrittweise migrieren.

  • RequireEncryptAllowDecrypt— Der verschlüsseltAWS Encryption SDK immer mit Schlüsselbindung. Es kann Chiffretexte entschlüsseln, die mit oder ohne Schlüsselbindung verschlüsselt sind. Dieser Wert wurde mit Version 2.0 hinzugefügt. x.

  • RequireEncryptRequireDecrypt— Der verschlüsselt und entschlüsseltAWS Encryption SDK immer mit Schlüsselbindung. Dieser Wert wurde mit Version 2.0 hinzugefügt. x. Dies ist der Standardwert in den Versionen 2.0. x und später.

In der letzten 1. x Versionen, der einzig gültige Wert für die Bindungsrichtlinie istForbidEncryptAllowDecrypt. Nach der Migration auf Version 2.0. x oder später können Sie Ihre Bindungsrichtlinie schrittweise ändern, sobald Sie bereit sind. Aktualisieren Sie Ihre BindungsrichtlinieRequireEncryptRequireDecrypt erst, wenn Sie sicher sind, dass Sie keine Nachrichten ohne Schlüsselbindung verschlüsselt haben.

Diese Beispiele zeigen Ihnen, wie Sie Ihre Engagement-Richtlinie in der neuesten Version festlegen 1. x-Versionen und in Versionen 2.0. x und später. Die Technik hängt von Ihrer Programmiersprache ab.

Weitere Informationen zu Migration

FürAWS-Verschlüsselungs-SDK for JavaAWS-Verschlüsselungs-SDK for Python, und dieAWS Verschlüsselungs-CLI finden Sie Informationen zu den erforderlichen Änderungen an den Master-Key-Anbietern inAktualisierung derAWS KMS Master-Key-Anbieter.

FürAWS-Verschlüsselungs-SDK for C undAWS-Verschlüsselungs-SDK for JavaScript erfahren Sie mehr über ein optionales Update der Schlüsselringe inWird aktualisiertAWS KMSSchlüsselringe.

So legen Sie Ihre Engagement-Richtlinie fest

Die Methode, mit der Sie Ihre Verpflichtungspolitik festlegen, unterscheidet sich je nach Sprachimplementierung geringfügig. Diese Beispiele zeigen Ihnen, wie es geht. Bevor Sie Ihre Engagement-Richtlinie ändern, überprüfen Sie den mehrstufigen Ansatz inSo migrieren und implementieren Sie.

C

Ab Version 1.7. x vonAWS-Verschlüsselungs-SDK for C, verwenden Sie dieaws_cryptosdk_session_set_commitment_policy Funktion, um die Commitment-Richtlinie für Ihre Verschlüsselungs- und Entschlüsselungssitzungen festzulegen. Die von Ihnen festgelegte Commitment-Richtlinie gilt für alle Verschlüsselungs- und Entschlüsselungsvorgänge, die in dieser Sitzung aufgerufen werden.

Dieaws_cryptosdk_session_new_from_cmm Funktionenaws_cryptosdk_session_new_from_keyring und sind in Version 1.7 veraltet. x und in Version 2.0 entfernt. x. Diese Funktionen werden durchaws_cryptosdk_session_new_from_keyring_2aws_cryptosdk_session_new_from_cmm_2 Funktionen ersetzt, die eine Sitzung zurückgeben.

Wenn Sie dasaws_cryptosdk_session_new_from_keyring_2 undaws_cryptosdk_session_new_from_cmm_2 in der neuesten Version verwenden 1. x Versionen, Sie müssen dieaws_cryptosdk_session_set_commitment_policy Funktion mit dem Wert derCOMMITMENT_POLICY_FORBID_ENCRYPT_ALLOW_DECRYPT Commitment-Richtlinie aufrufen. In Versionen 2.0. x und später ist der Aufruf dieser Funktion optional und nimmt alle gültigen Werte an. Die standardmäßige Bindungsrichtlinie für Versionen 2.0. x und später istCOMMITMENT_POLICY_REQUIRE_ENCRYPT_REQUIRE_DECRYPT.

Ein vollständiges Beispiel finden Sie unter string.cpp.

/* Load error strings for debugging */ aws_cryptosdk_load_error_strings(); /* Create an AWS KMS keyring */ const char * key_arn = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; struct aws_cryptosdk_keyring *kms_keyring = Aws::Cryptosdk::KmsKeyring::Builder().Build(key_arn); /* Create an encrypt session with a CommitmentPolicy setting */ struct aws_cryptosdk_session *encrypt_session = aws_cryptosdk_session_new_from_keyring_2( alloc, AWS_CRYPTOSDK_ENCRYPT, kms_keyring); aws_cryptosdk_keyring_release(kms_keyring); aws_cryptosdk_session_set_commitment_policy(encrypt_session, COMMITMENT_POLICY_FORBID_ENCRYPT_ALLOW_DECRYPT); ... /* Encrypt your data */ size_t plaintext_consumed_output; aws_cryptosdk_session_process(encrypt_session, ciphertext_output, ciphertext_buf_sz_output, ciphertext_len_output, plaintext_input, plaintext_len_input, &plaintext_consumed_output) ... /* Create a decrypt session with a CommitmentPolicy setting */ struct aws_cryptosdk_keyring *kms_keyring = Aws::Cryptosdk::KmsKeyring::Builder().Build(key_arn); struct aws_cryptosdk_session *decrypt_session = *aws_cryptosdk_session_new_from_keyring_2( alloc, AWS_CRYPTOSDK_DECRYPT, kms_keyring); aws_cryptosdk_keyring_release(kms_keyring); aws_cryptosdk_session_set_commitment_policy(decrypt_session, COMMITMENT_POLICY_FORBID_ENCRYPT_ALLOW_DECRYPT); /* Decrypt your ciphertext */ size_t ciphertext_consumed_output; aws_cryptosdk_session_process(decrypt_session, plaintext_output, plaintext_buf_sz_output, plaintext_len_output, ciphertext_input, ciphertext_len_input, &ciphertext_consumed_output)
C# / .NET

Derrequire-encrypt-require-decrypt Wert ist die standardmäßige Commitment-Richtlinie in allen Versionen vonAWS Encryption SDK für .NET. Es kann explizit als bewährte Methode eingestellt werden, es ist jedoch nicht erforderlich. Wenn Sie jedochAWS Encryption SDK für.NET verwenden, um Chiffretext zu entschlüsseln, der durch eine andere Sprachimplementierung derAWS Encryption SDK Without Key Commitment verschlüsselt wurde, müssen Sie den Wert der Commitment-Richtlinie aufREQUIRE_ENCRYPT_ALLOW_DECRYPT oder ändernFORBID_ENCRYPT_ALLOW_DECRYPT. Andernfalls schlagen Versuche, den Chiffretext zu entschlüsseln, fehl.

In derAWS Encryption SDK für.NET legen Sie die Commitment-Richtlinie für eine Instanz von festAWS Encryption SDK. Instanziieren Sie einAwsEncryptionSdkConfig Objekt mit einemCommitmentPolicy Parameter und verwenden Sie das Konfigurationsobjekt, um dieAWS Encryption SDK Instanz zu erstellen. Rufen Sie dann dieDecrypt() MethodenEncrypt() und der konfiguriertenAWS Encryption SDK Instanz auf.

In diesem Beispiel wird die Bindungsrichtlinie für festgelegtrequire-encrypt-allow-decrypt.

// Instantiate the material providers var materialProviders = AwsCryptographicMaterialProvidersFactory.CreateDefaultAwsCryptographicMaterialProviders(); // Configure the commitment policy on the AWS Encryption SDK instance var config = new AwsEncryptionSdkConfig { CommitmentPolicy = CommitmentPolicy.REQUIRE_ENCRYPT_ALLOW_DECRYPT }; var encryptionSdk = AwsEncryptionSdkFactory.CreateAwsEncryptionSdk(config); string keyArn = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; var encryptionContext = new Dictionary<string, string>() { {"purpose", "test"}encryptionSdk }; var createKeyringInput = new CreateAwsKmsKeyringInput { KmsClient = new AmazonKeyManagementServiceClient(), KmsKeyId = keyArn }; var keyring = materialProviders.CreateAwsKmsKeyring(createKeyringInput); // Encrypt your plaintext data var encryptInput = new EncryptInput { Plaintext = plaintext, Keyring = keyring, EncryptionContext = encryptionContext }; var encryptOutput = encryptionSdk.Encrypt(encryptInput); // Decrypt your ciphertext var decryptInput = new DecryptInput { Ciphertext = ciphertext, Keyring = keyring }; var decryptOutput = encryptionSdk.Decrypt(decryptInput);
AWS Encryption CLI

Verwenden Sie den--commitment-policy Parameter, um eine Commitment-Richtlinie in derAWS Verschlüsselungs-CLI festzulegen. Dieser Parameter wurde mit Version 1.8 eingeführt. x.

In der letzten 1. x-Version, wenn Sie den--wrapping-keys Parameter in einem--encrypt--decrypt OR-Befehl verwenden, ist ein--commitment-policy Parameter mit demforbid-encrypt-allow-decrypt Wert erforderlich. Andernfalls ist der--commitment-policy Parameter ungültig.

In den Versionen 2.1. x und höher, der--commitment-policy Parameter ist optional und verwendet standardmäßig denrequire-encrypt-require-decrypt Wert, der keinen Chiffretext verschlüsselt oder entschlüsselt, der ohne Schlüsselbindung verschlüsselt wird. Es wird jedoch empfohlen, die Commitment-Richtlinie in allen Verschlüsselungs- und Entschlüsselungsaufrufen explizit einzustellen, um eine Unterstützung bei der Wartung und Fehlerbehebung zu bieten.

In diesem Beispiel wird die Bindungsrichtlinie festgelegt. Es verwendet auch den--wrapping-keys Parameter, der den--master-keys Parameter ab Version 1.8 ersetzt. x. Details hierzu finden Sie unter Aktualisierung derAWS KMS Master-Key-Anbieter. Vollständige Beispiele finden Sie unterBeispiele für dieAWSCLI für Verschlüsselung.

\\ 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 \\ Encrypt your plaintext data - no change to algorithm suite used $ aws-encryption-cli --encrypt \ --input hello.txt \ --wrapping-keys key=$keyArn \ --commitment-policy forbid-encrypt-allow-decrypt \ --metadata-output ~/metadata \ --encryption-context purpose=test \ --output . \\ Decrypt your ciphertext - supports key commitment on 1.7 and later $ aws-encryption-cli --decrypt \ --input hello.txt.encrypted \ --wrapping-keys key=$keyArn \ --commitment-policy forbid-encrypt-allow-decrypt \ --encryption-context purpose=test \ --metadata-output ~/metadata \ --output .
Java

Ab Version 1.7. x vonAWS-Verschlüsselungs-SDK for Java, legen Sie die Commitment-Richtlinie für Ihre Instanz von festAwsCrypto, dem Objekt, das denAWS Encryption SDK Client repräsentiert. Diese Einstellung der Commitment-Richtlinie gilt für alle Verschlüsselungs- und Entschlüsselungsvorgänge, die auf diesem Client aufgerufen werden.

DerAwsCrypto() Konstruktor ist in der neuesten Version 1 veraltet. x Versionen vonAWS-Verschlüsselungs-SDK for Java und wurde in Version 2.0 entfernt. x. Es wird durch eine neueBuilder Klasse, eineBuilder.withCommitmentPolicy() Methode und denCommitmentPolicy aufgezählten Typ ersetzt.

In der letzten 1. x Versionen, dieBuilder Klasse benötigt dieBuilder.withCommitmentPolicy() Methode und dasCommitmentPolicy.ForbidEncryptAllowDecrypt Argument. Ab Version 2.0. x, dieBuilder.withCommitmentPolicy() Methode ist optional; der Standardwert istCommitmentPolicy.RequireEncryptRequireDecrypt.

Ein vollständiges Beispiel finden Sie unter SetCommitmentPolicyExample.java.

// Instantiate the client final AwsCrypto crypto = AwsCrypto.builder() .withCommitmentPolicy(CommitmentPolicy.ForbidEncryptAllowDecrypt) .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); // Encrypt your plaintext data CryptoResult<byte[], KmsMasterKey> encryptResult = crypto.encryptData( masterKeyProvider, sourcePlaintext, encryptionContext); byte[] ciphertext = encryptResult.getResult(); // Decrypt your ciphertext CryptoResult<byte[], KmsMasterKey> decryptResult = crypto.decryptData( masterKeyProvider, ciphertext); byte[] decrypted = decryptResult.getResult();
JavaScript

Ab Version 1.7. x vonAWS-Verschlüsselungs-SDK for JavaScript, können Sie die Commitment-Richtlinie festlegen, wenn Sie die neuebuildClient Funktion aufrufen, die einenAWS Encryption SDK Client instanziiert. DiebuildClient Funktion verwendet einen aufgezählten Wert, der Ihre Bindungsrichtlinie darstellt. Es gibt aktualisierteencrypt unddecrypt Funktionen zurück, die Ihre Bindungsrichtlinie beim Verschlüsseln und Entschlüsseln durchsetzen.

In der letzten 1. x Versionen, diebuildClient Funktion benötigt dasCommitmentPolicy.FORBID_ENCRYPT_ALLOW_DECRYPT Argument. Ab Version 2.0. x, das Argument für die Bindungsrichtlinie ist optional und der Standardwert istCommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT.

Der Code für Node.js und den Browser sind für diesen Zweck identisch, außer dass der Browser eine Anweisung benötigt, um Anmeldeinformationen festzulegen.

Im folgenden Beispiel werden Daten mit einemAWS KMS Schlüsselbund verschlüsselt. Die neuebuildClient Funktion legt die Bindungsrichtlinie aufFORBID_ENCRYPT_ALLOW_DECRYPT den Standardwert in der letzten 1 fest. 6 x Versionen. Das Upgradeencrypt und diedecrypt Funktionen, diebuildClient zurückgegeben werden, setzen die von Ihnen festgelegten Bindungsrichtlinien durch.

import { buildClient } from '@aws-crypto/client-node' const { encrypt, decrypt } = buildClient(CommitmentPolicy.FORBID_ENCRYPT_ALLOW_DECRYPT) // Create an AWS KMS keyring const generatorKeyId = 'arn:aws:kms:us-west-2:111122223333:alias/ExampleAlias' const keyIds = ['arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'] const keyring = new KmsKeyringNode({ generatorKeyId, keyIds }) // Encrypt your plaintext data const { ciphertext } = await encrypt(keyring, plaintext, { encryptionContext: context }) // Decrypt your ciphertext const { decrypted, messageHeader } = await decrypt(keyring, ciphertext)
Python

Ab Version 1.7. x vonAWS-Verschlüsselungs-SDK for Python, legen Sie die Commitment-Richtlinie für Ihre Instanz von festEncryptionSDKClient, einem neuen Objekt, das denAWS Encryption SDK Client repräsentiert. Die von Ihnen festgelegte Commitment-Richtlinie gilt für alleencryptdecrypt Anrufe, die diese Instanz des Clients verwenden.

In der letzten 1. x Versionen, derEncryptionSDKClient Konstruktor benötigt denCommitmentPolicy.FORBID_ENCRYPT_ALLOW_DECRYPT aufgezählten Wert. Ab Version 2.0. x, das Argument für die Bindungsrichtlinie ist optional und der Standardwert istCommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT.

In diesem Beispiel wird der neueEncryptionSDKClient Konstruktor verwendet und die Commitment-Richtlinie auf 1.7 festgelegt. x Standardwert. Der Konstruktor instanziiert einen Client, der den darstelltAWS Encryption SDK. Wenn Sie diestream Methodenencryptdecrypt, oder auf diesem Client aufrufen, setzen sie die von Ihnen festgelegte Commitment-Richtlinie durch. In diesem Beispiel wird auch der neue Konstruktor für dieStrictAwsKmsMasterKeyProvider Klasse verwendet, der dasAWS KMS keys Verschlüsseln und Entschlüsseln angibt.

Ein vollständiges Beispiel finden Sie unter set_commitment.py.

# Instantiate the client client = aws_encryption_sdk.EncryptionSDKClient(commitment_policy=CommitmentPolicy.FORBID_ENCRYPT_ALLOW_DECRYPT) // 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 your plaintext data ciphertext, encrypt_header = client.encrypt( source=source_plaintext, encryption_context=encryption_context, master_key_provider=aws_kms_strict_master_key_provider ) # Decrypt your ciphertext decrypted, decrypt_header = client.decrypt( source=ciphertext, master_key_provider=aws_kms_strict_master_key_provider )