- 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 encrypt
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 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
)