Mongo CSFLE 一次或批量获取数据加密密钥

Mongo CSFLE Data encryption keys fetched once or in batches

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

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

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

TIA

密钥管理发生在 libmongocrypt 库中。

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

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

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

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