加密哈希函数的属性

时间:2017-02-04 16:42:33

标签: hash blockchain

在比特币课程的第1周讲座中,讨论了加密哈希函数的3个属性:

碰撞阻力:如果找到两个值x和y是不可行的,那么哈希函数H被认为是抗冲突的,这样x!= y,但H(x)= H(y)。

隐藏:如果:当从具有高熵的概率分布中选择秘密值r时,哈希函数H隐藏,则给定H(r‖x),找到x是不可行的。 ‖表示连接两个字符串。

拼图友善。如果对于每个可能的n比特输出值y,如果从具有高熵的分布中选择k,则哈希函数H被认为是难以使用的,那么找到x使得H(k‖x)= y是不可行的。在时间上明显少于2 ^ n。

拼图友好似乎是对隐藏的更详细描述。 2之间有什么显着差异吗?哈希函数是否具有1个属性,但不是两个属性?

6 个答案:

答案 0 :(得分:8)

对结构进行重组使我对它更加清晰。

碰撞性:

给定:x和h(x)

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

隐藏:

鉴于:h(r | x)

秘密:x和极不可能随意选择的r

很难找到:y使得h(y)= h(r | x)。

这与抗碰撞性不同,因为y = r | x无关紧要。

益智友好性:

鉴于:z和非常不可能随机选择的r

很难找到:x使得h(r | x)= z(但它应该存在)。

这与碰撞阻力不同,即使我们有一个算法来找到碰撞y,解决方案必须以r开头的约束可能使得y不是解决方案。

这与隐藏不同,类似地,因为r是解谜友好性的约束,但不是隐藏属性中的约束,因为在这种情况下y不需要等于r | x。 此外,为了谜题,x事先并不为人所知(甚至不是拼图提议者)。

答案 1 :(得分:6)

我有同样的想法,差异确实很微妙。我不得不考虑这一段时间。

假设你有一个哈希哈希哈希。你选择x'和一个随机的nonce r',计算y'= BadHash(r'| x'),并给我y'。事实证明,如果x'是UTF8编码的英文文本,我可以告诉你x'是什么,并且(虽然不是绝对必要的),我甚至可以告诉你r'。如果x'碰巧只是一个随机的位串,我就不走运了。但无论如何,这显然不是隐藏的哈希。

现在拼图:我给你一个值Y',一个随机选择的值R'(比如说“11110011 ... 100”),并要求你找一个x,这样BadHash(R'| x)= Y”。好消息:事实证明Y'= BadHash(00101 ... 0001 | UTF8(“比特币是通货紧缩”))。所以因为BadHash是非隐藏的(加),你可以确定一个R(即00101 ... 0001)和x(即UTF8(“比特币是通货紧缩”)),这样BadHash(R | x)= Y '但这对你没有帮助,因为这个谜题指明你需要一个与不同的R一起工作的x,即“11110011 ... 100”。所以你还没有解决这个难题。

然后,您会看到这两个属性不相同。至于是否确实存在一个属性而不是另一个属性 - 我不知道。

答案 2 :(得分:4)

这门课程非常令人困惑,写得很差。

在隐藏问题中,你试图找到x,知道值H(r | x)(当然知道H)。但是你不知道r!例如,x的集合可以是{0,1},但是你不能在0或1之间决定,因为向x添加一个秘密r会混合所有可能的哈希值。

在拼图友好问题中,给出k(或r)!这里的问题是尝试所有可能的x,直到找到一个给出正确的哈希值y。所以你最终会找到一个,但这需要时间。 (在定义中使用k(或r)的原因令人困惑,它只是意味着我们不能通过在之前反转H来作弊)。

在隐藏问题中,即使您之前尝试了所有可能的r和x。它不会起作用,因为你可以找到r',x''''''''这样H(r' | x')= H(r'' | x'')。既然你不知道哪个r是正确的那个,那么就找不到x。

答案 3 :(得分:4)

让我们:y = H(x|r)。 输出为 y ,输入为 r x

隐藏财产:

给定哈希函数(y)的输出,找到输入(x)不可行注意,没有给出r。

益智友好的财产:

给定哈希函数(y)的输出和输入(r)的一部分,找到输入(x)困难

答案 4 :(得分:0)

考虑这个算法:取任何文本文件并假设a = 1,b = 2,c = 3等等并计算所有字母的总和,如果净额小于5则赢得奖励。假设你没有第一次赢,所以你在这个文件的末尾添加一些任意文本(nonce)并再次进行计算,直到你赢了。

这个算法非常适合拼图,但不善于隐藏,因为你可以很容易地猜出nonce会对输出产生什么影响。

答案 5 :(得分:0)

假设x是掷硬币的结果,即。 x是0或1.给定H(x)没有人应该能够找到x,但是......给定y = H(x),攻击者可以很容易地找到x,因为只有两个可能的哈希值。他计算H​​(0)和H(1)并检查哪一个等于y。

现在,假设您在x之前添加一个大的随机密钥,并计算H(k x)。如果密钥是秘密的,攻击者就无法轻易找到x,因为他必须尝试很多可能的密钥。

这实际上是在课程幻灯片:-),但没有用文字解释。