gpt4 book ai didi

javascript - 使用相同的对称 key 加密小字符串的嵌套映射

转载 作者:行者123 更新时间:2023-11-30 18:07:34 24 4
gpt4 key购买 nike

假设我正在创建一个网络应用程序,用户可以在其中创建一个嵌套的字符串树(包含敏感信息)。这些字符串大概很短。我想在保存这棵树之前加密这棵树中的键和值。树中的所有值都将使用用户提供的对称 key 在客户端进行加密。同样,在阅读时,它们将在客户端解密。

树保存在 Mongo 数据库中。

考虑到树中的所有数据都将使用相同的 key 加密,我无法决定是应该序列化树并用整个字符串对其进行加密,还是单独加密值。

两者的优缺点是什么?

据我所知,AES 使用 128 位的 block 大小,这意味着编码时任何字符串的长度都可以增长到 15 个字符,这有利于对序列化字符串进行编码(如果您想避免开销)

注意:虽然 webapp 将同时使用 HTTPS、IP 白名单和多因素身份验证,但我想努力防止 Mongo 数据库被盗时的数据泄露。这就是我在这里的目的。欢迎提供有关如何实现此目的的建议或想法。

更新

此外,我还希望我的服务能够激发信任。以明文方式发送数据(尽管通过 HTTPS)意味着用户必须相信我会在保存数据之前对其进行加密。加密客户端让我可以强调我不知道(或需要知道)我在保存什么。

最佳答案

我想不出为什么这些方法在实际字符串的安全性方面会有所不同(假设它们都正确实现)。单独加密字符串显然意味着树的结构不会是 secret 的,但我不确定您是否关心这一点。例如,如果您单独加密每个字符串,看到密文的人可以找出树中有多少个键,他还可以了解每个键和值的长度。如果您将树加密为整个序列化的 blob,那么看到密文的人可以大致知道树中有多少数据,但无法知道单个键/值的长度或数量。

正如您提到的,就开销而言,填充将是一个考虑因素。更大的存储开销来源是 IV:如果您使用 CTR 等分组密码模式,则需要为每个密文使用不同的 IV。这意味着如果您单独加密每个字符串,则需要为每个字符串存储一个 IV。如果你加密整个序列化树,那么你只需要为那个密文存储一个 IV。

不过,在使用 Javascript 实现此功能之前,您应该确保通过客户端加密确实真正提高了安全性。本文为经典:http://www.matasano.com/articles/javascript-cryptography/重要的一点是要记住服务器正在提供 Javascript 加密代码,因此在客户端加密数据并不能保护它不受服务器的影响。如果您主要担心数据库被盗,您可以通过在将数据插入数据库之前加密服务器上的数据来实现相同的安全性。

关于javascript - 使用相同的对称 key 加密小字符串的嵌套映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15454992/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com