- C
-
의 버전 1.7.x부터는 aws_cryptosdk_session_set_commitment_policy
함수를 AWS Encryption SDK for C사용하여 암호화 및 복호화 세션에서 약정 정책을 설정합니다. 설정한 커밋 정책은 해당 세션에서 호출된 모든 암호화 및 복호화 작업에 적용됩니다.
aws_cryptosdk_session_new_from_keyring
및 aws_cryptosdk_session_new_from_cmm
함수는 버전 1.7.x에서 더 이상 사용되지 않으며 버전 2.0.x에서 제거되었습니다. 이러한 함수는 세션을 반환하는 aws_cryptosdk_session_new_from_keyring_2
및 aws_cryptosdk_session_new_from_cmm_2
함수로 대체됩니다.
최신 1.x 버전에서 aws_cryptosdk_session_new_from_keyring_2
및 aws_cryptosdk_session_new_from_cmm_2
를 사용한 경우 COMMITMENT_POLICY_FORBID_ENCRYPT_ALLOW_DECRYPT
커밋 정책 값을 사용하여 aws_cryptosdk_session_set_commitment_policy
함수를 호출해야 합니다. 2.0.x 이상 버전의 경우 이 함수를 호출하는 것은 선택 사항이며 유효한 값을 모두 사용합니다. 2.0.x 이상 버전의 기본 커밋 정책은 COMMITMENT_POLICY_REQUIRE_ENCRYPT_REQUIRE_DECRYPT
입니다.
전체 예를 보려면 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
require-encrypt-require-decrypt
값은 용 AWS Encryption SDK 의 모든 버전에서 기본 약정 정책입니다NET. 모범 사례로 명시적으로 설정할 수 있지만 필수 사항은 아닙니다. 그러나 AWS Encryption SDK for NET를 사용하는 경우 키 커밋 AWS Encryption SDK 없이 의 다른 언어 구현으로 암호화된 암호 텍스트를 해독하려면 커밋 정책 값을 REQUIRE_ENCRYPT_ALLOW_DECRYPT
또는 로 변경해야 합니다FORBID_ENCRYPT_ALLOW_DECRYPT
. 그러지 않으면 사이퍼텍스트 복호화 시도가 실패합니다.
AWS Encryption SDK 의 에서 의 인스턴스에 대한 약정 정책을 NET설정합니다 AWS Encryption SDK. CommitmentPolicy
파라미터를 사용하여 AwsEncryptionSdkConfig
객체를 인스턴스화하고 구성 객체를 사용하여 AWS Encryption SDK 인스턴스를 생성합니다. 그런 다음 구성된 AWS Encryption SDK 인스턴스의 Encrypt()
및 Decrypt()
메서드를 호출합니다.
이 예에서는 커밋 정책을 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
-
AWS 암호화 에서 약정 정책을 설정하려면 --commitment-policy
파라미터를 CLI사용합니다. 이 파라미터는 버전 1.8.x에 도입되었습니다.
최신 1.x 버전의 경우 --encrypt
또는 --decrypt
명령에서 --wrapping-keys
파라미터를 사용할 때는 forbid-encrypt-allow-decrypt
값이 있는 --commitment-policy
파라미터가 필요합니다. 그러지 않으면 --commitment-policy
파라미터가 유효하지 않게 됩니다.
2.1.x 및 이상 버전에서는 --commitment-policy
파라미터가 선택 사항이며 키 커밋 없이 암호화된 사이퍼텍스트를 암호화하거나 복호화하지 않는 require-encrypt-require-decrypt
값이 기본값입니다. 하지만 유지 관리 및 문제 해결에 도움이 되도록 모든 암호화 및 복호화 호출에서 커밋 정책을 명시적으로 설정하는 것이 좋습니다.
이 예에서는 커밋 정책을 설정합니다. 또한 1.8.x 버전부터 --master-keys
파라미터를 대체하는 --wrapping-keys
파라미터를 사용합니다. 세부 정보는 AWS KMS 마스터 키 공급자 업데이트을 참조하세요. 전체 예제는 AWS Encryption CLI의 예제 섹션을 참조하세요.
\\ 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
-
의 버전 1.7.x부터 AWS Encryption SDK 클라이언트를 나타내는 객체AwsCrypto
인 인스턴스에 약정 정책을 AWS Encryption SDK for Java설정합니다. 이 커밋 정책 설정은 해당 클라이언트에서 호출된 모든 암호화 및 복호화 작업에 적용됩니다.
AwsCrypto()
생성기는 최신 1.x 버전의 에서 더 이상 사용되지 AWS Encryption SDK for Java 않으며 버전 2.0.x 에서 제거됩니다. 새 Builder
클래스, Builder.withCommitmentPolicy()
메서드, CommitmentPolicy
열거 유형으로 대체됩니다.
최신 1.x 버전의 Builder
클래스에는 Builder.withCommitmentPolicy()
메서드와 CommitmentPolicy.ForbidEncryptAllowDecrypt
인수가 필요합니다. 2.0.x 버전부터 Builder.withCommitmentPolicy()
메서드는 선택 사항이고 기본값은 CommitmentPolicy.RequireEncryptRequireDecrypt
입니다.
전체 예제는 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
-
의 버전 1.7.x부터 AWS Encryption SDK 클라이언트를 인스턴스화하는 새 buildClient
함수를 호출할 때 약정 정책을 설정할 AWS Encryption SDK for JavaScript수 있습니다. buildClient
함수는 커밋 정책을 나타내는 열거형 값을 사용합니다. 암호화 및 복호화 시 커밋 정책을 적용하는 업데이트된 encrypt
및 decrypt
함수를 반환합니다.
최신 1.x 버전에서는 buildClient
함수에 CommitmentPolicy.FORBID_ENCRYPT_ALLOW_DECRYPT
인수가 필요합니다. 2.0.x 버전부터 커밋 정책 인수는 선택 사항이고 기본값은 CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT
입니다.
브라우저에 자격 증명을 설정하려면 명령문이 필요하다는 점을 제외하면 Node.js 코드와 브라우저의 코드는 동일합니다.
다음 예제에서는 AWS KMS 키링을 사용하여 데이터를 암호화합니다. 새 buildClient
함수는 커밋 정책을 FORBID_ENCRYPT_ALLOW_DECRYPT
로 설정하며 이는 최신 1.x 버전의 기본값입니다. buildClient
에서 반환되는 업그레이드된 encrypt
및 decrypt
함수는 사용자가 설정한 커밋 정책을 적용합니다.
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
-
의 버전 1.7.x부터 AWS Encryption SDK 클라이언트를 나타내는 새 객체EncryptionSDKClient
인 의 인스턴스에 약정 정책을 AWS Encryption SDK for Python설정합니다. 설정한 커밋 정책은 해당 클라이언트 인스턴스를 사용하는 모든 encrypt
및 decrypt
호출에 적용됩니다.
최신 1.x 버전의 EncryptionSDKClient
생성자에는 CommitmentPolicy.FORBID_ENCRYPT_ALLOW_DECRYPT
열거형 값이 필요합니다. 2.0.x 버전부터 커밋 정책 인수는 선택 사항이고 기본값은 CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT
입니다.
이 예제에서는 새 EncryptionSDKClient
생성자를 사용하고 커밋 정책을 1.7.x 기본값으로 설정합니다. 생성자는 AWS Encryption SDK를 나타내는 클라이언트를 인스턴스화합니다. 이 클라이언트에서 encrypt
, decrypt
또는 stream
메서드를 호출하면 설정한 커밋 정책이 적용됩니다. 이 예제에서는 암호화 및 복호화 AWS KMS keys 시기를 지정하는 StrictAwsKmsMasterKeyProvider
클래스의 새 생성기도 사용합니다.
전체 예제는 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
)