【问题标题】:Why encrypt user passwords? [duplicate]为什么要加密用户密码? [复制]
【发布时间】:2011-03-13 21:17:35
【问题描述】:

可能重复:
Why aren’t original passwords stored?

如果密码是数据中最不有价值的部分,为什么还要将加密的用户密码存储在数据库中?似乎不会影响外部攻击;设置每个帐户每天的登录尝试次数是有效的。似乎不会影响内部攻击;如果有人可以访问密码,他们也可以访问数据库其余部分中更有价值的数据。

我在这里遗漏了什么吗?难道不应该使用用户密码作为密码加密本身有效的密钥来加密整个数据库吗?

将他的帖子与他的问题结合起来:

好吧,我问这个问题的方式很糟糕。让我重新表述一下。

如果有人闯入此系统,他们拥有用户密码这一事实是我最不关心的问题之一。我将对密码进行加密,但以我的拙见,数据库中的其他数据更有价值。假设如果内部攻击者拥有该数据,他们就不会关心密码。

如果数据库中没有其他内容被加密,并且数据库中的所有其他内容都是攻击者真正想要的,那么加密密码真的解决了什么问题吗?

【问题讨论】:

  • 好吧,什么给出。鉴于用户名,您显然是一个 sock 帐户,并且您正在为一个被多次讨论的问题获得大量支持。是 4 月 1 日吗?
  • /me 正在做笔记,几周后重新发布并获得大量支持...为什么有人要努力工作以获得代表,而您可以这样做?跨度>
  • 这个问题就像在问,“你为什么需要在车上休息,因为反正你总有一天会死……”,而不是因为其他数据可以作为目标意味着你不必保护这部分数据。这就像说如果一只狗攻击某人,你不会帮助他,因为一只狗可能同时攻击其他人。
  • @Palantir - 他最多有 31 个代表。我不认为这是世界末日。
  • @Jon B:我说的是整个问题。到目前为止,这个产生了超过 150 个代表点,对社区来说完全没有价值,因为它已经得到了回答。

标签: database security passwords


【解决方案1】:

因为,散列密码将保护它免受来自组织内部的攻击。这样,有权访问数据库的人就不会知道用户的密码。

人们有反复使用相同密码的习惯,因此,如果您的数据库被意外破坏,您的组织不会使用户的其他帐户包含在其他组织中。现在人们应该这样做吗,不,但他们这样做了,而且对密码进行哈希处理要比向您的客户解释为什么内部有人掌握了密码并对其他系统中的多个帐户造成损害要容易得多与你无关。

如果您认为这个原因过于夸张,您可能想知道它实际上发生在 Stack Overflow 的创建者 Jeff Atwood 身上。他在他的博文"I Just Logged In As You: How It Happened" 中描述了整个 Stack Overflow 是如何被破坏的。

编辑:

为了进一步回答您的问题,您的其他敏感数据也应加密。很多网络攻击都是内部工作,我不想这么说,但你必须对谁可以看到什么信息感到偏执。任何您认为不希望人们知道的敏感信息,除非他们被特别授权查看该数据,都应该在数据库中加密。你是对的,有时比较什么可以被盗密码对你来说并不是那么重要。关键是“给你”。它是给其他人的,应该与系统中的其他敏感数据一起受到保护。

