首页 > 解决方案 > 为什么每次使用 AWS KMS CMK 加密时都会得到不同的字节?

问题描述

我正在尝试使用 aws kms cmk 将我的敏感数据(例如用户电子邮件地址)加密到数据库中。我在 java 中使用 aws SDK。

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

我也可以解密数据。

但主要问题是当我必须查询数据时......当我取回 aws sdkbytes 并将其转换为 base 68 并存储它时。

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

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

感谢 Ankit

标签: javamysqlamazon-web-servicesencryptionsdk

解决方案


加密如果正确完成,永远不会是确定性的。确定性并始终加密abc@abc.comfa3GeFi2nb52JH0是一个弱点,因为它会泄漏信息(如果您发现两个相同的密文,那么您知道它们拥有相同的纯文本。您不知道确切的值,但您知道它是相同的)。从技术上讲,您使用一个名为 IV(初始化向量)的随机值传递给加密过程,但我们不要深入挖掘。

那么,如何处理你的情况。您可以:

  • 接受现在的样子,
  • 假设你希望你的加密是确定性的,即使以更弱和泄露数据为代价。

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


推荐阅读