攻击者如何知道他何时拥有密码?

信息安全 密码
2021-08-28 19:48:42

攻击者获得哈希密码列表。他怎么知道他什么时候破解了密码?他无法在包含的帐户上尝试数百万次。

攻击者获得散列密码。他怎么知道“密码”是正确的密码而不是“密码”?

编辑:

我很想念一些基本的东西。让我确定我理解它:

  1. DBA 获取我的密码 (pa$$word) 并对其进行哈希处理。
  2. 攻击者获取密码列表。
  3. 攻击者尝试“密码”。它被散列。他看到密码哈希不等于我的密码。3a。他尝试了 hash-of-pa$$word。它被散列,他看到两者是相等的。因此他破解了我的密码。
  4. 一段时间后(x 时间),他已经破解(比如说)90% 的密码,然后由于收益递减而停止。(除非他真的想要我的密码。)
1个回答

是的,您的步骤似乎是正确的。攻击者散列大量单词或字符序列,直到找到与目标散列匹配的单词。

伪代码:

hashlist = [ "a235b8320c...", "688b4302c57f3...", ... ]
wordlist = file.readlines("/path/to/wordlist")
for each word in wordlist:
    h = hash(word)
    # is the hash of this word in the list of target hashes?
    if h in hashlist:
        print "Found: " + h + " = " + word

按照 muchaho 的要求,这里有一些伪代码说明它如何使用独特的盐:

hashlist = [ "salt1:a235b8320c...", "salt2:688b4302c57f3...", ... ]
wordlist = file.readlines("/path/to/wordlist")
for each h in hashlist:
    salt = split(h, ':')[0]
    h = split(h, ':')[1]
    for each word in wordlist:
        if hash(salt + word) == h:
            print "Found: " + salt + ":" + hash + " = " + word

请注意,在为每个散列添加唯一盐之后,我们必须为每个目标散列尝试每个单独的候选词,而不是仅仅散列所有单词并等待一个匹配散列。当您有多个哈希要破解时,这会增加暴力破解成本,但最重要的是可以防止预计算攻击,例如彩虹表