Festlegung Ihrer Verpflichtungspolitik - 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 Verpflichtungspolitik

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

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

Die Richtlinieneinstellung „Commitment“ hat in den Versionen 2.0 drei gültige Werte. x und später. In der letzten 1. x-Versionen (beginnend mit Version 1.7. x), ForbidEncryptAllowDecrypt ist nur gültig.

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

    In der letzten Version 1. x-Versionen, dies ist der einzig gültige Wert. Es stellt sicher, dass Sie erst dann mit Key Commitment verschlüsseln, wenn Sie vollständig bereit sind, mit Key Commitment zu entschlüsseln. Wenn Sie den Wert explizit festlegen, wird verhindert, dass sich Ihre Verpflichtungsrichtlinie automatisch ändert, require-encrypt-require-decrypt wenn Sie auf Version 2.0 aktualisieren. x oder später. Stattdessen können Sie Ihre Verpflichtungspolitik schrittweise migrieren.

  • RequireEncryptAllowDecrypt— Das verschlüsselt AWS Encryption SDK immer mit Schlüsselzusage. Es kann Chiffretexte entschlüsseln, die mit oder ohne Schlüsselbindung verschlüsselt wurden. Dieser Wert wurde in Version 2.0 hinzugefügt. x.

  • RequireEncryptRequireDecrypt— Der verschlüsselt und entschlüsselt AWS Encryption SDK immer mit Schlüsselbindung. Dieser Wert wurde in 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 der Verpflichtungspolice istForbidEncryptAllowDecrypt. Nach der Migration auf Version 2.0. x oder später können Sie Ihre Verpflichtungsrichtlinie schrittweise ändern, sobald Sie bereit sind. Aktualisieren Sie Ihre Verpflichtungsrichtlinie RequireEncryptRequireDecrypt erst, wenn Sie sicher sind, dass Sie keine Nachrichten ohne Schlüsselbindung verschlüsselt haben.

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

Erfahren Sie mehr über Migration

Informationen zu den AWS erforderlichen Änderungen an den Hauptschlüsselanbietern finden Sie unterAktualisierung der AWS KMS Hauptschlüsselanbieter. AWS-Verschlüsselungs-SDK for Java AWS-Verschlüsselungs-SDK for Python CLI

Informationen zu einem optionalen Update für AWS-Verschlüsselungs-SDK for C Schlüsselanhänger finden Sie unterWird aktualisiertAWS KMSSchlüsselringe. AWS-Verschlüsselungs-SDK for JavaScript

Wie legen Sie Ihre Verpflichtungsrichtlinie fest

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

C

Ab Version 1.7. x von AWS-Verschlüsselungs-SDK for C, Sie verwenden die aws_cryptosdk_session_set_commitment_policy Funktion, um die Verpflichtungsrichtlinie 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.

Die aws_cryptosdk_session_new_from_cmm Funktionen aws_cryptosdk_session_new_from_keyring und sind in Version 1.7 veraltet. x und in Version 2.0 entfernt. x. Diese Funktionen werden durch aws_cryptosdk_session_new_from_cmm_2 Funktionen aws_cryptosdk_session_new_from_keyring_2 und ersetzt, die eine Sitzung zurückgeben.

Wenn Sie das aws_cryptosdk_session_new_from_keyring_2 und aws_cryptosdk_session_new_from_cmm_2 in der letzten Version verwenden 1. x-Versionen, Sie müssen die aws_cryptosdk_session_set_commitment_policy Funktion mit dem COMMITMENT_POLICY_FORBID_ENCRYPT_ALLOW_DECRYPT Commitment-Policy-Wert aufrufen. In den Versionen 2.0. x und höher ist der Aufruf dieser Funktion optional und akzeptiert alle gültigen Werte. Die Standard-Commitment-Richtlinie für Versionen 2.0. x und höher 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

Der require-encrypt-require-decrypt Wert ist die Standard-Commitment-Richtlinie in allen Versionen von AWS Encryption SDK for. NET. Sie können es als bewährte Methode explizit festlegen, es ist jedoch nicht erforderlich. Wenn Sie jedoch das AWS Encryption SDK für verwenden. NETUm Chiffretext zu entschlüsseln, der mit einer Implementierung von AWS Encryption SDK Without Key Commitment in einer anderen Sprache verschlüsselt wurde, müssen Sie den Wert der Commitment-Richtlinie auf oder ändern. REQUIRE_ENCRYPT_ALLOW_DECRYPT FORBID_ENCRYPT_ALLOW_DECRYPT Andernfalls schlagen Versuche, den Chiffretext zu entschlüsseln, fehl.

In der Form. AWS Encryption SDK NET, Sie legen die Verpflichtungsrichtlinie für eine Instanz von fest AWS Encryption SDK. Instanziieren Sie ein AwsEncryptionSdkConfig Objekt mit einem CommitmentPolicy Parameter und verwenden Sie das Konfigurationsobjekt, um die Instanz zu erstellen. AWS Encryption SDK Rufen Sie dann die Decrypt() Methoden Encrypt() und der konfigurierten AWS Encryption SDK Instanz auf.

