- C
-
A partir de la versión 1.7. x SDK de cifrado de AWS para C, utiliza la aws_cryptosdk_session_set_commitment_policy
función para establecer la política de compromiso en sus sesiones de cifrado y descifrado. La política de compromiso que establezca se aplica a todas las operaciones de cifrado y descifrado realizadas en esa sesión.
Las funciones aws_cryptosdk_session_new_from_keyring
y aws_cryptosdk_session_new_from_cmm
están en desuso en la versión 1.7.x y se eliminaron en la versión 2.0.x. Estas funciones se sustituyen por funciones aws_cryptosdk_session_new_from_keyring_2
y aws_cryptosdk_session_new_from_cmm_2
que devuelven una sesión.
Cuando usa aws_cryptosdk_session_new_from_keyring_2
y aws_cryptosdk_session_new_from_cmm_2
en las últimas versiones 1.x, debe llamar a la función aws_cryptosdk_session_set_commitment_policy
con el valor de la política de compromiso COMMITMENT_POLICY_FORBID_ENCRYPT_ALLOW_DECRYPT
. En versiones 2.0.x y versiones posteriores, llamar a esta función es opcional y toma todos los valores válidos. La política de compromiso predeterminada para las versiones 2.0.x y versiones posteriores es COMMITMENT_POLICY_REQUIRE_ENCRYPT_REQUIRE_DECRYPT
.
Para obtener un ejemplo 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
El require-encrypt-require-decrypt
valor es la política de compromiso predeterminada en todas las versiones del AWS Encryption SDK formulario. NET. Puede configurarlo de forma explícita como práctica recomendada, pero no es necesario establecerlo. Sin embargo, si está utilizando el AWS Encryption SDK formulario. NETpara descifrar el texto cifrado en otro idioma de la implementación AWS Encryption SDK sin compromiso clave, debe cambiar el valor de la política de compromiso a o. REQUIRE_ENCRYPT_ALLOW_DECRYPT
FORBID_ENCRYPT_ALLOW_DECRYPT
De lo contrario, el intento de descifrar el texto cifrado devolverá un error.
En forma. AWS Encryption SDK NET, usted establece la política de compromiso en una instancia de AWS Encryption SDK. Cree una instancia de un AwsEncryptionSdkConfig
objeto con un CommitmentPolicy
parámetro y utilice el objeto de configuración para crear la AWS Encryption SDK instancia. A continuación, llama a los Decrypt()
métodos Encrypt()
y de la instancia configurada AWS Encryption SDK .
En este ejemplo, se establece la política de compromiso en 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 establecer una política de compromiso en el AWS cifradoCLI, utilice el --commitment-policy
parámetro. Este parámetro se introduce en la versión 1.8.x.
En la última versión 1.x, cuando se utiliza el parámetro --wrapping-keys
en un comando --encrypt
o --decrypt
, se requiere un parámetro --commitment-policy
con el valor forbid-encrypt-allow-decrypt
. De lo contrario, el parámetro --commitment-policy
no es válido.
En las versiones 2.1.x y versiones posteriores, el parámetro --commitment-policy
es opcional y tiene el valor predeterminado require-encrypt-require-decrypt
, que no cifrará ni descifrará ningún texto cifrado sin el compromiso clave. Sin embargo, recomendamos establecer la política de compromiso de forma explícita en todas las llamadas de cifrado y descifrado para facilitar el mantenimiento y la solución de problemas.
En este ejemplo se establece la política de compromiso. También usa el parámetro --wrapping-keys
que reemplaza al parámetro --master-keys
que comienza en la versión 1.8.x. Para obtener más detalles, consulte Actualización de los proveedores de claves AWS KMS maestras. Para ver ejemplos completos, consulte Ejemplos de la CLI de cifrado del 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 de la versión 1.7. x SDK de cifrado de AWS para Java, estableces la política de compromiso en tu instancia del AwsCrypto
objeto que representa al AWS Encryption SDK cliente. Esta configuración de política de compromiso se aplica a todas las operaciones de cifrado y descifrado realizadas en ese cliente.
El AwsCrypto()
constructor está obsoleto en la última versión. x versiones de SDK de cifrado de AWS para Java y se elimina en la versión 2.0. x. Se sustituye por una nueva clase Builder
, un método Builder.withCommitmentPolicy()
y el tipo CommitmentPolicy
enumerado.
En las últimas versiones 1.x, la clase Builder
requiere el método Builder.withCommitmentPolicy()
y el argumento CommitmentPolicy.ForbidEncryptAllowDecrypt
. A partir de la versión 2.0.x, el método Builder.withCommitmentPolicy()
es opcional; el valor predeterminado es CommitmentPolicy.RequireEncryptRequireDecrypt
.
Para ver un ejemplo 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 de la versión 1.7. x del SDK de cifrado de AWS para JavaScript, puede establecer la política de compromiso al llamar a la nueva buildClient
función que crea una instancia de un AWS Encryption SDK cliente. La función buildClient
toma un valor enumerado que representa su política de compromiso. Devuelve funciones actualizadas encrypt
y decrypt
que hacen cumplir su política de compromiso al cifrar y descifrar.
En las últimas versiones 1.x, la función buildClient
requiere el argumento CommitmentPolicy.FORBID_ENCRYPT_ALLOW_DECRYPT
. A partir de la versión 2.0.x, el argumento de la política de compromiso es opcional y el valor predeterminado es CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT
.
El código de Node.js y el navegador son idénticos para este propósito, excepto que el navegador necesita una declaración para establecer las credenciales.
En el siguiente ejemplo, se cifran los datos con un anillo de claves. AWS KMS La nueva función buildClient
establece la política de compromiso en FORBID_ENCRYPT_ALLOW_DECRYPT
, el valor predeterminado en las últimas versiones 1.x. Las funciones actualizadas encrypt
y decrypt
que buildClient
devuelve hacen cumplir la política de compromiso que haya establecido.
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 de la versión 1.7. x SDK de cifrado de AWS para Python, estableces la política de compromiso en tu instancia deEncryptionSDKClient
, un nuevo objeto que representa al AWS Encryption SDK cliente. La política de compromiso que establezca se aplica a todas las llamadas a encrypt
y decrypt
que usen esa instancia del cliente.
En las últimas versiones 1x, el constructor EncryptionSDKClient
requiere el valor CommitmentPolicy.FORBID_ENCRYPT_ALLOW_DECRYPT
enumerado. A partir de la versión 2.0.x, el argumento de la política de compromiso es opcional y el valor predeterminado es CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT
.
En este ejemplo, se utiliza el nuevo constructor EncryptionSDKClient
y se establece la política de compromiso en 1.7.x valor predeterminado. El constructor crea una instancia de un cliente que representa el AWS Encryption SDK. Cuando llama a los métodos encrypt
, decrypt
o stream
de este cliente, estos aplican la política de compromiso que haya establecido. En este ejemplo también se utiliza el nuevo constructor de la StrictAwsKmsMasterKeyProvider
clase, que especifica AWS KMS keys cuándo se cifra y se descifra.
Para ver un ejemplo 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
)