1

在 MongoDB 客户端字段级别加密中,当我们加密记录并在密钥库中有多个数据加密密钥(请不要将其与主密钥混淆)时,如果我们在单个查询中获取多条记录,例如 X 记录有 1 个字段使用 Y 个不同的数据加密密钥加密,我想了解驱动程序如何处理这些数据加密密钥的获取。我可以想到下面列出的几种方法来处理它,但想了解确切的行为以最终确定我们的方法。

  1. 它获取 X 条记录并在解密每条记录时调用以获取用于加密该特定记录的数据加密密钥。因此,一起进行 X db 调用以获取密钥。
  2. 与上面相同,但当它获取数据加密密钥时,它会将其存储在内存中,以便在任何其他未重新加密的记录使用相同的数据加密密钥时重复使用。在这种方法中,它会调用 Y db 来获取密钥。
  3. 它获取 X 条记录并列出所有使用的不同键标识符。进行单个数据库调用以获取所有这些不同的数据加密密钥。在这种方法中,它会进行一次 db 调用来获取所有键。
  4. 别的办法。

如果有人知道它是如何实现的,请分享。

TIA

4

2 回答 2

0

密钥管理发生在libmongocrypt库中。

它似乎根据需要单独请求每个密钥,并将其缓存在本地以供以后使用。

这似乎与您的#2 场景一致。

于 2021-05-07T19:07:21.747 回答
0

我自己通过生成 3 个数据加密密钥 (DEK) 和使用这些加密并存储在 DB 中的多个记录 (R) 进行了尝试。当我获取所有记录时,它使用对 3 个 DEK ID 的 $in 查询进行查询以获取所有 3 个 DEK。所以,看起来像下面的场景 3。这个观察是针对小数据集的。可能是如果 DEK 太多,它可能会尝试对 DEK 进行不同的批处理调用,不确定。但至少我能够确认它将批量获取 DEK,这有助于提高性能。

希望这些信息对其他人有所帮助。

于 2021-05-10T14:39:34.450 回答