- C
-
À partir de la version 1.7. x deKit SDK de chiffrement AWS pour C, vous utilisez laaws_cryptosdk_session_set_commitment_policy
fonction pour définir la politique d'engagement pour vos sessions de chiffrement et de déchiffrement. La politique d'engagement que vous définissez s'applique à toutes les opérations de chiffrement et de déchiffrement appelées au cours de cette session.
Lesaws_cryptosdk_session_new_from_cmm
fonctionsaws_cryptosdk_session_new_from_keyring
et sont obsolètes dans la version 1.7. x et supprimé dans la version 2.0. x. Ces fonctions sont remplacées paraws_cryptosdk_session_new_from_keyring_2
desaws_cryptosdk_session_new_from_cmm_2
fonctions qui renvoient une session.
Lorsque vous utilisez leaws_cryptosdk_session_new_from_keyring_2
etaws_cryptosdk_session_new_from_cmm_2
dans la dernière version 1. versions x, vous devez appeler laaws_cryptosdk_session_set_commitment_policy
fonction avec la valeur de la politique d'COMMITMENT_POLICY_FORBID_ENCRYPT_ALLOW_DECRYPT
engagement. Dans les versions dans les versions dans la 2.0 x et versions ultérieures, l'appel de cette fonction est facultatif et prend toutes les valeurs valides. La politique d'engagement par défaut pour les versions 2.0. x et les versions ultérieures sontCOMMITMENT_POLICY_REQUIRE_ENCRYPT_REQUIRE_DECRYPT
.
Pour obtenir un exemple complet, veuillez consulter 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
Larequire-encrypt-require-decrypt
valeur est la politique d'engagement par défaut dans toutes les versions deAWS Encryption SDK pour .NET. Vous pouvez l'lorsqu'il n'utilisez pas l'lorsqu'il n'utilisez pas l'lorsqu'il n'utilisez pas l'lorsqu'il n'utilisez pas l'lorsqu'il n'utilisez pas l' Toutefois, si vous utilisez leAWS Encryption SDK pour .NET pour déchiffrer un texte chiffré qui a été chiffré par une implémentation dans un autre langage de l'engagementAWS Encryption SDK sans clé, vous devez remplacer la valeur de la politique d'engagement parREQUIRE_ENCRYPT_ALLOW_DECRYPT
ouFORBID_ENCRYPT_ALLOW_DECRYPT
. Dans le cas contraire, les tentatives de déchiffrement du texte chiffré échoueront.
Dans leAWS Encryption SDK pour .NET, vous définissez la politique d'engagement sur une instance deAWS Encryption SDK. Instanciez unAwsEncryptionSdkConfig
objet avec unCommitmentPolicy
paramètre et utilisez l'objet de configuration pour créer l'AWS Encryption SDKinstance. Appelez ensuite lesDecrypt()
méthodesEncrypt()
et de l'AWS Encryption SDKinstance configurée.
Cet exemple définit la politique d'engagement à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
-
Pour définir une politique d'engagement dans la CLI deAWS chiffrement, utilisez le--commitment-policy
paramètre. Ce paramètre a été introduit dans la version 1.8. x.
Dans la dernière version 1. version x, lorsque vous utilisez le--wrapping-keys
paramètre dans une--decrypt
commande--encrypt
ou, un--commitment-policy
paramètre avec laforbid-encrypt-allow-decrypt
valeur est requis. Dans le cas contraire, le--commitment-policy
paramètre n'est pas valide.
Dans les versions 2.1. x et versions ultérieures, le--commitment-policy
paramètre est facultatif et prend par défaut larequire-encrypt-require-decrypt
valeur, qui ne chiffrera ni ne déchiffrera aucun texte chiffré sans saisie de clé. Cependant, nous vous recommandons de définir la politique d'engagement à l'aide de la maintenance et du dépannage.
Cet exemple définit la politique d'engagement. Il utilise également le--wrapping-keys
paramètre qui remplace le--master-keys
paramètre à partir de la version 1.8. x. Pour plus de détails, consultez Mise à jourAWS KMS des fournisseurs de clés principales. Pour des exemples complets, reportez-vous à la sectionExemples deAWSCLI de chiffrement.
\\ 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
-
À partir de la version 1.7. x duKit SDK de chiffrement AWS pour Java, vous définissez la politique d'engagement sur votre instance deAwsCrypto
, l'objet qui représente leAWS Encryption SDK client. Ce paramètre de politique d'engagement s'applique à toutes les opérations de chiffrement et de déchiffrement appelées sur ce client.
LeAwsCrypto()
constructeur est obsolète dans la dernière version 1. les versions x duKit SDK de chiffrement AWS pour Java et sont supprimées dans la version 2.0. x. Elle est remplacée par une nouvelleBuilder
classe, une nouvelleBuilder.withCommitmentPolicy()
méthode et le typeCommitmentPolicy
énuméré.
Dans la dernière version 1. versions x, laBuilder
classe nécessite laBuilder.withCommitmentPolicy()
méthode et l'CommitmentPolicy.ForbidEncryptAllowDecrypt
argument. À partir de la version dans la version dans la version x, laBuilder.withCommitmentPolicy()
méthode est facultative ; la valeur par défaut estCommitmentPolicy.RequireEncryptRequireDecrypt
.
Pour un exemple complet, consultez 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
-
À partir de la version 1.7. x deKit SDK de chiffrement AWS pour JavaScript, vous pouvez définir la politique d'engagement lorsque vous appelez la nouvellebuildClient
fonction qui instancie unAWS Encryption SDK client. LabuildClient
fonction prend une valeur énumérée qui représente votre politique d'engagement. Il renvoie des mises à jourencrypt
etdecrypt
des fonctions qui appliquent votre politique d'engagement lorsque vous cryptez et déchiffrez.
Dans la dernière version 1. versions x, labuildClient
fonction nécessite l'CommitmentPolicy.FORBID_ENCRYPT_ALLOW_DECRYPT
argument. À partir de la version dans la version dans la version x, l'argument de la politique d'engagement est facultatif et la valeur par défaut estCommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT
.
Le code pour Node.js et le navigateur sont identiques à cette fin, sauf que le navigateur a besoin d'une instruction pour définir les informations d'identification.
L'exemple suivant chiffre des données à l'aide d'unAWS KMS jeu de clés. La nouvellebuildClient
fonction définit la politique d'engagement àFORBID_ENCRYPT_ALLOW_DECRYPT
la valeur par défaut la plus récente de 1. 2 versions. La mise à niveauencrypt
etdecrypt
les fonctionsbuildClient
renvoyées appliquent la politique d'engagement que vous avez définie.
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
-
À partir de la version 1.7. x duKit SDK de chiffrement AWS pour Python, vous définissez la politique d'engagement sur votre instance deEncryptionSDKClient
, un nouvel objet qui représente leAWS Encryption SDK client. La politique d'engagement que vous définissez s'applique à tousencrypt
lesdecrypt
appels utilisant cette instance du client.
Dans la dernière version 1. versions x, leEncryptionSDKClient
constructeur a besoin de la valeurCommitmentPolicy.FORBID_ENCRYPT_ALLOW_DECRYPT
énumérée. À partir de la version dans la version dans la version x, l'argument de la politique d'engagement est facultatif et la valeur par défaut estCommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT
.
Cet exemple utilise le nouveauEncryptionSDKClient
constructeur et définit la politique d'engagement sur le 1.7. x valeur par défaut. Le constructeur instancie un client qui représente leAWS Encryption SDK. Lorsque vous appelez lesstream
méthodesencrypt
decrypt
, ou sur ce client, elles appliquent la politique d'engagement que vous avez définie. Cet exemple utilise également le nouveau constructeur de laStrictAwsKmsMasterKeyProvider
classe, qui spécifieAWS KMS keys lors du chiffrement et du déchiffrement.
Pour un exemple complet, consultez 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
)