使用Amazon KMS加密/解密小型应用程序数据的缺点

时间:2018-01-26 18:15:36

标签: encryption aws-lambda encryption-symmetric aws-kms amazon-kms

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

Amazon KMS Developer Guide表示:

  

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

继续建议使用AWS Encryption SDKAmazon S3 encryption client来加密应用程序数据。

虽然listed advantages of the AWS Encryption SDK明天很清楚,而且非常有吸引力,特别是对于不是密码学家的开发人员,让我们假设这个问题的目的是不利于那些替代方案。

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

用例

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

2 个答案:

答案 0 :(得分:2)

我怀疑这是关于性能:缩放和延迟。

每个帐户

KMS encrypt/decrypt has a limit of 5500 reqs/s,与其他一些KMS操作共享。

“为什么?”在FAQ中也会对此进行更深入的讨论。

  

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

     

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

     

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

答案 1 :(得分:1)

我现在正在AWS支持下解决此问题。在接受的答案中有节流限制。另外,如果按照SDK的要求重用和缓存数据密钥,则可以节省金钱,但会降低安全性(一个数据密钥可以解密多个对象)。

但是,如果这些都不与您相关,则直接CMK加密很有吸引力。由于数据密钥不会泄漏,每次解密都需要对KMS的API调用并且可以进行审核,因此安全性非常好。在KMS Best Practices白皮书中,它指出以这种方式对信用卡号进行加密符合PCI。