【问题标题】:Find salt in the blowfish encrypted hash在河豚加密哈希中查找盐
【发布时间】:2011-08-25 07:03:39
【问题描述】:

这是一个非常基本的问题。我已经为此寻求帮助,但找不到任何具体的答案。所以特地在这里问。

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

但是,要创建这个猜测词的哈希,需要使用与密码哈希相同的盐来生成。

我的问题是如何从密码哈希中提取盐。 假设,以下是我的哈希:

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

这里面的盐是什么?或者我怎样才能实现目标?任何指针都会很棒!

提前致谢。

【问题讨论】:

标签: c++ blowfish crypt


【解决方案1】:

只需将密码哈希作为盐传递——它足够聪明,可以自行提取。这是crypt()的约定

参见现代 Unix 和“BSD 风格”散列下的How Passwords Work in Unix, Mac OS, and Windows

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

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

【讨论】:

  • 是的。我看到了第二个链接。仅基于此,我做出了一些实际上对我不起作用或给出意外结果的假设。我无法弄清楚我应该如何在我的用例中使用河豚 API。
  • 我可以使用河豚 API 实现相同的功能吗?
  • 我不这么认为——密码哈希中使用的河豚是修改过的。
【解决方案2】:

密码哈希函数的“salt”与密码连接,然后对生成的字符串进行哈希处理。要取回盐,这意味着您需要取回经过哈希处理的字符串。显然,这有两个主要问题:

  1. 如果您能够取回该散列字符串,它还将包含明文密码。这将是散列函数的重大安全缺陷。
  2. 您还必须弄清楚连接字符串的哪一部分是盐,哪一部分是密码。

【讨论】:

    【解决方案3】:

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

    我对盐的理解是这样的:

    • 你有一个字符串,我们称之为password
    • 你有一个算法,它接受一个字符串并从中产生一个哈希值。我们就叫它blowfish
      • 这是否正确?河豚是散列算法吗?我不这么认为!!!!
      • 我们将算法称为md5
    • md5 将为password 生成一个哈希,但它总是会生成相同的
    • 你有一个坏人。我们就叫他Mrun吧。
    • Mrun 尝试通过使用字典中的一组已知密码测试 md5 来找出 password
    • 不只是使用password,而是使用password + salt,会产生不同的哈希值并阻止Mrun

    如果您需要找到盐,您必须至少有一个已知的密码和哈希组合。然后你可以尝试使用蛮力来找出盐分。祝你好运。哦,我希望你在这里不是邪恶的。哦,我希望其余的邪恶生物也毫无头绪......

    【讨论】:

    • 你这里有一些误解---如果你不能得到盐,你如何验证密码是否正确? salt 用于防止预编译表,但不适用于现场表。这也是为什么你不应该重复使用盐的原因。
    • 我想你误解了我的意思——如果你找到了盐(通过猜测,将散列算法应用于密码并猜测并检查已知的散列),那么你可以使用盐重新编译你的表并破解其余部分密码。
    • 我同意 J-16。在适当的设置中,每个用户都有自己的盐值。没有盐之类的东西。 IE。密码表将包含三列:User, Salt, Hash
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-06
    • 2012-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多