- C
-
AWS Encryption SDK for C 1.7.x 버전부터는 aws_cryptosdk_session_set_commitment_policy
함수를 사용하여 암호화 및 복호화 세션에 대한 커밋 정책을 설정합니다. 설정한 커밋 정책은 해당 세션에서 호출된 모든 암호화 및 복호화 작업에 적용됩니다.
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 for .NET 버전의 기본 커밋 정책입니다. 모범 사례로 명시적으로 설정할 수 있지만 필수 사항은 아닙니다. 그러나 AWS Encryption SDK for .NET을 사용하여 AWS Encryption SDK의 다른 언어 구현에서 키 커밋 없이 암호화된 사이퍼텍스트를 복호화하려면 커밋 정책 값을 REQUIRE_ENCRYPT_ALLOW_DECRYPT
또는 FORBID_ENCRYPT_ALLOW_DECRYPT
로 변경해야 합니다. 그러지 않으면 사이퍼텍스트 복호화 시도가 실패합니다.
AWS Encryption SDK for .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 Encryption CLI에서 커밋 정책을 설정하려면 --commitment-policy
파라미터를 사용하세요. 이 파라미터는 버전 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 버전부터 --wrapping-keys
파라미터를 대체하는 --master-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
-
AWS Encryption SDK for Java 1.7.x 버전부터 AWS Encryption SDK 클라이언트를 나타내는 객체인 AwsCrypto
인스턴스에 커밋 정책을 설정합니다. 이 커밋 정책 설정은 해당 클라이언트에서 호출된 모든 암호화 및 복호화 작업에 적용됩니다.
AwsCrypto()
생성자는 AWS Encryption SDK for Java 최신 1.x 버전에서 더 이상 사용되지 않으며 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
-
AWS Encryption SDK for JavaScript 1.7.x 버전부터는 AWS Encryption SDK 클라이언트를 인스턴스화하는 새 buildClient
함수를 호출할 때 커밋 정책을 설정할 수 있습니다. 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
-
AWS Encryption SDK for Python 1.7.x 버전부터 AWS Encryption SDK 클라이언트를 나타내는 새로운 객체인 EncryptionSDKClient
인스턴스에 커밋 정책을 설정합니다. 설정한 커밋 정책은 해당 클라이언트 인스턴스를 사용하는 모든 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
)