Impostazione della politica di impegno - AWS Encryption SDK

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Impostazione della politica di impegno

L'impegno chiave garantisce che i dati crittografati vengano sempre decrittografati con lo stesso testo in chiaro. Per fornire questa proprietà di sicurezza, a partire dalla versione 1.7. x,AWS Encryption SDK utilizza nuove suite di algoritmi con impegno chiave. Per determinare se i dati sono crittografati e decrittografati con Key Commitment, utilizza l'impostazione di configurazione della politica di impegno. La crittografia e la decrittografia dei dati con impegno chiave è una proceduraAWS Encryption SDK consigliata.

La definizione di una politica di impegno è una parte importante della seconda fase del processo di migrazione: la migrazione dalla più recente 1. x versioni delleAWS Encryption SDK due versioni 2.0. x e versioni successive. Dopo aver impostato e modificato la politica di impegno, assicurati di testare accuratamente l'applicazione prima di distribuirla in produzione. Per indicazioni sulla migrazione, consultaCome migrare e implementare ilAWS Encryption SDK.

L'impostazione della politica di impegno ha tre valori validi nelle versioni 2.0. x e versioni successive. Al più recente 1. versioni x (a partire dalla versione 1.7. x), soloForbidEncryptAllowDecrypt è valido.

  • ForbidEncryptAllowDecrypt—AWS Encryption SDK Non possono cifrare con un impegno chiave. Può decrittografare i testi cifrati con o senza impegno chiave.

    Al più recente 1. x versioni, questo è l'unico valore valido. Garantisce che non si esegua la crittografia con un impegno chiave finché non si è completamente preparati a decifrare con un impegno chiave. L'impostazione del valore impedisce esplicitamente che la politica di impegno venga modificata automaticamenterequire-encrypt-require-decrypt quando si esegue l'aggiornamento alla versione 2.0. x o versioni successive. Puoi invece migrare la tua politica di impegno in più fasi.

  • RequireEncryptAllowDecrypt— CrittografaAWS Encryption SDK sempre con impegno chiave. Può decrittografare i testi cifrati con o senza impegno chiave. Questo valore viene aggiunto nella versione 2.0. x.

  • RequireEncryptRequireDecrypt— Crittografa e decrittografaAWS Encryption SDK sempre con impegno chiave. Questo valore viene aggiunto nella versione 2.0. x. È il valore predefinito nelle versioni 2.0. x e versioni successive.

Al più recente 1. x versioni, l'unico valore valido della politica di impegno èForbidEncryptAllowDecrypt. Dopo aver effettuato la migrazione alla versione 2.0. x o successivamente, puoi modificare la tua politica di impegno gradualmente man mano che sei pronto. Non aggiornate la vostra politica di impegnoRequireEncryptRequireDecrypt fino a quando non siete certi di non avere messaggi criptati senza impegno chiave.

Questi esempi mostrano come impostare la politica di impegno nella versione più recente 1. versioni x e nelle versioni 2.0. x e versioni successive. La tecnica dipende dal linguaggio di programmazione utilizzato.

Ulteriori informazioni sulla migrazione

PerSDK di crittografia AWS per JavaSDK di crittografia AWS per Python, e per la CLI diAWS crittografia, scopri le modifiche necessarie ai provider di chiavi master inAggiornamento dei provider di chiaviAWS KMS principali.

PerSDK di crittografia AWS per C eSDK di crittografia AWS per JavaScript, scopri un aggiornamento opzionale dei portachiavi inAggiornamento in corsoAWS KMSportachiavi.

Come impostare la tua politica di impegno

La tecnica utilizzata per impostare la politica di impegno varia leggermente a seconda dell'implementazione linguistica. In questi esempi viene mostrato come fare. Prima di modificare la politica di impegno, rivedi l'approccio in più fasi inCome migrare e implementare.

C

A partire dalla versione 1.7. x di esseSDK di crittografia AWS per C, si utilizza laaws_cryptosdk_session_set_commitment_policy funzione per impostare la politica di impegno per le sessioni di crittografia e decrittografia. La politica di impegno impostata si applica a tutte le operazioni di crittografia e decrittografia eseguite in quella sessione.

Leaws_cryptosdk_session_new_from_cmm funzioniaws_cryptosdk_session_new_from_keyring and sono obsolete nella versione 1.7. x e rimosso nella versione 2.0. x. Queste funzioni vengono sostituite daaws_cryptosdk_session_new_from_cmm_2 funzioniaws_cryptosdk_session_new_from_keyring_2 e che restituiscono una sessione.

Quando si utilizzaaws_cryptosdk_session_new_from_keyring_2 eaws_cryptosdk_session_new_from_cmm_2 al più recente 1. x versioni, è necessario chiamare laaws_cryptosdk_session_set_commitment_policy funzione con il valore della politica diCOMMITMENT_POLICY_FORBID_ENCRYPT_ALLOW_DECRYPT impegno. Nelle versioni 2.0. x e versioni successive, la chiamata a questa funzione è facoltativa e accetta tutti i valori validi. La politica di impegno predefinita per le versioni 2.0. x e dopo lo èCOMMITMENT_POLICY_REQUIRE_ENCRYPT_REQUIRE_DECRYPT.

Per un esempio completo, vedi 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

