假设我正在创建一个 web 应用程序,用户可以在其中创建一个嵌套的字符串树(包含敏感信息)。这些字符串可能很短。我想在保存之前加密这棵树中的键和值。树中的所有值都将使用用户提供的对称密钥在客户端进行加密。同样,它们将在读取时在客户端被解密。
树保存在 Mongo 数据库中。
考虑到树中的所有数据都将使用相同的密钥加密,我无法决定是否应该序列化树并加密它具有整个字符串或是否单独加密值。
两者的优缺点是什么?
据我所知,AES 使用 128 位的块大小,这意味着任何字符串在编码时都可以增长到 15 个字符的长度,这有利于对序列化字符串进行编码(如果你想避免开销)
注意:虽然 webapp 将同时使用 HTTPS、IP 白名单和多因素身份验证,但我想努力防止 Mongo 数据库被盗时数据泄露。这就是我要去的地方。对如何实现这一点的建议或想法表示赞赏。
更新
此外,我还希望我的服务能够激发信任。以明文形式发送数据(尽管通过 HTTPS)意味着用户必须信任我在持久化之前对其进行加密。加密客户端使我能够强调我不知道(或需要知道)我正在保存什么。