检测 Blob 是否经过 AWS KMS 加密

Detect Whether Blob is AWS KMS Encrypted

我有一个数据库,我打算在其中存储 KMS 加密的 blob。部分字段未加密(需要加密),部分字段已经KMS加密。

查看原始数据,所有 KMS 加密的内容看起来都有些相似。理想情况下,AWS KMS API 或 AWS SDK 应该有类似 isEncrypted() 的方法,但它似乎没有。

除了从 decrypt API 中捕获 InvalidCiphertextException 之外,是否有一种在本地检测我的字段是否加密的好方法?

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

现在,问题是:您真的要依靠这种观察来确保某些内容是否已加密吗?您想在运行时执行此操作吗?

就 isEncrypted 方法而言:它与调用 decrypt 有何不同?还是方法调用。

真正的答案是:你不应该依赖 KMS 来 encrypt/decrypt 你存储的东西。您应该依靠 KMS 来 encrypt/decrypt 您使用的密钥 encrypt/decrypt 您的东西(即所谓的信封加密)。如果您直接通过 KMS decrypt/encrypt,您将受到可以再次调用 KMS 的次数和要加密的最大大小的限制。

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

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