Ilrequire-encrypt-require-decrypt valore è la politica di impegno predefinita in tutte le versioniAWS Encryption SDK di for.NET. È possibile impostarla in modo esplicito come best practice, ma non sia necessario. Tuttavia, se si utilizza for.NETAWS Encryption SDK per decrittografare il testo cifrato con un'implementazione in un'altra lingua dell'impegnoAWS Encryption SDK without key, è necessario modificare il valore della politica di impegno inREQUIRE_ENCRYPT_ALLOW_DECRYPT orFORBID_ENCRYPT_ALLOW_DECRYPT. In caso contrario, i tentativi di decrittografare il testo cifrato hanno esito negativo.

InAWS Encryption SDK for.NET, si imposta la politica di impegno su un'istanza diAWS Encryption SDK. Crea un'istanza di unAwsEncryptionSdkConfig oggetto con unCommitmentPolicy parametro e usa l'oggetto di configurazione per creare l'AWS Encryption SDKistanza. Quindi, chiama iDecrypt() metodiEncrypt() and dell'AWS Encryption SDKistanza configurata.

Questo esempio definisce la politica di impegno perrequire-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

Per impostare una politica di impegno nella CLI diAWS crittografia, utilizza il--commitment-policy parametro. Questo parametro è stato introdotto nella versione 1.8. x.

Al più recente 1. versione x, quando si utilizza il--wrapping-keys parametro in un--decrypt comando--encrypt or, è necessario un--commitment-policy parametro con ilforbid-encrypt-allow-decrypt valore. Altrimenti, il--commitment-policy parametro non è valido.

Nelle versioni 2.1. x e versioni successive, il--commitment-policy parametro è facoltativo e il valore predefinito è ilrequire-encrypt-require-decrypt valore, che non crittografa o decrittograferà alcun testo cifrato senza l'impegno della chiave. Si consiglia tuttavia di impostare la politica degli impegni in modo esplicito in tutte le chiamate di cifrare e decrittografare.

Questo esempio definisce la politica di impegno. Utilizza anche il--wrapping-keys parametro che sostituisce il--master-keys parametro a partire dalla versione 1.8. x. Per informazioni dettagliate, consultare Aggiornamento dei provider di chiaviAWS KMS principali. Per esempi completi, vedereEsempi diAWSCLI di crittografia.

\\ 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 partire dalla versione 1.7. x delSDK di crittografia AWS per Java, hai impostato la politica di impegno sulla tua istanza dell'AwsCryptooggetto che rappresenta ilAWS Encryption SDK cliente. Questa impostazione della politica di impegno si applica a tutte le operazioni di crittografia e decrittografia eseguite su quel client.

IlAwsCrypto() costruttore è obsoleto al più recente 1. le versioni x dellaSDK di crittografia AWS per Java e vengono rimosse nella versione 2.0. x. Viene sostituito da una nuovaBuilder classe, unBuilder.withCommitmentPolicy() metodo e il tipoCommitmentPolicy enumerato.

Al più recente 1. x versioni, laBuilder classe richiede ilBuilder.withCommitmentPolicy() metodo e l'CommitmentPolicy.ForbidEncryptAllowDecryptargomento. A partire dalla versione 2.0. x, ilBuilder.withCommitmentPolicy() metodo è facoltativo; il valore predefinito èCommitmentPolicy.RequireEncryptRequireDecrypt.

Per un esempio completo, SetCommitmentPolicyExamplevedi.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 partire dalla versione 1.7. x di essiSDK di crittografia AWS per JavaScript, puoi impostare la politica di impegno quando chiami la nuovabuildClient funzione che istanzia unAWS Encryption SDK client. LabuildClient funzione assume un valore enumerato che rappresenta la tua politica di impegno. Restituisce aggiornamentiencrypt edecrypt funziona in modo da far rispettare la politica di impegno durante la crittografia e la decrittografia.

Al più recente 1. x versioni, labuildClient funzione richiede l'CommitmentPolicy.FORBID_ENCRYPT_ALLOW_DECRYPTargomento. A partire dalla versione 2.0. x, l'argomento della politica di impegno è facoltativo e il valore predefinito èCommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT.

Il codice per Node.js e il browser sono identici per questo scopo, tranne per il fatto che il browser necessita di una dichiarazione per impostare le credenziali.

L'esempio seguente crittografa i dati con unAWS KMS portachiavi. La nuovabuildClient funzione imposta la politica di impegno suFORBID_ENCRYPT_ALLOW_DECRYPT, il valore predefinito più recente 1. 2 versioni. Gli aggiornamentiencrypt e ledecrypt funzioni chebuildClient restituisci applicano la politica di impegno che hai impostato.

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 partire dalla versione 1.7. x delSDK di crittografia AWS per Python, hai impostato la politica di impegno sulla tua istanza diEncryptionSDKClient, un nuovo oggetto che rappresenta ilAWS Encryption SDK cliente. La politica di impegno impostata si applica a tutteencrypt ledecrypt chiamate che utilizzano quell'istanza del client.

Al più recente 1. x versioni, ilEncryptionSDKClient costruttore richiede il valoreCommitmentPolicy.FORBID_ENCRYPT_ALLOW_DECRYPT enumerato. A partire dalla versione 2.0. x, l'argomento della politica di impegno è facoltativo e il valore predefinito èCommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT.

Questo esempio utilizza il nuovoEncryptionSDKClient costruttore e imposta la politica di impegno sulla 1.7. x valore predefinito. Il costruttore crea un client che rappresenta ilAWS Encryption SDK. Quando chiami iencryptstream metodi o o su questo cliente, questi applicano la politica di impegno che hai impostato.decrypt Questo esempio utilizza anche il nuovo costruttore per laStrictAwsKmsMasterKeyProvider classe, che specificaAWS KMS keys quando crittografare e decrittografare.

Per un esempio completo, vedere 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 )