是否存在“自反”哈希算法?


11

是否存在一类哈希算法,无论是理论上的还是实用的,因此根据以下给出的定义,该类中的算法可以被认为是“自反的”:

  • hash1 = algo1(“输入文字1”)
  • hash1 = algo1(“输入文字1” + hash1)

+运算符可以是串联或任何其他指定的操作,以将输出(hash1)组合回输入(“输入文本1”),以便算法(algo1)将产生完全相同的结果。即输入和输入+输出冲突。+运算符必须合并两个输入的全部,并且算法不得舍弃部分输入。

该算法必须在输出中产生高熵。在密码上很难将输出反转回一个或两个可能的输入,但不一定如此。

我不是数学家,但是一个很好的答案可能包括为什么这样一类算法不存在的证明。但是,这不是一个抽象的问题。我真的有兴趣在系统中使用这种算法(如果确实存在)。

这是一个问题的重复副本,该问题最初发布于/programming/4823680/reflexive-hash



2
您是否对所有输入文本或一个输入文本都拥有此属性感兴趣?如果您希望它能容纳所有输入文本,那么构造冲突在设计上是微不足道的,因此我认为不能将其视为良好的哈希函数。
彼得·泰勒

有人想对包含自己的哈希值的文件进行哈希处理!;)
Raphael11年

@Peter Taylor-我正在寻找一个函数,该函数按任意输入文本所述工作。每个不同的输入都会产生一个哈希,该哈希通常与其他所有可能的输入具有较高的互熵。就像一个很好的不可逆的散列函数一样。但是,我要查找的哈希函数不需要具有不可逆性。高熵就足够了。

@Raphael-是的,这是一种简洁的表达方式。

Answers:


9

我给出一个满足要求的简单构造。我提供它只是为了回答“自反”哈希函数的存在

为在输出中产生高熵的任何哈希函数。假设G将任意长度的二进制字符串散列为k位二进制字符串,其中k为任何正整数。让+表示串联运算符,让| x | 表示二进制字符串x的长度。GGķķ+|X|X

在输入x上定义哈希函数,如下所示:HX

  1. 如果,然后ħ X DEF = g ^ X |X|ķH(x)=defG(x)
  2. 如果,让大号- [R| X | - ķ 比特的前缀和ķ比特的后缀X,分别。也就是说,x = L + R| R | = k。如果R = H L (其中H L 递归计算的),则H x |x|>kLR(|x|k)kxx=L+R|R|=kR=H(L)H(L); 否则,Hx def = GxH(x)=defRH(x)=defG(x)

如我所说,这是一个琐碎的结构。它可以应用于任何实际的哈希函数(例如MD5,SHA-1等)或理论上的哈希函数。


我对编码领域不是很确定,但是仍然有很高的熵吗?通过构造,它肯定具有与以前一样多的两倍的相同哈希值。它们成对的非常接近。(哦,应该是2的第二行中的| R | = kH|[R|=ķ
Raphael

@Raphael:感谢您指出错别字(已更正)。除非在R = G(L)的条件下,否则H与G具有相同的熵。根据要求,在这种情况下,H(x)应等于R。因为“反射性”要求阻止我们更改输出。
MS Dousti 2011年

@Sadeq:是否要求递归计算哈希函数?我以任何方式从这一事实中受益的算法?
Yasser Sobhdel

@Yasser:如果您查看问题历史记录,您会发现我的第一封信不需要递归。然而,前者的答案是不计算类似的情况下,正确的:这应该是^ h 中号的定义。H中号+H中号+H中号++H中号H中号
MS Dousti 2011年

Sadeq,谢谢。我相信这可以回答我的问题。您已经在适当的警告中提出了答案。从务实的角度来看,我喜欢它是任何众所周知的算法(例如SHA-1)的叠加的事实。如果我正确理解,您的算法将继续递归计算哈希,直到遇到所需的冲突,然后停止。在这种情况下,也许我们可以将其称为天真的解决方案。我担心的是,似乎存在一个隐式假设,即嵌入式算法(SHA-1说)最终会达到所需的冲突哈希,因为
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.