是否可以构造具有以下属性的哈希函数?

如果您的hash(A)和hash(B)的A和B为整数,则可以判断A是否大于B- -但是不知道A和B的实际值。

甚至更好:如果您具有hash(A)和hash(B),且A和B是字符串的有序集合,则可以判断出哪些元素A与B的重叠(例如,在有序集合中位于位置1和3的那些)-但是不知道A和B的实际内容。

评论

您是否正在寻找姚明百万富翁问题的解决方案? (是A> B,没有公开A和B是什么)

您应该查看揭示加密的顺序。 Wu提供的2015年结果非常简单,我花了几个小时就实现了,包括与REST API集成。

那应该读为“以吴为作者”

这是多线性映射之一还是仅使用PRF的映射?您愿意将@ ThomasM.DuBuisson的来源发送给我吗?

如果您知道hash(A),并且能够计算任意x的hash(x),那么您停止进行二进制搜索来查找A的原因是什么?

#1 楼

对于哈希函数$ h:\ {0,1 \} ^ * \ rightarrow \ {0,1 \} ^ k $,这是不可能的。这是因为可能的输入多于输出(鸽子洞原理)。这意味着对于$ ​​A
添加:解决一些评论;请注意,此答案仅讨论定义为以下函数的哈希函数:域是所有位字符串的集合,共域是某个固定长度$ k $的位字符串的集合。它还假定输入$ A $和$ B $被解释为整数(如问题中所指定)。

该参数仅使用这样的哈希函数必须具有冲突。实际上,我们可以将参数推广到具有冲突的任何哈希函数(即,也可以使用具有不同域和共域的函数)。请注意,该参数仅假设存在冲突,因此即使哈希函数具有抗冲突性,该参数也成立。

该论据说,对于这样的哈希函数,将有一些输入对,这些输入定义了哈希函数冲突,其中不能仅从哈希中确定顺序。在其他输入对上发生的事情,该参数未直接说明任何内容。

但是,正如一些评论所指出的那样,如果我们定义哈希函数以完全包含没有冲突的函数,则该参数并不适用于所有哈希函数。但是,对于不使用我的参数的函数,我们可以使用fgrieu的参数来表明具有所需属性的哈希函数至少不能抗像前。

评论


$ \ begingroup $
我将选择一个作为答案,因为我比其他解释更快地理解了这种解释。 :)
$ \ endgroup $
–RudolfKaiser
16年1月6日在15:42

$ \ begingroup $
但是,这确实假定输入域的完整顺序。如果等价类的数量不超过可能的输出数量,则信鸽原则不成立。但是这里假设A和B是整数,等价类的数量是(字面意义上的)无限。
$ \ endgroup $
– MSalters
16年1月7日在15:26

$ \ begingroup $
我认为证明并没有真正意义,但是要在评论中描述这一点很长,因此我发布了答案crypto.stackexchange.com/a/31765/1915
$ \ endgroup $
– Miracle173
16年1月7日在23:29



#2 楼

不,只要对手能够获得任意输入的功能输出,就无法构造具有所需属性的功能$ \ operatorname {Hash} $(即使该功能使用了未知的附加秘密参数)证明草图:给定$ A = \ operatorname {Hash}(X)$表示未知整数$ X $,我们可以找到带有$ O($ log(X )))使用二分搜索对$ \ operatorname {Hash} $进行$求值。

