Hash 用暴力破解单向散列属性和证明冲突之间的区别
对于任何哈希函数,无论从概念上还是其他方面来说,上述两种操作之间的区别是什么。我以以下方式处理这个问题:Hash 用暴力破解单向散列属性和证明冲突之间的区别,hash,collision-detection,Hash,Collision Detection,对于任何哈希函数,无论从概念上还是其他方面来说,上述两种操作之间的区别是什么。我以以下方式处理这个问题: H=hash(someplaintext) n=0 while 1: if hash(str(n))==H: print n n+=1 这两种性质都可以用这种方式证明,有什么问题吗?忽略效率、内存使用或任何此类属性。请严格按照正确性回答我的问题我可能没有正确理解你的问题,但以下是我的看法: 暴力强制碰撞始终有效,无论其是否具有抗碰撞性。单向散列函数并不意味着
H=hash(someplaintext)
n=0
while 1:
if hash(str(n))==H:
print n
n+=1
这两种性质都可以用这种方式证明,有什么问题吗?忽略效率、内存使用或任何此类属性。请严格按照正确性回答我的问题我可能没有正确理解你的问题,但以下是我的看法: 暴力强制碰撞始终有效,无论其是否具有抗碰撞性。单向散列函数并不意味着不可能找到冲突,它意味着对手找到冲突的机会微乎其微,这通常由
\epsilon < \frac{1}{p(n)}
\epsilon<\frac{1}{p(n)}
其中p(n)
表示一个多项式,表示n
(请原谅语法)
在你的例子中,你只是发现了一个冲突,这并不能证明哈希函数不是单向的,因为你在循环所有的可能性,这意味着你没有打破1/p(n)条件。“单向”意味着给定一个函数输出,你找不到匹配的输入,除非你尝试了许多潜在的输入并获得了运气。冲突是指找到两个不同的输入,它们产生相同的输出,而对所述输出没有任何预定义的约束
好的(加密)散列函数应该具有三个经典属性:
- 对前像的抵抗力:给定x,应该不可能找到m,使得h(m)=x
- 对第二个前像的抵抗力:给定m,发现m'与m不同是不可行的,因此h(m)=h(m')
- 抗碰撞性:不可能找到相互不同的m和m',例如h(m)=h(m')
就生日而言,这意味着如果你随机选取20个人,其中两个人的生日很可能相同,但你无法选择哪一天或哪一个人。另一方面,如果你想找到与你生日相同的人,那么你必须平均抽样调查365人。我完全同意你所说的,但我认为你误解了我的问题,我想问的是,在发现碰撞和用暴力破坏一条路之间是否有任何区别。从我读过的所有文章和你的评论来看,“蛮力”并不是指在不使用任何函数内部结构知识的情况下应用原始能力。生日攻击是一种“暴力”攻击,因为它将函数作为一个黑匣子处理(实际上,首选术语是“一般攻击”)。暴力冲突和暴力前照之间存在巨大的成本差异。我同意你的说法,但我的问题是“暴力破坏单向属性”和“冲突检测”之间的区别