- C
-
을 버전 1.7부터 업데이트 x 중AWS Encryption SDK for C,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
함수로 대체됩니다.
최신aws_cryptosdk_session_new_from_cmm_2
버전에서aws_cryptosdk_session_new_from_keyring_2
및 를 사용하는 경우 1. x 버전에서는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 SDKfor .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암호화 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부터 시작하는--master-keys
매개 변수를 대체하는 매개 변수를 사용합니다.--wrapping-keys
x. 세부 정보는 AWS KMS마스터 키 제공자 업데이트을 참조하세요. 전체 예제는 을 참조하십시오다음 예시AWS암호화 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 for JavaAWS Encryption SDK 클라이언트를 나타내는 객체인 의AwsCrypto
인스턴스에 커밋 정책을 설정합니다. 이 약정 정책 설정은 해당 클라이언트에서 호출되는 모든 암호화 및 암호 해독 작업에 적용됩니다.
AwsCrypto()
생성자는 최신 1에서 더 이상 사용되지 않습니다. AWS Encryption SDK for Java및 의 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
-
을 버전 1.7부터 업데이트 x 중AWS Encryption SDK for JavaScriptAWS 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
함수는 약정 정책을 최신 1의 기본값인 로 설정합니다.FORBID_ENCRYPT_ALLOW_DECRYPT
엑스 버전. 업그레이드된encrypt
decrypt
함수와buildClient
반환되는 함수는 설정한 약정 정책을 적용합니다.
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 for PythonAWS Encryption SDK 클라이언트를 나타내는 새 객체의 인스턴스에 커밋 정책을 설정합니다.EncryptionSDKClient
설정한 약정 정책은 해당 클라이언트 인스턴스를 사용하는 모든decrypt
통화encrypt
및 통화에 적용됩니다.
최근 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
메서드를 호출하면 설정한 약정 정책이 적용됩니다. 이 예제에서는 또한StrictAwsKmsMasterKeyProvider
클래스의 새 생성자를 사용합니다. 이 생성자는 암호화 및 암호 해독AWS KMS keys 시기를 지정합니다.
전체 예제는 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
)