In diesem Beispiel wird die Commitment-Richtlinie auf 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 ParameterCLI, um eine Verpflichtungsrichtlinie in der AWS Verschlüsselung festzulegen. Dieser Parameter wurde in 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 dem forbid-encrypt-allow-decrypt Wert erforderlich. Andernfalls ist der --commitment-policy Parameter ungültig.

In den Versionen 2.1. x und höher ist der --commitment-policy Parameter optional und hat standardmäßig den require-encrypt-require-decrypt Wert, der keinen Chiffretext verschlüsselt oder entschlüsselt, der ohne Schlüsselzuweisung verschlüsselt wurde. Wir empfehlen jedoch, dass Sie die Commitment-Richtlinie explizit in allen Verschlüsseln und Entschlüsseln festlegen, um die Wartung und Fehlerbehebung zu erleichtern.

In diesem Beispiel wird die Commitment-Richtlinie festgelegt. Außerdem wird der --wrapping-keys Parameter verwendet, der den --master-keys Parameter ab Version 1.8 ersetzt. x. Details hierzu finden Sie unter Aktualisierung der AWS KMS Hauptschlüsselanbieter. 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 von AWS-Verschlüsselungs-SDK for Java, Sie legen die Commitment-Richtlinie für Ihre Instanz von festAwsCrypto, dem Objekt, das den AWS Encryption SDK Client darstellt. Diese Commitment-Richtlinieneinstellung gilt für alle Verschlüsselungs- und Entschlüsselungsvorgänge, die auf diesem Client aufgerufen werden.

Der AwsCrypto() Konstruktor ist in der neuesten Version 1 veraltet. x-Versionen von AWS-Verschlüsselungs-SDK for Java und wurden in Version 2.0 entfernt. x. Es wird durch eine neue Builder Klasse, eine Builder.withCommitmentPolicy() Methode und den CommitmentPolicy Aufzählungstyp ersetzt.

In der letzten 1. x-Versionen, die Builder Klasse benötigt die Builder.withCommitmentPolicy() Methode und das CommitmentPolicy.ForbidEncryptAllowDecrypt Argument. Ab Version 2.0. x, die Builder.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 von AWS-Verschlüsselungs-SDK for JavaScript, Sie können die Commitment-Richtlinie festlegen, wenn Sie die neue buildClient Funktion aufrufen, die einen AWS Encryption SDK Client instanziiert. Die buildClient Funktion verwendet einen Aufzählungswert, der Ihre Commitment-Richtlinie darstellt. Sie gibt aktualisierte decrypt Funktionen encrypt und Funktionen zurück, die Ihre Verpflichtungsrichtlinie beim Verschlüsseln und Entschlüsseln durchsetzen.

In der letzten Version 1. x-Versionen, die buildClient Funktion benötigt das CommitmentPolicy.FORBID_ENCRYPT_ALLOW_DECRYPT Argument. Ab Version 2.0. x, das Argument der Commitment-Richtlinie ist optional und der Standardwert istCommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT.

Der Code für Node.js und der 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 einem AWS KMS Schlüsselbund verschlüsselt. Die neue buildClient Funktion setzt die Commitment-Richtlinie aufFORBID_ENCRYPT_ALLOW_DECRYPT, den Standardwert in der letzten Version 1. x Versionen. Das Upgrade encrypt und die decrypt Funktionen, die buildClient zurückgegeben werden, setzen die von Ihnen festgelegte Verpflichtungsrichtlinie 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 von AWS-Verschlüsselungs-SDK for Python, Sie legen die Commitment-Richtlinie für Ihre Instanz von festEncryptionSDKClient, einem neuen Objekt, das den AWS Encryption SDK Client darstellt. Die von Ihnen festgelegte Commitment-Richtlinie gilt für alle decrypt Aufrufe encrypt und Aufrufe, die diese Instanz des Clients verwenden.

In der letzten Version 1. X-Versionen, der EncryptionSDKClient Konstruktor benötigt den CommitmentPolicy.FORBID_ENCRYPT_ALLOW_DECRYPT Aufzählungswert. Ab Version 2.0. x, das Argument der Commitment-Richtlinie ist optional und der Standardwert istCommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT.

In diesem Beispiel wird der neue EncryptionSDKClient Konstruktor verwendet und die Commitment-Richtlinie auf 1.7 gesetzt. x Standardwert. Der Konstruktor instanziiert einen Client, der den darstellt. AWS Encryption SDK Wenn Sie die stream Methoden encryptdecrypt, oder auf diesem Client aufrufen, setzen sie die von Ihnen festgelegte Commitment-Richtlinie durch. In diesem Beispiel wird auch der neue Konstruktor für die StrictAwsKmsMasterKeyProvider Klasse verwendet, der festlegt, AWS KMS keys wann verschlüsselt und entschlüsselt werden soll.

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 )