- 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
関数に置き換わります。
最新の 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 暗号化 でコミットメントポリシーを設定するには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 以降、--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 for Java、 AWS Encryption SDK クライアントを表すオブジェクトAwsCrypto
である のインスタンスにコミットメントポリシーを設定します。このコミットメントポリシーは、そのクライアントで呼び出されるすべての暗号化および復号オペレーションに適用されます。
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 for JavaScript、 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
関数は、コミットメントポリシーを最新 1.x バージョンでのデフォルト値の FORBID_ENCRYPT_ALLOW_DECRYPT
に設定します。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 for Python、 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
のいずれかのメソッドを呼び出すと、設定したコミットメントポリシーが適用されます。この例では、 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
)