如果密码是散列存储的,那么如果您尝试重置密码,计算机将如何知道您的密码与上一个密码相似?


11

如果密码是散列存储的,那么如果您尝试重置密码,计算机将如何知道您的密码与上一个密码相似?由于一个密码是散列的,并且无法逆转,因此这两个密码不会完全不同吗?


5
计算机不会知道它们是否相似。它只会知道它们是否相同(通过对新密码进行哈希处理并将其与原始密码的存储哈希进行比较)。
罗伯特·哈维

但是,有一些生成哈希的方法可以捕获部分密码特征。但是,此类哈希的可用性是一个很大的漏洞,因为密码破解者还可以利用此类信息将密码暴力搜索范围缩小许多数量级。
rwong

如果您需要比较密码,则不会使用哈希。您可能会使用AES或其他形式的simetric加密
-Laiv

Answers:


15

实现此目的的一种方法是,如果您重置密码,通常还会要求您输入旧密码。在那种情况下,您只需要简单地使用常规字符串相似性比较,因为此时两个密码都以明文形式存在。

实现此目的的另一种方法是对密码进行标准化,例如将重音字符标准化为最接近的英语字母,尝试以语音方式转录文本,删除数字等,并通过预先计算从密码生成的多个版本的哈希来验证密码。已经以不同的方式标准化。请注意,这会削弱哈希机制的不确定数量。我不会将其视为安全性最佳实践。


“重设密码”通常是指“我忘记了密码,但想重设密码”,因此不会要求您输入旧密码。答案的后半部分是准确的。
卡萨布兰卡

3
@casablanca:那里有很多系统可以让您每隔X天“重置”密码....
whatsisname

1
@casablanca:上半部分也很准确,“重设密码”可能有两种含义,术语并不是那么刻板。我们需要询问OP的确切含义。
布朗

12

简单的答案是,安全系统不知道它们是否相似。

但是某些系统会以某种方式故意降低特定密码的安全性,以防止新密码成为旧密码或与之相似的密码。权衡成本的好处是,在有人恶意破解当前密码(即使具有相似性信息)之前,将创建一个新密码。

  • 它们可能会存储您使用的密码的最后N个哈希。如果输入旧密码,则很明显,因为新密码哈希与旧密码哈希匹配。
  • 所使用的哈希机制可能包含拇指钉钉机制,或者哈希的缩略图可能与哈希一起存储。本质上,哈希缩略图中的某些位模式在基础值中表示一组高度相似的位模式。
  • 同样,他们可能会将有关您密码的统计信息保留在一边,这将允许您准确地评估相似性。

通常,所有这些技术都会降低密码的安全性。

  • 保留旧密码会降低这些密码的安全性。如果其中任何一个密码被破解,则当前密码很有可能与它们相似,大多数人只更改一个数字。

  • 缩略图和统计信息比尝试散列猜测并进行比较可以更快地消除错误的密码猜测。这是因为即使硬件加速,哈希(尤其是安全哈希)的计算和花费也很复杂。虽然说“绝对不是”或“也许”的简单计算可以消除大多数猜测,但毕竟相似性检查是为了阻止您使用相似的密码,而不是使用看上去与旧密码完全不同的全新密码。

简而言之,请注意任何表明与您当前/旧密码相似的度量的站点。除非他们说新密码是旧密码。


7

如果密码是散列存储的,那么如果您尝试重置密码,计算机将如何知道您的密码与上一个密码相似?由于一个密码是散列的,并且无法逆转,因此这两个密码不会完全不同吗?

您从用户输入的密码中生成了多个相似的密码,并检查其哈希值是否与旧密码之一匹配。


是的,人们在做出的各种更改中都是可以预见的,因此这可能是一种不错的方式。
半机械人

仅使用最短的密码就可以快速完成所需的处理。因此,我认为这不是真正的做法。
马丁·马特

我在一个地方工作了很长时间,离开时我的密码是supersecurepassword39。(仅最后两位数字为真)。很明显,密码是用数字开头还是结尾是数字,以查看是否使用了先前的数字。
gnasher729

@MartinMaat会吗?您可以通过从原始密码中一一排除字符来检测说是添加还是增加数字。也就是说,对于“密码”,您可以对“ assword”(heehee),“ pssword”,“ pasword”等进行散列。由于必须尝试每个256个排列的额外复杂性,您甚至可以摆脱使用较弱的功能如果您碰巧暴力破解了辅助哈希。(更多信息是,如果您以随机顺序存储它们,并且您不知道哪个字符遗漏了哪个字符,那么每个字符就是256 * N。)
millimoose19年

当N为密码长度时,确实会使设置新密码的费用增加N倍,这不包括相似性检查,后者应比哈希处理便宜得多。但是,您每次用户登录时都会对密码进行哈希处理,而且这种情况发生的次数可能比更改密码的次数要多得多,因此我怀疑这种额外的负担会如此明显。
millimoose19年

2

另一个模式是系统对您的密码的某些特征子集进行哈希处理,并存储这些哈希值以检查新密码的子集是否与旧密码中的任何旧匹配,即:password:“ Admin2018”&subset:“ Admin” =无法输入“ Admin2019”作为新的一个。


1

一种方法是将过去的五个哈希密码存储在“密码历史记录”之类的表中,当用户尝试设置新密码时,对其进行哈希处理并与该表中的哈希密码进行比较。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.