更改密码时只增加一个数字是否可以接受?

信息安全 密码 密码策略 密码破解
2021-08-10 20:08:58

注意:我不是在问这个密码方案是不是最好的(当然不是);我问的是它相对于基于身份验证和加密中常用算法的最佳密码方案的理论或实际安全性。正如我在我的问题中已经说过的那样,从数学上讲,这个方案(正如我在这里定义的那样)与人们被告知要做的事情一样安全(但很少这样做;虽然在这里无关紧要),但我不知道是否有奇怪的使仅基于熵的数学分析无效的身份验证或加密方面。

好吧,所以我有了这个有趣的想法。由于受密码保护的系统通常要求用户经常更改密码,因此许多人只是增加一个附加到某些前缀的计数器,例如:

awefjio;1

awefjio;2

...

我想知道使用这样的密码族是否与每次选择一个完全随机的新密码一样安全,只要前缀是统一随机选择的,并且只要每个随机新密码加上大约 10 位。我忽略了计数器中的额外位,因为考虑到用户需要更改密码的频率,这可能会在很小的误差范围内被猜到。从数学上讲,这种密码方案已经足够好了,因为与完全随机的密码相比,额外的 10 位让攻击者尝试破解密码的时间是 1024 倍,假设一个人更改密码的次数不超过 1024 次。(这里我假设攻击者以某种方式拥有密码的哈希值,包括所需的任何盐。)

现在我知道了一个明显的缺点,即以某种方式获取当前密码的攻击者将知道所有以前的密码,然而这在大多数实际情况中似乎完全无关紧要,一旦登录用户就可以完全访问他/她的帐户,从不需要旧密码。

因此我的问题;用户不应该使用这个方案来更改密码有什么具体的原因吗?我猜如果答案是肯定的,那将取决于所涉及的身份验证或加密算法,在这种情况下,我可以将问题限制在最常用的算法上。

需要明确的是,我只询问以下情况:

  1. 用户别无选择,只能以某个固定频率更改密码,并且无法选择使用密码管理器(例如在工作场所的计算机上)。因此,他们必须决定某种方案。这个问题是关于一个特定的方案是否比另一个更好。

  2. 选择一个固定常数 n。如果这很重要,我至少要考虑 n ≥ 64。

    一个。第一种方案是每次需要更改密码时,选择一个新的具有 n 位熵的独立随机字符串。

    湾。第二种方案是选择一个具有 (n+10) 位熵的固定随机字符串,并附加一个计数器,该计数器在每次需要更改密码时递增。

问题是对于常见类型的密码保护系统,(b)是否至少与(a)一样安全。

4个回答

如果攻击者发现了您的密码,他可以访问系统直到您更改密码。更改密码通常可以防止已经拥有您密码的攻击者无限期地进行未被检测到的访问。

现在,如果您的密码是secret-may16,并且当您更改密码时攻击者被锁定,他肯定会尝试secret-june16作为密码。因此,以可预测的方式更改密码并不安全。

你不应该使用这个方案,因为一旦攻击者知道了这个密码,他就可以推导出“后来的”密码。

在以下情况下可能会出现这种情况:

  • 密码在您和其他一些受信任的人之间共享,有一天您决定不再信任他们(其中之一)。在这种情况下,他们很容易猜出下一个密码。
  • 攻击者获取了密码。一旦他破解它(这可能需要一些时间),他就可以猜测密码的派生。

通过使用这样的“编号密码”,您破坏了定期更改密码的(小)安全优势。

相关问题:每 90 天更改一次密码如何提高安全性?

仅更改密码的一部分是 [需要引用] 非常普遍,而且是非常糟糕的做法。

熵是衡量事物未知程度的指标。第一次选择随机固定开头的密码或全新的密码,两者都具有相同的熵,两种选择将是等效的。行。

在您需要更改密码的时候,如果您完全确定不会发现以前的密码,那么您也很好。因为未知的东西会保持相同的熵。

但是……总有一个但是……如果以前的密码被找回了怎么办?还是两个?

以明文形式存储先前密码的站点/系统可能会发生这种情况。也可能发生在将以前的密码存储为哈希的站点/系统上。

因为明文很容易显示您之前的密码是 IamGod_april16。有人会尝试使用 IamGod_may16... 只需以某种可预测的方式更改一部分,就会很容易暴露您的新密码。

即使它被存储为哈希:如果正确完成它会更难,但是如果有人阻止哈希并发现你的密码是什么?然后他将能够尝试 IamGod_december18,如果你以后不改变你的计划......砰!由于 2 年前发生的泄漏而受到打击。

看看“IamGod_”部分是随机的、人类可读的还是其他什么都没有关系:让你感到震惊的是 if 的某些部分可能会泄露一些信息:月份、数字、最后的字母。 .. 即使您的方案是“IamGodh”,也有人可以尝试“IamGodi”、“IamGodj”等。

因此,关于 (b) 方案是否比 (a) 更安全、更少、相等或更安全的具体问题的答案的第一部分:它并不更安全。因为如果只是使用一个变化的数字,变化的月份,变化的字母......最后,尝试新的组合非常容易,无论是离线还是在某些在线系统中。

还有第二部分:即使你设计了一个非常好的方案,而更改部分在密码中间……如果有人恢复了 2 个或更多旧密码怎么办?并发现它们是“3VQ2NMkK”、“3VQ3NMkK”和“3VQ4NMkK”?那么,你能看到一些模式吗?

因此,如果您的方案没有被检测到,(a)和(b)甚至可以同样安全。但这是一个强有力的假设,即可以设计出一个好的方案,因此,一般来说,假设(b)对于任何类型的系统都不太安全是非常安全的。

当然,这假设系统以某种方式被破坏:数据库被泄露是因为有人入侵了站点,或者因为某些内部人员复制了数据库,或者有人丢失了备份磁带,或者少女运行了一个--公司内部的中间攻击,或者是网站的一些更新泄露了密码,或者是因为心脏出血攻击泄露了一些密码,或者是因为公司让一台旧电脑在网络中可用,或者......

鉴于这些情况(以及更多情况)超出您的控制范围,建议选择安全的一面:只是不要假设旧密码不会泄露。

即使需要频繁更新/更改密码的企业环境,保持特定方案也绝不是一个好主意。例如,如果像在您的示例中一样,有人保留相同的基本字符并且只将密码更改了一个整数,那么学习旧密码的人可以使用该方案来预测更改。以名为“crunch”的工具为例。使用您提供的示例,该方案的所有可能排列都可以生成并用于字典攻击。

#!/bin/bash

crunch 9 9 0123456789 -t awefjio@@

Crunch will now generate the following amount of data: 1000 bytes
0 MB
0 GB
0 TB
0 PB
Crunch will now generate the following number of lines: 100 
awefjio00
awefjio01
awefjio02
awefjio03
awefjio04
awefjio05
awefjio06
awefjio07
awefjio08
awefjio09
awefjio10
.........

等等等等。保持可预测的密码模式可以很容易地侵入受凭据保护的网站登录论坛。最佳做法是每次都创建一个唯一且全新的密码。另一个威胁是黑客的信息收集阶段。黑客对目标的习惯、喜欢、不喜欢、爱好、姓氏、出生日期、特殊生活事件日期等了解得越多,他们就越需要继续创建字典/单词列表来破解登录。

因此,要回答您的问题,不,在任何情况下,使用简单的整数增量和密码更改都不是一个好习惯,