- C
-
A partir da versão 1.7.x do AWS Encryption SDK for C, a função aws_cryptosdk_session_set_commitment_policy
passou a ser usada para definir a política de compromisso em nas suas sessões de criptografia e descriptografia. A política de compromisso que você define se aplica a todas as operações de criptografia e descriptografia chamadas na sua sessão.
As funções aws_cryptosdk_session_new_from_keyring
e aws_cryptosdk_session_new_from_cmm
foram descontinuadas na versão 1.7.x e foram removidas na versão 2.0.x.. Essas funções foram substituídas pelas funções aws_cryptosdk_session_new_from_keyring_2
e aws_cryptosdk_session_new_from_cmm_2
que retornam uma sessão.
Ao usar aws_cryptosdk_session_new_from_keyring_2
e aws_cryptosdk_session_new_from_cmm_2
na versão 1.x mais recentes, você deve chamar a função aws_cryptosdk_session_set_commitment_policy
com o valor da política de compromisso COMMITMENT_POLICY_FORBID_ENCRYPT_ALLOW_DECRYPT
. Nas versões 2.0.x e posteriores, chamar essa função é opcional, e ela aceita todos os valores válidos. A política de compromisso padrão para as versões 2.0. x e posteriores é COMMITMENT_POLICY_REQUIRE_ENCRYPT_REQUIRE_DECRYPT
.
Para obter um exemplo completo, consulte 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
O valor require-encrypt-require-decrypt
é a política de compromisso padrão em todas as versões do AWS Encryption SDK para.NET. Você pode definir isso explicitamente como uma prática recomendadas, mas isso não é necessário. No entanto, se estiver usando o AWS Encryption SDK para .NET para descriptografar texto cifrado criptografado por outra implementação de linguagem do AWS Encryption SDK sem confirmação de chave, você precisará alterar o valor da política de compromisso para REQUIRE_ENCRYPT_ALLOW_DECRYPT
ou FORBID_ENCRYPT_ALLOW_DECRYPT
. Caso contrário, ocorrerá uma falha na tentativa de descriptografar o texto cifrado.
No AWS Encryption SDK para.NET, a política de compromisso deve ser definida em uma instância do AWS Encryption SDK. Instancie um objeto AwsEncryptionSdkConfig
com um parâmetro CommitmentPolicy
e use o objeto de configuração para criar a instância do AWS Encryption SDK. Em seguida, chame os métodos Encrypt()
e Decrypt()
da instância do AWS Encryption SDK configurada.
Este exemplo define a política de compromisso como require-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
-
Para definir uma política de compromisso na CLI de criptografia da AWS, use o parâmetro --commitment-policy
. Esse parâmetro foi apresentado na versão 1.8.x..
No versão 1.x mais recente, quando você usa o parâmetro --wrapping-keys
em um comando --encrypt
ou --decrypt
, é necessário um parâmetro --commitment-policy
com o valor forbid-encrypt-allow-decrypt
. Caso contrário, o parâmetro --commitment-policy
será inválido.
Nas versões 2.1.x e posteriores, o parâmetro --commitment-policy
é opcional e usa como padrão o valor require-encrypt-require-decrypt
, que não criptografará nem descriptografará nenhum texto cifrado criptografado sem confirmação de chave. No entanto, recomendamos definir a política de compromisso de forma explícita em todas as chamadas de criptografia e descriptografia, para ajudar na manutenção e na solução de problemas.
Este exemplo define a política de compromisso como . Ele também usa o parâmetro --wrapping-keys
, que substituiu o parâmetro --master-keys
a partir da versão 1.8.x.. Para obter mais detalhes, consulte Como atualizar provedores de chaves mestras do AWS KMS. Para obter exemplos completos, consulte Exemplos da CLI de criptografia da AWS.
\\ 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
-
A partir da versão 1.7. x do AWS Encryption SDK for Java, a política de compromisso passou a ser definida na sua instância do objeto AwsCrypto
que representa o cliente de AWS Encryption SDK. Essa definição política de compromisso se aplica a todas as operações de criptografia e descriptografia chamadas nesse cliente.
O construtor AwsCrypto()
foi descontinuado na versões 1.x do AWS Encryption SDK for Java mais recentes e foi removido versão 2.0. x.. Ele foi substituído por uma nova classe Builder
, um método Builder.withCommitmentPolicy()
e pelo tipo enumerado CommitmentPolicy
.
Nas versões 1.x mais recentes, a classe Builder
requer o método Builder.withCommitmentPolicy()
e o argumentoCommitmentPolicy.ForbidEncryptAllowDecrypt
. A partir da versão 2.0.x, o método Builder.withCommitmentPolicy()
é opcional. O valor padrão é CommitmentPolicy.RequireEncryptRequireDecrypt
.
Para obter um exemplo completo, consulte 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
-
A partir da versão 1.7.x do AWS Encryption SDK para JavaScript, é possível definir a política de compromisso ao chamar a nova função buildClient
que instancia um cliente AWS Encryption SDK. A função buildClient
assume um valor enumerado que representa sua política de compromisso. Ela retorna as funções encrypt
e decrypt
atualizadas, que reforçam sua política de compromisso quando você criptografa e descriptografa.
Nas versões 1.x mais recentes, a função buildClient
requer o argumento CommitmentPolicy.FORBID_ENCRYPT_ALLOW_DECRYPT
. A partir da versão 2.0.x, o argumento da política de compromisso é opcional, e o valor padrão é CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT
.
O código para Node.js e o navegador são idênticos para essa finalidade, exceto que o navegador precisa de uma instrução para definir as credenciais.
O exemplo a seguir criptografa os dados com um token de autenticação do AWS KMS. A nova função buildClient
define a política de compromisso comoFORBID_ENCRYPT_ALLOW_DECRYPT
, o valor padrão nas versões 1.x. mais recentes. A funções encrypt
e decrypt
atualizadas retornadas por buildClient
reforçam a política de compromisso que você definiu.
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
-
A partir da versão 1.7. x do AWS Encryption SDK for Python, a política de compromisso passou a ser definida na sua instância de um novo objeto EncryptionSDKClient
que representa o cliente AWS Encryption SDK. A política de compromisso que você define se aplica a todas as chamadas encrypt
e decrypt
que usam essa instância do cliente.
Nas versões 1.x mais recentes, o construtor EncryptionSDKClient
requer o valor enumerado CommitmentPolicy.FORBID_ENCRYPT_ALLOW_DECRYPT
. A partir da versão 2.0.x, o argumento da política de compromisso é opcional, e o valor padrão é CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT
.
Este exemplo usa o novo construtorEncryptionSDKClient
e define a política de compromisso como o valor padrão de 1.7.x. O construtor instancia um cliente que representa o AWS Encryption SDK. Quando você chama os métodos encrypt
,decrypt
ou stream
desse cliente, eles aplicam a política de compromisso que você definiu. Este exemplo também usa o novo construtor da classe StrictAwsKmsMasterKeyProvider
, que especifica AWS KMS keys ao criptografar e descriptografar.
Para obter um exemplo completo, consulte 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
)