【问题标题】:properties of a cryptographic hash function密码散列函数的属性
【发布时间】:2017-06-21 22:08:12
【问题描述】:

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

防碰撞:如果无法找到两个值 x 和 y 使得 x != y ,而 H(x)= H(y),则称哈希函数 H 是防碰撞的。

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

益智友好。如果对于每个可能的 n 位输出值 y ,如果 k 是从具有高熵的分布中选择的,则认为哈希函数 H 是谜题友好的,那么找到满足 H(k ‖ x) = y 的 x 是不可行的时间明显小于 2^n。

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

【问题讨论】:

  • 哪个课程?有几种。从普林斯顿?

标签: hash cryptography blockchain


【解决方案1】:

考虑这个算法:获取任何文本文件并假设 a=1、b=2、c=3 等等,然后计算所有字母的总和,如果净总和小于 5,您将赢得奖项。假设您第一次没有获胜,因此您在此文件的末尾添加一些任意文本(随机数)并再次进行此计算,直到您获胜。

这个算法对谜题很友好,但不擅长隐藏,因为你可以很容易地猜出随机数会对输出产生什么影响。

【讨论】:

    【解决方案2】:

    我也有同样的想法,差别确实很微妙。我不得不考虑一下。

    假设你有一个哈希,BadHash。你选择 x' 和一个随机数 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("Bitcoin is deflationary"))。所以因为 BadHash 是非隐藏的(加号),所以可以确定一个 R(即 00101...0001)和 x(即 UTF8("Bitcoin is deflationary")),这样 BadHash(R|x) = Y ' 但这对您没有帮助,因为该难题指定您需要一个与不同 R 一起使用的 x,即“11110011...100”。所以你还没有解决这个难题。

    那么,您会发现这两个属性并不等价。至于是否确实存在具有一个属性但没有另一个属性的哈希——我不知道。

    【讨论】:

    • 那么唯一的区别是是否给出了k(或r)?
    【解决方案3】:

    重新定义定义让我更清楚了。

    防撞:

    给定: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(甚至连谜题提议者都不知道)。

    【讨论】:

    • 为了益智游戏:但是如果您知道 x 是 0 或 1 怎么办?给定 r 和 z,你可以很容易地找到 x。您只需尝试 2 个选项。 ——
    • @user2304458 是的,该属性表示没有比尝试所有可能的输入更好的解决方案(这个计算难题)。
    【解决方案4】:

    这门课程非常混乱且写得不好。 阅读最后的编辑,它提供了另一种理解这些定义的方法,而且可能是正确的 在隐藏问题中,您试图找到 x,知道值 H(r|x)(当然也知道 H)。但你不知道!例如,x 的集合可能是 {0,1},但您无法在 0 或 1 之间做出决定,因为将秘密 r 添加到 x 会混合所有可能的哈希值。

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

    在隐藏问题中,即使您之前尝试了所有可能的 r 和 x 对于 H。它不起作用,因为您可以找到 r',x',r'',x'' 使得 H(r'|x') =H(r''|x'')。而且由于您不知道 r 的哪个值是正确的,所以不可能找到 x。

    **编辑:现在重新阅读定义,我认为函数 H(k|.): x-> H(k|x) 是各方都知道的。隐藏 x 意味着你可以用函数 H(k|.) 隐藏 x 如果我给你值 H(k|x) 和函数 H(k|.) 那么你就找不到 x。因此,我给出的无法在 0 和 1 之间进行选择的示例是正确的。您可以“解决难题”(=solve for y=H(k|x)),但不能解决 x。

    解谜友好意味着如果我给你 H(k|x) 和函数 H(k|.) 那么你就找不到 A 值 x' 使得 H(k|x)=H(k|x ') 不尝试所有 x。

    考虑到区块链中的应用程序,双方都知道函数 H(k|.) 确实更有意义

    【讨论】:

    • 我同意你的观点,即在谜题友好性的定义中,是否将 k 提供给解谜者并不清楚。隐藏问题也是如此。你有更好的建议来学习区块链和加密货币的基础知识吗?
    • @chriselgoog 2 年后重读...给出这些定义的方式你可以用不同的方式理解它们。为了解谜的友好性,如果给出了k,则相当于将H反转。也许我弄错了,从当时看书的上下文来看,并没有给出k。那么谜题友好性意味着添加随机数不会“简化” H(以至于您可以在不到 2^n 次试验中逆转它)。它实际上更有意义。抱歉,我不知道其他书,但我确定现在有。如果我必须重新学习,我会从密码学/密码学开始
    • 哪个课程?有几种。从普林斯顿?
    • @ceillac 我认为在普林斯顿的课程中,他明确表示给出了 k(或 id 或 r)。如果给出了,就像你在答案中所说的那样,那么你可以在之前反转 H,不是吗?我认为这也是您在评论中所说的,所以也许编辑答案会更好?
    • @Rony 我添加了一个编辑,但也保留了第一个版本,因为我认为两者在数学上都是正确的
    【解决方案5】:

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

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

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

    【讨论】:

      【解决方案6】:

      让我们拥有:y = H(x|r)。 这里输出是y,输入是rx

      隐藏属性:

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

      适合解谜的属性:

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

      【讨论】:

        猜你喜欢
        • 2020-03-09
        • 2021-08-14
        • 2018-09-21
        • 2013-06-29
        • 1970-01-01
        • 2011-02-18
        • 2014-08-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多