- 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_2
aws_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 alleencrypt
decrypt
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
Methodenencrypt
decrypt
, 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
)