问题描述
我将提到的第二个示例 here 用于客户端字段级加密,并且它按预期工作。我创建了一个 Mongo 客户端 bean 并一直使用它,直到我的应用程序停止。
我想知道是否有更好的方法来做以下事情并且几乎没有怀疑:
- 每次重新启动服务器时都会运行以下命令:
BsonBinary dataKeyId = clientEncryption.createDataKey("local",new DataKeyOptions());
这每次都会生成一个新密钥并插入我的密钥保管库集合中。我很好奇是否有办法通过获取旧密钥来优化空间来使用旧密钥本身。这两种方法在安全性方面有什么优势吗?
提前致谢。
解决方法
Ruby 驱动程序提供了可能有用的示例here。
生成本地密钥后,您可以使用任何您希望的机制存储它,并在以后重复使用。密钥不应存储在数据库中(因为加密是在客户端完成的)因此驱动程序不提供存储它的设施,这取决于您。
通常的用法大概是:
- 一次使用主密钥生成本地密钥
- 为您的应用程序提供本地密钥以进行操作(加密和解密)
这样您的应用程序将根本无法访问主密钥(因此将无法任意生成本地密钥)。