检测Blob是否为AWS KMS加密

时间:2016-05-16 18:38:03

标签: aws-sdk aws-kms

我有一个数据库,我打算存储KMS加密的blob。有些字段是未加密的(需要加密),有些字段已经过KMS加密。

查看原始数据,所有KMS加密的东西看起来都很相似。理想情况下,AWS KMS API或AWS SDK应该具有类似“isEncrypted()方法的功能,但它似乎不会出现。

是否有一种很好的方法可以在本地检测我的字段是否加密,而不是从decrypt API抓取InvalidCiphertextException

1 个答案:

答案 0 :(得分:3)

我认为你观察加密的东西看起来是一样的是有效的。它有效,因为在正文中,第一部分实际上是用于加密的密钥名称。这就是KMS如何在没有你指定密钥的情况下知道如何解密的(所以基本上当你加密时会得到一些东西:密钥描述+实际加密的东西)。

现在,问题是:你真的想依靠这种观察来确保某些东西是加密的吗?你想在运行时这样做吗?

就isEncrypted方法而言:与调用解密有什么不同?它仍然是一种方法调用。

真正的答案是:您不应该依赖KMS 加密/解密您存储的内容。你应该依靠KMS来加密/解密你用来加密/解密你的东西的密钥(即所谓的信封加密)。如果您通过KMS直接解密/加密,您将受到可以再次拨打KMS的呼叫次数以及您想要加密的最大大小的限制。

如果您切换到信封加密,那么尝试解密并确定内容是否加密应该是微不足道的。话虽如此,我建议实际上对加密和强制执行的内容非常严格(即不要猜)。

因为我们在这里:还要查看KMS的加密上下文