3

一对 Amazon Lambda 将对称加密和解密一小段应用程序数据。我想使用 Amazon KMS 来促进这一点,因为它解决了秘密存储和密钥轮换等问题。

Amazon KMS 开发人员指南指出:

这些操作旨在加密和解密数据密钥。他们在加密操作中使用 AWS KMS 客户主密钥 (CMK),并且不能接受超过 4 KB(4096 字节)的数据。尽管您可能会使用它们来加密少量数据,例如密码或 RSA 密钥,但它们并非旨在加密应用程序数据。

它继续推荐使用AWS Encryption SDKAmazon S3 加密客户端来加密应用程序数据。

尽管AWS 加密 SDK 列出的优势显而易见,而且非常有吸引力,尤其是对于不是密码学家的开发人员而言,但为了这个问题,我们假设情况不利于这些替代方案。

如果我的应用程序数据确定永远不会超过 4k,为什么不应该简单地使用 Amazon KMS 来加密和解密这些数据?

用例

我的团队正在实施一个新的身份验证层,以便在我们公司的服务和 API 中使用。我们正在实施 JWT 规范,但我们打算避开广泛记录的困扰 JWE / JWS 兼容令牌签名的加密不满,我们正在对称加密有效负载。因此,我们保留了非加密令牌验证操作(到期等)的标准库实现的优势,并且我们留下了加密“脚枪”。

4

2 回答 2

5

我怀疑这与性能有关:扩展和延迟。

KMS 加密/解密的限制为每个帐户 5500 个请求/秒,与其他一些 KMS 操作共享。

“为什么?” 在常见问题解答中也进行了更彻底的讨论。

为什么要使用信封加密?为什么不直接将数据发送到 AWS KMS 进行加密?

虽然 AWS KMS 确实支持发送小于 4 KB 的数据进行加密,但信封加密可以提供显着的性能优势。当您直接使用 KMS 加密数据时,它必须通过网络传输。信封加密可减少您的应用程序或 AWS 云服务的网络负载。只有通过 KMS 请求和执行数据密钥必须通过网络。由于数据密钥始终以加密形式存储,因此可以轻松安全地将密钥分发到您需要的地方,而不必担心它会被泄露。加密的数据密钥被发送到 AWS KMS 并在主密钥下解密,最终允许您解密数据。数据密钥可直接在您的应用程序中使用,而无需将整个数据块发送到 AWS KMS 并遭受网络延迟。

https://aws.amazon.com/kms/faqs/

于 2018-01-27T05:58:24.357 回答
2

我现在正在通过 AWS 支持解决这个问题。接受的答案中提到了限制。此外,如果您在 SDK 允许的范围内重复使用和缓存数据密钥,则可以以降低安全性为代价来节省资金(一个数据密钥可以解密多个对象)。

但是,如果这些都与您无关,则直接 CMK 加密很有吸引力。安全性非常好,因为数据密钥不能泄露,每次解密都需要对 KMS 进行 API 调用并且可以进行审计。在KMS 最佳实践白皮书中,它指出以这种方式加密信用卡号码符合 PCI 标准。

于 2018-07-25T10:38:01.023 回答