使用 2 路加密存储密码是否安全?

信息安全 加密 密码
2021-08-18 00:13:57

我是一名家长,在当地学区拥有家长账户,这样我就可以登录他们的网站查看我孩子的成绩等。

我点击了“忘记密码”按钮,我的密码以纯文本的形式通过电子邮件发送给我。这让我很担心,所以我给校长发了电子邮件,包括此页面底部的一些链接。这是我从组织的 IT 收到的回复部:

父密码不以纯文本形式存储。它们是加密的。不是单向加密,而是双向加密。这就是系统能够通过 Ariande 的 CoolSpool 实用程序通过电子邮件将其呈现回来的方式。

出于支持原因,某些员工可以看到家长密码,直到家长成功登录 3 次。之后,没有员工可以看到该密码。但是,它的存储方式是系统本身可以将其发送回经过验证的电子邮件。以后家长 3 次成功登录后,如果他们忘记密码,他们的验证电子邮件帐户将收到一个链接以重置他们的密码,此更改正在进行中。

这种解释是否证明了通过电子邮件发送的纯文本密码是合理的,我的密码对它们安全吗?

如果没有,我可以用哪些参考资料或资源回复他们?

4个回答

不,这不是一个好习惯。有两个不同的问题。

  • 加密密码而不是散列它是一个坏主意,并且是存储纯文本密码的边界。慢散列函数的整个想法是阻止用户数据库的泄露。通常,如果 Web 应用程序有权访问加密密钥,则可以预期已经有权访问数据库的攻击者也可以访问加密密钥。

    因此,这是边界明文;我几乎投票决定将其作为此问题的副本关闭,因为这几乎相同,并且链接的答案几乎直接适用,尤其是关于明文违规者的部分;还有另一个关于明文违规者的答案。

  • 通过纯文本电子邮件发送纯文本密码是个坏主意。他们可能会争辩说,没有密码重用发生时没有区别,但我怀疑他们甚至会知道那是什么以及为什么它被认为是不好的做法。此外,密码重用是如此普遍,以至于这不是一个好的答案。

此外,因为他们似乎正在处理第二部分(即使纯文本电子邮件中的密码重置链接在同一个球场,即可以从纯文本邮件中读取密码的威胁也可以读取链接,可能在你之前可以),你可以向他们解释我的答案中没有散列的问题,也可以直接链接这个答案

甚至可以解释说加密是一种方式,但总是可以被相关加密系统的反函数逆转,恰当地命名为解密。使用“单向加密”和“双向加密”等术语而不是“散列”和“加密”表明缺乏理解。

真正的问题是:他们实施密码重置并不意味着他们将来会(正确地)散列;除了使用密码管理器并创建一个长而强的密码短语之外,您对此无能为力,并希望获得最好的结果。

尤其如此,因为他们似乎想要保留系统中告诉员工您的密码的部分(绝对没有充分的理由)。这意味着他们一直没有正确散列 - 他们说员工只能在三个登录时间范围内看到密码是不正确的;如果网络应用程序可以访问密钥,那么管理人员也可以。也许不再是客户支持人员,但他们不应该首先看到它。这是非常糟糕的设计。

根据您所在的位置,学校作为公共部门的一部分有义务让您可以直接联系 CISO,表达您的担忧。和公共部门一样,应该有一个组织来监督学校;他们至少应该有一个 CISO,他可能对这个程序很感兴趣。

每个人都在关注加密与散列,但是,虽然这本身很糟糕,但我发现以下更令人震惊:

出于支持原因,某些员工可以看到家长密码,直到家长成功登录 3 次。

您应该将此解释为“IT 人员知道我的密码”。他们公开承认,他们的某些员工可以知道您的密码。这太糟糕了。我假设在您更改密码后此计数器已重置,因此使用 3 次虚拟密码然后将其更改为“真实”密码将无济于事。不要在该平台上放置您不想公开的任何内容,如果您在其他网站上使用相同的密码,请更改它们。

不,正如您正确推测的那样,这种行为显然不安全。

您可以而且应该做的就是不要相信他们的系统。不要在学校系统上使用类似于您的银行密码或其他密码的密码。不要提供比让您的孩子上学绝对必要的信息更多的信息。如果您的孩子带回家一张纸条,上面写着“登录并更新您的信息”,请不要放入任何您不愿意透露的内容。

至少他们的“未来”场景听起来像是他们正在实现他们需要的行为,以支持安全的散列密码;他们是否会真正安全地散列密码(在三次登录后)而不是加密它们将是一个不同的问题。你将无法通过观察来回答这个问题。如果您仍然担心,您可以联系软件供应商并询问他们是如何工作的。

  1. 您不应该假设您的密码永远是安全的。推荐使用密码管理器是有原因的

    现实情况是,在您尝试自己处理所有这些密码时,您将犯下重用某些密码的大罪。这实际上比使用密码管理器风险更大。如果使用此密码的单个站点出现故障,则使用该密码的每个帐户都会受到威胁。您需要记住您重复使用该密码的所有站点,然后将它们全部更改。

  2. 进行重置的推荐方法是为用户生成一个唯一密钥,以便在TLS 安全网站上进行自己的重置电子邮件,即使启用了 TLS,本质上仍然不安全

    尽管 TLS 和 SSL 无疑构成了任何公司数据安全方法的重要基础,但仍有一些证据表明它是一个带有许多潜在漏洞的系统。

    主要弱点源于公司对如何加密电子邮件缺乏了解,许多人认为使用 TLS 可以完全保护传输通道以及电子邮件。

  3. 散列从根本上不同于加密。在 Stack Overflow 上得到了很好的探索

    [加密功能] 提供任意长度输入和输出之间的 1:1 映射。而且它们总是可逆的

    正如 SmokeDispenser 所指出的,如果他们可以获得您的数据库,他们就可以获得加密密钥。这与散列有什么不同?哈希总是单向的数据进来,永远不会出来。换句话说,没有钥匙可以偷。

    在检查输入数据的有效性时使用散列函数。这就是它们的设计目的。如果您有 2 条输入,并且想检查它们是否相同,请通过哈希函数运行它们。对于小输入大小(假设散列函数良好),碰撞的概率非常低。这就是为什么建议使用密码。

    换句话说,您将密码存储在我的网站上。我用一个随机字符串(称为盐)一遍又一遍地用一些慢的东西(比如 bcrypt)来散列它。为了验证您的身份,您再次输入您的密码,然后我通过相同的哈希对其进行清洗。使用相同的算法(加上我多次运行它,称为成本)、盐和密码,我应该得到我存储的相同哈希值。因此,我不需要存储可逆的加密或未加密密码。