加法:如果函数的有限输入域小于,上述参数仍然有效(与其他两个答案相反)输出域(例如$ \ {0,1 \} ^ j \ to \ {0,1 \} ^ k $与$ j

评论


$ \ begingroup $
如果范围不小于域,那么您真的可以将其称为哈希函数吗?其他答案适用于常规哈希函数,而不仅仅是具有密码属性的哈希函数。因此,这些实际上更通用。当然,您的观点也很好。
$ \ endgroup $
– Guut Boy
16年1月7日,12:21



$ \ begingroup $
我们没有哈希的精确定义;仅限60字节输入的SHA-512可以说是哈希值@Guut Boy
$ \ endgroup $
–fgrieu♦
16年1月7日,12:50



$ \ begingroup $
攻击者将需要对加密文本中的每一位进行一次哈希函数调用-此外,其尝试方式也必须非常具体。因此,能够获得任意输入的输出是不够的,如果产生此输出的程序在我们的控制之下,我们可以通过节流技术来阻止他的搜索。
$ \ endgroup $
–塔米尔
16年1月7日在13:54

#3 楼

属性:可以从$ \ text {hash}(A)$和$ \ text {hash}(B)$中确定$ A> B $,而$ A $和$ B $是整数


@fgrieu的答案表明,加密散列函数
不具有此属性,因为它会变得不安全。
对于所有散列函数,包括非加密散列函数,@的答案GuutBoy
指出哈希函数不能具有该属性,但参数不能使我信服。
当然,如果只有一个,就不可能推论$ A \ gt B $是正确的知道$ h(A)$等于$ h(B)$,
,但是如果散列函数的值范围足够大,则您必须处理$ h(A)$的概率为$ h(B)$与$ h(A)= h(B)$可以忽略不计。
因此,如果您有一个散列函数可以根据$ h()来确定$ A \ gt B $ A)$和$ h(B)$,如果$ h(A)\ ne h(B)$
,那么您可以将其用于您计划的程序(您没有告诉您为什么需要这样的功能)
@GuutBoy的参数并不能证明这种哈希函数的存在。

有一种特殊类型的哈希函数,称为完美哈希函数

< br完善的集合S哈希函数是一种哈希函数,它可以将S中的不同元素映射到一组整数而不会发生冲突。


因此,完美的哈希函数是injectiv。声明哈希函数将较大的集合映射到较小的集合似乎是错误的。
本文还定义了具有必需属性的
顺序保留和单调最小完美哈希函数。

如果散列函数是单射的,则它是具有此属性的散列函数:对于$ h(A)$和$ h(B)$计算$ A $和$ B $并确定$ A $ \ gt B $。
计算需要花费很长时间或几乎是不可能的,但是$ A $和$ B $的定义很明确,因为$ h $是injectiv。
但是,现在假设您具有一个散列函数,可以将较大集中的值映射到较小集中,并且具有良好的统一属性。大多数哈希值已在其上映射了一个或两个值。
因此,如果您有两个哈希值$ h(A)$和$ h(B)$,则很有可能至少对于其中之一,例如$ A $,
存在另一个值$ C $,使得$ h(A)= h(C)$。对于许多这样的元组$ A $和$ B $,我们有$ A> B $和$ B> C $。
因此,对于很多值,如果$ A> B $,则无法从$ h(A)$和$ h(B)$中进行判断。
对于此类散列函数,该属性不能容纳太多元组$ A $和$ B $的组合。


评论


$ \ begingroup $
从技术上来说,您的观点是正确的,但是由于这是crypto.se,因此我们确实假定“哈希函数”具有加密含义。有关非加密哈希的问题被认为不在主题之列。
$ \ endgroup $
–otus
16年1月8日在15:29

#4 楼

哈希函数的输出大小固定为$ n $位。您可以提供的最大输出数量为$ 2 ^ n-1 $。
如果您能够构造$ H $函数,那么对于$ 2 ^ n $以下的任何数量,它将按要求保留顺序。因此$ H $的身份为:
$ 0 \ leq H(0)
结论,不能有这样的哈希函数。

评论


$ \ begingroup $
这是错误的。如果A $ \ endgroup $
– Miracle173
16年1月7日在9:41

$ \ begingroup $
如果您的hash(A)和hash(B)的A和B为整数,则可以判断A是否大于B,对于$ a H(b)$。我选择了第一个选项。您只需进行一项测试即可知道$ H $中使用的是哪个选项,因此它不会影响解决方案。
$ \ endgroup $
– Biv
16年1月7日,11:48

$ \ begingroup $
不,这并不意味着$ H(a) H(b)$。这意味着您有一个函数$ f $,如果$ a $ \ endgroup $
– Miracle173
16年1月7日在12:41



#5 楼

通常是,但是哈希函数不会是加密的。


我给你h(X)
选择A,B,找到h(A),h(B )
比较h(X)> h(A)
比较h(B)> h(X)
因此h(A)将A变大,将B变小
重复2.〜6。,直到A + 2 = B
现在A +1 = X
您从h(x)
因此h()不具有原像抗性


评论


$ \ begingroup $
这与fgrieu一样。
$ \ endgroup $
– Biv
16年1月10日在12:12