1

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

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

有没有一种好方法可以在本地检测我的字段是否已加密,而不是InvalidCiphertextExceptiondecryptAPI中捕获?

4

1 回答 1

3

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

现在,问题是:你真的想依靠这个观察来确保某些东西是加密的吗?您想在运行时执行此操作吗?

至于 isEncrypted 方法:这与调用解密有何不同?它仍然是一个方法调用。

真正的答案是:您不应该依赖 KMS 来加密/解密您存储的内容。您应该依靠 KMS 来加密/解密用于加密/解密您的资料的密钥(即所谓的信封加密)。如果您直接通过 KMS 解密/加密,您将受到您可以对 KMS 进行的调用次数和您要加密的最大大小的限制。

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

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

于 2016-05-16T18:54:01.277 回答