我读 这个问题 在MD5hash价值观和公认的答案混淆了我。其中一个主要的性质,我的理解是,一cryptopgraphic散列函数是它不可能找到两个不同的消息(投入)相同的散列值。

然而共识的问题的答案 你为什么不MD5hash值可逆?因为一个无限数量的输入串将产生相同的输出。 这似乎是完全相互矛盾给我。

此外,有什么困扰我有些是事实,算法是公开的,但散列值仍然不可逆转的。这是因为总是存在数据丢失散列函数所以没有办法知道哪些数据被扔掉?

什么时候会发生的输入数据的尺寸小于固定的输出数据的大小(例如,哈密码"abc")?

编辑:

好的,让我看看如果我有这样的直:

  1. 这是真的,真的很难推断,输入从哈希 因为有一个无限量的输入串的即将产生相同的输出 (不可逆转性)。
  2. 但是, 找到 甚至一个单一实例的多种输入串产生相同的输出也是真的,真的很难(碰撞防性)。
有帮助吗?

解决方案

你可能会感到困惑,因为答案 这个问题你举 令人困惑。其中一个要求为一个加密散列函数是它应preimage性。也就是说,如果你知道MD5(x),但不能消息x,则很难找到任何x'(要么等于x或不同x)这样的,MD5(x')=MD5(x)。

正在preimage耐是一个不同的财产不是可逆的。一个功能是可逆的,如果给予y=f(x)有一个x这符合(是否这是容易或不)。例如定义f(x)=x mod10.然后f不可逆转的。从f(x)=7你不能确定是否x17岁,27或者其他什么东西。但f不preimage性,因为价值观x'这样的f(x)=7很容易找到。x'=17、第27、12341237等的所有工作。

当做你的密码通常需要的职能preimage防(和其他属性,例如防冲突),不只是东西是不是可逆的。

其他提示

警告:只要回答

我认为所有这些问题的答案缺少一个非常重要的属性的加密散列功能:它不仅是不可能计算原来的消息是哈希获得一定的散列,这是不可能计算 任何 消息,将哈希定的散列值。这就是所谓 preimage性.

(通过"不可能"-我的意思是,没有人知道如何做到这一点的时间少于需要猜测每一个可能的消息直到你猜那个是散列入你的散列。)

(尽管普遍认为在不安全的MD5,MD5仍然是preimage性。谁不相信我是免费给我任何东西,哈希 2aaddf751bff2121cc51dc709e866f19.什么MD5不是 碰撞性, ,这是完全不同的东西。)

现在,如果唯一的原因,你不能"的工作倒退"在一个加密散列函数是因为散列函数丢弃的数据以创建的散列,那么它将不能保证preimage性:你仍然可以"工作倒退",只是插入随机数据,无论散列函数中抛弃物数据,虽然你不会来了原有的消息,你还是想出了一个信息,即哈希望的散列值。但您不能。

因此问题就变成:为什么不呢?(或者,换句话说,你怎么做功能preimage耐?)

答案是哈希加密功能混乱的模拟系统。他们把你的消息,打破它成块,混合这些街区周围,有一些块互相交流,混合的那些街区周围,并重复了很多次(嗯,一个加密散列函数;其他人有自己的方法)。由于块的相互作用,方框C不仅具有互动的框D产生的阻止,但是它已与框电子产生的框B。现在,当然,你可以找到值块C,D,E,将产生块A和B在你的散列值,但是作为你走进一步回,突然你需要一块F交互C做D和E编B,没有这样的区块既可以做的同时!你必须猜测是错误的价值观为C、D和E

虽然不是所有的加密散列函数是正如上文所述与框相互作用,他们有同样的想法:如果你试图"的工作倒退",你就要结束了一大堆的死结束,并且所需的时间给你试足够的价值观产生preimage是在数百至数百万年(根据不同的散列函数),没有多少好过的时候它会采取只是为了尝试的消息直到你找到一个工程。

1:主要目的散列是地图上的一个非常,非常大的空间较小,但仍然非常大的空间(例如,MD5,它将采取'任何',并将其转换成一个空间的大小2^128--大,但几乎没有大的作为阿莱夫-0.)

除了其他特点, 很好的 哈希填补目的地空间均匀。不好哈希填补空间中的一块状的时尚,未来与同一散列对许多共同的输入。

想象一下的愚蠢的散列函数的总和(),这就增加了所有数字输入数:它成功地映射下来,但有一堆的碰撞(投入与相同的输出,像3和12和21)在低端的输出空间和上层结空间几乎是空的。因此,它使得非常贫穷使用的空间,容易破裂,等等。

因此,一个良好的散列,使得甚至使用的目的地的空间将使它很难找到两个输入与输出,刚刚通过的几率:如果MD5是完美的,将可能性两个输入将有同样的产出将是2^在-128.那是相当不错的几率:最好你可以不用诉诸于一个大输出空间。(在真相MD5不是完美的,这是一个事,使脆弱的群体。)

但这将仍然是真实的,大量的投入将地图以任何特定的散列,因为输入空间的'无限',并除无限的2^128仍然给你无限的。

2:是的,哈希总是会造成数据丢失,除了在的情况下输出空间是相同的,或比较大,你输入空间--并在这种情况下,你可能不需要哈!

3:对于较小的投入,最好的做法是盐的输入。实际上,那是好的做法对于任何加密散列,因为否则攻击可以给你具体的投入,并试图找出其中的散列所使用。"盐"只是一套额外的信息append(或prepend)到你的输入;你后的散列结果。

编辑:在加密,它也是重要的,散列函数是抗preimage攻击,直观地说,是很难猜到的输入一定的输出甚至不知道其他许多输入/输出对。"总和"功能可能可能是猜测而容易(而是因为它破坏了数据仍然可能并不容易reverse)。

这些是性质的散列函数。

一个词谨慎的,虽然,MD5不应该再使用,因为漏洞已经被发现。检查的'脆弱'部和外部的联系详细说明这些攻击。 http://en.wikipedia.org/wiki/Md5 你可以让一个MD5碰撞通过改变只有128位在信息。

沙-1被安全简单的散列虽然有一些攻击,将使其较弱对资金的实体(政府、大公司)

沙-256是一个安全的起点对技术在未来几十年。

然而共识的问题的答案:"为什么不MD5hash值可逆?"是因为"无限数量的输入串将产生相同的输出。"

这是真实的任何散列函数,但它并不是本质的一个加密散列函数。

短输入串例如密码在理论上是可能扭转了加密散列函数,但是它应该是计算上不可行的。I.e。你的计算会跑太长是有用的。

为此原因不可行性的是,输入是如此彻底的"混合在一起的"散列值就不可能解开它与任何较少的精力于暴力攻击计算的散列值为所有输入

"你为什么不MD5hash值可逆?"是因为"无限数量的输入串>将产生相同的输出"

因此,它不能够反向散列函数(得到相同的输入)。加密散列函数是碰撞防,这意味着它也很难找到另一个输入值的地图相同的输出(如果你的散列函数是国防部2:134mod2=0;现在你不能得到134回来的结果,但我们仍然可以找到数2的相同的输出价值(134和2碰撞)).

当输入比较小的方框的大小, 填充 是用来适应这一块的大小。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top