2011-08-25 94 views
1

这是一个非常基本的问题。我已经寻求帮助,但找不到具体的答案。所以我特意在这里问。在blowfish加密哈希中查找salt

用例是,我想找到指向可用哈希列表的弱密码。为此,我必须将每个已知/常用单词的散列与可用散列进行比较。所有这些都是在C++ for Unix中使用openssl/blowfish.h完成的。

但是,要创建此猜测字的哈希,需要使用与用于密码哈希的盐相同的盐生成。

我在这里的问题是我如何从密码哈希中提取盐。 假设,下面是我的散列:

$ 2A $ 10 $ FTx8T5QrEbxYVe.NJ6iOhuei.V9qgl60xF8/8s7iZRDIlOl.ibDEW

是什么盐呢?或者我如何实现目标?任何指针都会很棒!

在此先感谢。

+1

http://stackoverflow.com/questions/4683350/blowfish-salt-length-for-the-crypt-function –

+1

好文章由杰夫阿特伍德关于盐和哈希和彩虹表http:// www。 codinghorror.com/blog/2007/09/rainbow-hash-cracking.html到 –

回答

1

这不就是盐的重点吗?你不知道它是什么?那么没人可以来做你现在想做的事情?

我明白盐的方法是这样的:

  • 你有一个字符串,让我们把它password
  • 你有和算法,它接受一个字符串,并从中产生一个散列。我们称之为blowfish
    • 是甚至是正确的?是河豚哈希算法?我不这么认为!
    • 让我们打电话给我们的算法md5
  • md5会产生一个散列password,但它总是会产生相同的一个
  • 你有一个坏家伙。我们给他打电话Mrun
  • Mrun试图通过不使用只是password一束已知密码测试md5从字典
  • 找出password,而是password + salt,不同的散列产生并Mrun被挫败。

如果您需要查找盐,您必须至少有一个已知的密码和散列组合。然后你可以尝试用暴力来弄清楚盐。祝你好运。哦,我希望你在这里不是邪恶的。哦,我希望其余的邪恶生物也是无能为力......

+0

你在这里有一些误解---如果你不能得到盐,你如何验证密码是否正确?盐是为了防止*预编译表*,但不是在现场表上。这也是你不应该重复使用盐的原因。 –

+1

我认为你误解了我 - 如果你发现盐(通过猜测,将哈希算法应用于密码并猜测并检查已知哈希),那么你可以使用salt重新编译你的表并破解其余的密码。 –

+1

我同意J-16。每个用户都将拥有自己的盐值,并采用适当的设置。没有盐这样的东西。即密码表将有三列:'用户,盐,哈希'。 – MSalters

2

只要通过密码散列作为盐 - 它是足够聪明的提取自己。这是crypt()

How Passwords Work in Unix, Mac OS, and Windows现代Unix和“BSD风格的”散列的惯例。

注意:crypt()salt参数不是盐。这是$algorithm$salt$MORESALTsomething,所以你不应该自己提取盐。 - 历史(DES时代)原因称为salt

参见Why does crypt/blowfish generate the same hash with two different salts?

+0

是的。我看到了第二个链接。基于这一点,我做了一些实际上不适合我或者给出意想不到的结果的假设。我无法弄清楚我应该如何使用blowfish API作为我的用例。 – Mrun

+0

使用blowfish API可以达到相同效果吗? – Mrun

+0

我不这么认为 - 密码哈希中使用的河豚是一个修改过的。 –

1

的密码散列函数的“盐”的值与密码,然后将得到的字符串被散列。为了找回盐,这意味着你需要找回被散列的字符串。显然,这有两个主要问题:

  1. 如果您能够找回散列字符串,它也将包含明文密码。这将是散列函数的一个主要安全失败。
  2. 你还必须弄清楚连接字符串的哪一部分是盐,以及哪个密码。