Hash 区分密码特性:隐藏和抗冲突

Hash 区分密码特性:隐藏和抗冲突,hash,cryptography,hash-collision,Hash,Cryptography,Hash Collision,我从以下定义中看到了一些澄清: 碰撞阻力: 给定:x和h(x) 很难找到:y与x不同,因此h(y)=h(x) 躲藏: 给定:h(r | x),其中r | x是r和x的串联 秘密:x和一个极不可能的随机选择的r 很难找到:y使得h(y)=h(r | x)。其中r | x是r和x的串联 这与碰撞阻力不同,因为y=r | x与否无关 我的问题: 这是否意味着,如果没有秘密r,则任何哈希函数h(x)都是非隐藏的,即哈希是h(x),而不是h(r | x)?其中r | x是r和x的串联 例子: 假设我制作一

我从以下定义中看到了一些澄清:

碰撞阻力: 给定:x和h(x)

很难找到:y与x不同,因此h(y)=h(x)

躲藏: 给定:h(r | x),其中r | x是r和x的串联

秘密:x和一个极不可能的随机选择的r

很难找到:y使得h(y)=h(r | x)。其中r | x是r和x的串联

这与碰撞阻力不同,因为y=r | x与否无关

我的问题: 这是否意味着,如果没有秘密r,则任何哈希函数h(x)都是非隐藏的,即哈希是
h(x)
,而不是
h(r | x)
?其中r | x是r和x的串联

例子:
假设我制作一个简单的散列函数
h(x)=g^x mod(n)
,其中g是组的生成器。散列应该是抗冲突的,具有
p(x_1!=x_2,h(x_1)=h(x_2))=1/(2^(n/2))
,但我认为它也是隐藏的?

散列函数可以提供一定的抗冲突性

承诺必须隐藏起来

与流行观点相反,这些原语是不一样的

严格地说,您认为的哈希函数不能提供冲突抵抗:总是存在冲突。理论上,输入空间是无限的,但函数总是产生固定长度的输出。术语实际上应该是“H是从一系列抗碰撞功能中随机抽取的”。然而,在实践中,我们只会将该函数称为抗冲突函数,而忽略它在技术上不是

承诺必须提供两个属性:隐藏和绑定。绑定意味着您只能将其打开到一个值(这就是与碰撞阻力的关系所在)。隐藏意味着不可能了解其中包含的元素的任何信息。这就是为什么一个安全的承诺必须使用随机性(或者名词,但说到底做了什么,这些都可以归结为相同的)。想象一下任何散列函数,不管你希望它多么完美:如果你愿意,你可以使用随机预言机。如果我给你一个值为
m
的散列
H(m)
,你可以计算
H(0)
,比较结果并了解
m=0
,这意味着它不是隐藏的

这也是为什么
g^x
不是一个隐藏承诺方案的原因。它是否绑定取决于您允许什么作为消息空间:如果您允许所有整数,那么简单的攻击
y=x*phi(n)
会产生
H(y)=H(x)

作品如果您将其定义为
ℤ_p
,其中
p
是组顺序,那么它是完全绑定的,因为从理论上讲,它是一个信息抗冲突的单向函数。(由于消息空间和目标空间的大小相同,因此这次单个函数实际上可以真正防止冲突!)

@PascalCuoq是的,我为Clarity编辑了这篇文章;它显然属于我们。