使用 aws-encryption-sdk 在本地环境中使用上下文进行解密

问题描述

我想使用 aws_encryption_sdk python 模块使用加密消息。消息由另一个团队使用上下文进行加密。

使用 aws_encryption_sdk 的原因是通过减少每次调用 boto3 kms 客户端解密函数时 KMS 会话的数量来降低成本。但是,我似乎陷入困境并感到困惑,因为在为 EncryptionSDKClient

调用解密函数时,我找不到可以使用它的地方

我的代码如下所示:

client = aws_encryption_sdk.EncryptionSDKClient()

## try to set the botocore session for Master Key Provider
kms_kwargs= dict(key_ids=data['keyId'])
key_provider = aws_encryption_sdk.StrictAwsKmsMasterKeyProvider(**kms_kwargs)

MAX_ENTRY_AGE_SECONDS = 600.0
MAX_ENTRY_MESSAGES = 10
MAX_CACHE_SIZE = 10


cache = aws_encryption_sdk.LocalCryptoMaterialsCache(MAX_CACHE_SIZE)

caching_cmm = CachingCryptoMaterialsManager(
    master_key_provider=key_provider,cache=cache,max_age=MAX_ENTRY_AGE_SECONDS,max_messages_encrypted=MAX_ENTRY_MESSAGES
)

cycled_plaintext,decrypted_header = client.decrypt(source=base64.b64decode(data["encryptedData"]),key_provider=key_provider)

请注意,我需要在本地环境中缓存数据键。

解决方法

来自AWS Developer Guide on KMS Encryption SDK page,encryption context section

要解密数据,您需要传入加密的消息。由于 AWS 加密 SDK 可以从加密的消息标头中提取加密上下文,因此您无需单独提供加密上下文。但是,加密上下文可以帮助您确认您正在解密正确的加密消息。

还有一些验证加密上下文的代码示例,您可能会发现这些示例很有用 here