提问者:小点点

为什么每次使用AWS KMS CMK加密时,我都得到不同的字节?


我正在尝试加密我的敏感数据,如用户电子邮件地址到数据库使用aws kms CMK。 我在Java使用的是aws SDK。

我已经将字段加密并存储在数据库中。

我也可以解密数据。

但最主要的问题是当我必须查询数据时。。。 因为我正在取回aws SDK字节,我正在将它转换为基68并存储它。

为什么aws总是在加密后返回相同数据的不同SDK字节? 我不能简单地通过数据搜索。 我得带上所有的清单,解密数据,然后匹配数据。 这要花很多时间。

请建议我使用aws cmk密钥加密数据的好方法。

谢谢Ankit


共2个答案

匿名用户

加密,当正确执行时,永远不是确定性的。 将abc@abc.com加密为FA3GEFI2NB52JH0是一个弱点,因为它会泄漏信息(如果您找到两个相等的密文,那么您知道它们包含相同的纯文本。您不知道确切的值,但您知道它是相同的)。 从技术上讲,您使用一个名为IV(初始化向量)的随机值传递给加密过程,但是我们不深入挖掘。

那么,如何处理你的案子。 您可以:

  • 接受现在的方式,
  • 假设您希望加密是确定性的,即使以较弱和泄漏数据为代价。

如何使加密具有确定性? 使用恒定IV值。 我不知道这是否可以在AWS中实现,以及如何实现,但那将是最容易的方法。

匿名用户

通过以这种方式使用KMS,您正在执行客户端加密,这将使您在检索到数据之后负责解密。

目前还没有在SQL操作中显式使用KMS密钥的实现,唯一的支持是在文件存储的其余部分进行加密。

您的选项包括:

  • 切换到本机MySQL加密
  • 从加密切换到哈希以匹配此字段(不理想)。
  • 在缩小范围以解密后执行后处理。