【问题标题】:Mongo CSFLE Data encryption keys fetched once or in batchesMongo CSFLE 数据加密密钥一次或批量获取
【发布时间】:2021-05-10 22:39:34
【问题描述】:

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

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

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

TIA

【问题讨论】:

  • 这是自动加密吗?
  • 是的,在企业版中。

标签: mongodb encryption mongodb-query mongodb-csfle


【解决方案1】:

密钥管理发生在libmongocrypt 库中。

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

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

【讨论】:

  • 你能找到一些代码,我可以在其中找到它单独请求每个键的行为吗?如果有,请指点一下吗?
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    • 2022-12-16
    相关资源
    最近更新 更多