【问题标题】:Should I encrypt username/email fields in my MongoDB?我应该加密 MongoDB 中的用户名/电子邮件字段吗?
【发布时间】:2020-02-10 00:29:59
【问题描述】:

所以我正在加密数据库中的字段,但我认为我不能加密用户的usernameemail,因为我使用这些字段来查找用户。我可以对它们进行哈希处理,但由于我认为我不能为每个用户名/电子邮件使用唯一的盐,所以有人可以使用彩虹表来查找隐藏的用户名/电子邮件。

我想这可以不加密它们吗?我想让网站尽可能安全。散列它们有意义吗?我可以通过他们的_id 而不是username/email 找到用户,但在找到用户之前我不会拥有他们的_id

我目前在做什么:

const user = await new db.userModel({
    email: email,
    username: username,
    stuff: cryptr.encrypt(stuff),
});

////

const user = await db.userModel.findOne({
    email: email
}).exec();

编辑:我猜散列没有意义,因为我无法取消散列用户名/电子邮件。不知道我在想什么。

【问题讨论】:

    标签: database mongodb express mongoose


    【解决方案1】:

    这个问题真的应该在 infosec Stackexchange 上问。

    加密通常无法防御黑客,因为您需要访问密钥才能使用加密数据库。这意味着您需要将其保存在数据库旁边。如果您的服务器受到威胁,那么黑客将简单地使用密钥解密数据库。当然,这比什么都不做要好,因为黑客有可能(也许不太可能)只破坏数据库。 Horatiu Jeflea hovewer 提到了加密数据库的其他重要原因,如果您不是单独从事该项目,则应特别考虑这些原因。

    只有在您不需要显示用户名时才可以对用户名进行哈希处理,但用户名通常无论如何都是公开的,因此它对安全性的提高很少。

    散列电子邮件是一个有趣的问题。你问他们是有原因的。您可能需要联系您的用户。如果你散列它们,你将无法做到这一点,如果你不需要这样做,那么你不需要(也不应该)首先保存它们。但是,如果它们只是身份验证过程的一部分,那么这将是可能的解决方案。

    Rainbow 表并不能真正破坏现代散列算法,尽管最大的缓解措施是前面提到的盐,这将使大多数散列攻击MUCH变得更加困难。你还必须确保你没有使用像 md5 这样的易受攻击的,而是像 sha256 或足够的 bcrypt 这样的安全的。您应该使用其中之一对密码进行哈希处理。另请注意,您可以对所有散列字段使用相同的盐,盐甚至可以是(这会降低一点安全性)公共字段(用户名?)之一。不使用盐的借口很少。

    总而言之:你不能对它们进行散列,而且加密可能不值得,除非你可以充分隔离密钥,或者因为外部黑客以外的其他原因需要它

    【讨论】:

      【解决方案2】:

      我想这可以不加密它们吗?

      在大多数情况下,是的。密码应该被散列(+ salt..)并且敏感数据应该被加密。但在大多数情况下,用户名或电子邮件不应该是敏感的。


      但我们假设它们将在 DB 中加密。

      您将encrypt(username) 存储在您的数据库中,因此为了搜索它,而不是使用username,请使用encrypt(username)。当然排序可能会让人头疼,但是找到用户应该是高效的。


      考虑加密(在您的情况下)不是针对黑客,而是针对正在阅读这些记录的人。例如,正在调查生产问题的开发人员或 DBA,您希望他们难以阅读一些(不是全部)字段。将密钥存储在不同的机器上,最好在密钥管理工具中,将增加一个额外的安全层。

      【讨论】:

      • 我尝试搜索encrypt(username),但encrypt(username) 为相同的文本输入返回不同的加密字符串,这使得它不可能。 ://
      • 加密算法大多是确定性的,如果不是全部,你是否知道为什么会这样? (比如你会撒盐吗?)
      • 杰弗拉不确定。我正在使用 cryptr,它基本上是 NodeJS 的加密模块。
      • 您正在使用的库会生成一个随机 IV,这会导致它是不确定的。 codeforgeek.com/encrypt-and-decrypt-data-in-node-js 有一个例子,只要重复使用keyiv,加密后的字符串就一样了。例如,不使用随机 IV 会使其更容易受到黑客攻击,但对于 DBA 示例,情况相同。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-01
      相关资源
      最近更新 更多