如果我不能像以前一样选择相同或相似的密码,它是不是以明文形式存储在某处?

Posted

技术标签:

【中文标题】如果我不能像以前一样选择相同或相似的密码,它是不是以明文形式存储在某处?【英文标题】:If I can't choose same or similar password as previously, is it stored in plaintext somewhere?如果我不能像以前一样选择相同或相似的密码,它是否以明文形式存储在某处? 【发布时间】:2021-11-05 19:34:21 【问题描述】:

标题实际上说明了一切,但我将在这里写下我的想法作为上下文。

据我了解,在撰写本文时存储密码的实际方法是通过加盐和散列(如果我错了,请纠正我),关键是密码不会以明文形式存储在任何地方,并且盐可以防止彩虹表攻击等。我对这方面不是很精通,但这些信息是我从网上收集的。

好的,又到了更改密码的时候了。如果我选择相同的密码,加盐哈希将匹配,我会得到一个提示,说密码与以前相同。现在,一些系统还阻止您将密码设置为例如50% 或 70% 与您之前的密码或您之前的密码之一相似。

我认为这在安全性方面很好,但是如果密码没有以明文形式存储在任何地方,该怎么做呢?还是他们?

【问题讨论】:

【参考方案1】:

正如@martinstoeckli 所说,最简单的答案是您通常在更改密码时必须输入以前的密码 - 所以它可以在内存中比较两者。

但是,即使旧密码以散列方式存储,也可以检查相似的密码,方法是采用新密码,对其应用各种转换(更改单个字符,将末尾的数字减少一个,删除最后一个字符等),对这些排列进行散列处理,然后将其与先前存储的密码进行比较。如果您使用的是良好的密码散列算法(bcrypt/scrypt/Argon2id/PBKDF2),那么这将相当慢,但使用更快的算法,则不会有明显的延迟。

值得注意的是,如果攻击者可以访问以前的密码,这些类型的转换通常会被攻击者使用,并且还与单词列表一起用于尝试和猜测常见单词的变体。

【讨论】:

【参考方案2】:

答案可能比您想象的要简单,通常您必须同时输入旧密码和新密码才能更改它,因此应用程序从用户那里获取旧密码。这在安全方面实际上是一件好事,因为只有知道旧密码的用户才能将其更改为另一个密码。

【讨论】:

以上是关于如果我不能像以前一样选择相同或相似的密码,它是不是以明文形式存储在某处?的主要内容,如果未能解决你的问题,请参考以下文章

VB 如何判断两个图片框中的图像是相同或相似

像 Touch Id 一样,是不是可以通过编程方式使用 iOS 密码锁?

如何在 Swift 中创建像指南针一样的“滑动视图”?

如何让 extjs 组合框像普通的 html 选择框一样工作?

集合是不是像 python3.6 中的 dicts 一样排序

Django-检查两个密码哈希是否具有相同的原始密码