【讨论】:

    【解决方案2】:

    如果您有 SQL 注入漏洞,有人窃取了您的数据库,并使用您存储的用户名、电子邮件地址和纯文本密码直接登录到您的用户电子邮件帐户、银行帐户,该怎么办?等等。你真的想承担这个责任吗?相反,您真的要承担以明文形式查看用户密码的责任吗?

    【讨论】:

      【解决方案3】:

      原因:

      1. 如果有人(来自内部或外部)窃取这些密码并公开发布它们,那么您就完蛋了,您可以立即关闭您的业务。
      2. 有些人对许多服务使用相同的密码。如果某些“攻击者”可以访问电子邮件地址和密码,最简单的方法是尝试该密码是否也适用于该电子邮件帐户。

      你不希望这种情况发生。

      如果您可以访问其他人的电子邮件帐户,您可以请求从受害者的各种服务等发送忘记的密码。

      【讨论】:

        【解决方案4】:

        对于内部攻击,如果我能记住 5 个用户名/密码组合,然后转到公共终端并访问这些帐户,那么与我使用工作机器直接编辑数据库或拉取数据相比,有人注意到攻击的可能性较小在工作时输出大量数据。

        正如其他人所指出的那样,由于我们都有一百个或更多的在线地方都需要不同的密码......很多很多人只是一遍又一遍地使用相同的密码。如果 Williams Widget Company 丢失了您的姓名、登录名和密码,而您的银行拥有相同的登录名和密码,并且追踪到 Widget Company 是丢失您的密码的人……那么就会出现一些混乱的责任。

        【讨论】:

          【解决方案5】:

          因为您不想陷入发送未加密密码的设计陷阱,或者认为您可以,因为您可能没有任何未加密的东西可以比较。

          【讨论】:

            【解决方案6】:

            好吧,我问这个问题的方式很糟糕。让我重新表述一下。

            如果有人闯入此系统,他们拥有用户密码这一事实是我最不关心的 之一。 我将加密密码,但在我看来,数据库中的其他数据更有价值。假设如果内部攻击者拥有该数据,他们不关心密码。

            如果数据库中没有任何其他内容被加密,并且数据库中的其他所有内容都是攻击者真正想要的,那么加密密码真的解决了什么问题吗?

            【讨论】:

            • 使用加密密码他们只会从这个系统中窃取数据,但使用未加密密码他们可以重复使用密码并访问许多其他系统上的数据。这就是区别。
            • 要为您的问题添加更多信息,请使用评论系统或编辑您的问题。如果不是实际答案,请不要发布答案。 编辑:我刚刚注意到你在另一个帐户下发帖,如果那是你的话。最好使用您发布问题时使用的帐户重新登录,以便编辑您的问题...
            • 由于某种原因,它让我退出了以前的帐户,我无法重新登录。我的匿名性甚至让我感到困惑。这次我复制了 OpenID 哈希。我正在开发的系统存储可用于身份盗用的信息。因此,人们担心密码比内容更安全。
            • 如果用户使用相同的密码,不仅可以重用未加密的密码访问其他系统上的数据;它可以用来访问同一个系统。虽然第一次“获取用户通行证攻击”可能看起来是一种攻击并被发现,但使用用户通行证的下一次访问看起来是“正常”访问。如果没有注意到“真正的”攻击,他们可以更巧妙地“掩盖”伤害
            【解决方案7】:

            机密性、完整性、真实性、隐私... 记住您的第一个安全课程,并尝试计算您的问题绕过了多少这些课程。

            四个?好吧,这取决于对问题的更具体的看法,但无论如何也不远:)

            【讨论】:

              【解决方案8】:

              另外,您不需要知道用户密码。在客户端创建密码哈希是个好主意。根据您所在的位置,存储个人数据和密码时可能会有法律要求。

              【讨论】:

                【解决方案9】:

                通常密码的哈希值存储在数据库中,而不是原始原始文本。这是为了确保用户凭据的额外安全性,以应对对系统的外部攻击。 进行哈希比较以验证用户凭据。

                您可能想阅读更多关于为什么采用这种方法的理论,以便更好地理解它。 Wiki 可以作为这个的起点。

                【讨论】:

                  【解决方案10】:

                  存储密码哈希时。不要忘记用一些东西来加盐,所以哈希的反向查找不会泄露密码。是的,在散列之前使它成为一个长字符串。
                  我不明白问题的最后一段。对不起。

                  【讨论】:

                  • 这个问题没有问如何密码应该被加密。它询问为什么密码应该被加密。
                  猜你喜欢
                  • 2014-01-05
                  • 1970-01-01
                  • 2010-10-16
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多