微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在哈希中,我们不能找到至少一个原始文本哈希到给定的哈希值

如何解决在哈希中,我们不能找到至少一个原始文本哈希到给定的哈希值

我有一个关于散列的基本问题。据说散列是一种方式。我有一个疑问,如果我们简单地颠倒程序/算法/逻辑中的步骤,那么我们不能找到至少一个哈希到给定输出哈希值的输入吗?。

我找到了2个相关的帖子,但我仍然不完全清楚:

How is one way hashing possible?

How do one-way hash functions work? (Edited)

我和第一篇文章中对已接受答案的评论有相同的问题:

“好吧,但如果我想绕过密码检查,找到一个哈希值与原始密码相同的字符串就足够了”。这个评论站得住脚吗?。

解决方法

您想到的称为“哈希冲突”。

而且您认为,如果可以找到一种有效的方法来确定产生所需输出的给定哈希函数的输入,这将破坏许多系统 (https://en.wikipedia.org/wiki/Preimage_attack)

密码安全散列函数的骨干就在那里。它们是以某种方式构建的,很难找到产生所需散列的原像。

随着时间的推移,数学家和密码学家正在逐渐消除这些哈希值,并且相当多用于保护事物的哈希函数已被破解(MD4、MD5、SHA-1)。

此外,区分用于检查消息完整性的哈希值和用于保护机密的哈希值也很重要。

对于完整性检查,您需要快速 散列,这样您就可以以最少的努力通过它们放置大量数据。 MD5、SHA-1、SHA-2 就是这样的哈希。

对于保密,您需要SLOW - 比糖蜜散列更好,这样人们就不能轻易地通过其他可预测的秘密模式的字典进行暴力破解。 SCrypt、BCrypt、Argon 和多轮 PBKDF 方案就是这样的哈希。

,

有一种非常简单的方法可以给出不可逆的散列函数:

int GetHashCode(byte[] myData)
{
    return 1;
}

这是一个完全有效的哈希函数,因为它将任意数据集的内容映射到一个更小的域(在本例中为 int)。满足相同输入数据给出相同输出数据的条件。

很明显,这个函数是不可逆的。

(当然,这个散列函数不适合保护任何东西,但这只是散列函数的一种应用)

,

加密哈希函数中的操作非常复杂,而且数量众多,以至于反转该函数(为给定输出计算至少一个有效输入)是难以置信的不可行。如果您手动或在某种算法求解器的帮助下进行反转,这并不重要。这被称为(第一)原像抵抗,这就是密码学家在提出新的散列函数时所攻击的。如果哈希函数经受住了时间的考验,它就被认为是安全的。

另一方面,生成一堆候选密码并在它们上运行已知的哈希函数以检查与给定输出的相等性要容易得多。人类在生成好的密码或密码短语方面非常糟糕。看看这个talk

在哈希中,我们不能找到至少一个原始文本哈希到给定的哈希值

在这种情况下,“查找”(如蛮力输入空间)比攻击哈希函数本身更容易。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。