Mongodb 社区 - 节点 js 中的静态数据加密

Mongodb community - at rest data encryption in node js

我正在寻找一种方法来加密整个数据库并保持搜索数据的能力,尽管它是加密的。

我在 Mongo 中看到了很多关于静态数据加密的问题,但是 none 得到了一个答案,可以帮助人们完成他们应用程序的完整流程。 我希望在这里展示我的发现并得到反馈和更多想法(我还有一些问题)。

加密选项:

1.mongoose-encryption。 完整的解决方案!可以用最少的工作为您加密所有数据库!
2. Procona mongodb - 我没有机会测试它,我花了几个小时尝试安装并将它安装到 运行,但运气不佳(不过这可能只是我一个人..) .
3. 创建获取和发送方法以在模块级别加密和解密您的数据。

我对静态数据加密的要求是:

  1. 应用层不需要参与加解密过程。应该就像我们甚至没有加密数据(大部分)。
  2. 我们可以对加密数据执行搜索和查找。
  3. 我不知道该怎么做,但希望在加密文本字段中搜索部分单词和短语。
  4. 当然,除了对象 ID 之外,所有数据都是加密的。

我的做法:
我想尝试使用 mongoose-encryption 来使用这个神奇插件的所有好处。
我还想将加密字段中真实值的哈希添加到架构中,以便我可以在加密字段上执行查找操作。

问题: 在 mongoose-encryptions 隐藏它之前,我似乎无法找到正确的 mongoose Hook 来调整未加密的数据。所以我无法生成哈希。

这行不通:

Users.pre('save', () => { 
  this.hashedName = hash(this.name)
  console.log(":(")
});

同样如上所述,在加密数据中搜索部分和短语。 通过我的方法,我们可以找到名为“Danielle”的人,但我们无法在 Hash 中搜索名称以“Dani”开头的用户。

也请大家对我的做法提出意见。我知道这是一个不容易找到解决方案的话题。

如果要加密磁盘上的数据,请加密整个磁盘并加密交换区。如果有人获得了数据库的副本(例如,您忘记在数据库上进行身份验证,并且有人连接到数据库并转储数据),明文就会暴露。

如果您希望数据库只存储加密数据,请使用client side encryption。这需要在客户端进行密钥管理,但这样做是为了防止转储您的数据库的人无法获得明文。