打字猴:1.70386445e+09
1703864450 然后我们问我们的对手,在他没有见到抛硬币,而只见到哈希函数的输出的前提下说出哈希函数的输入字符串(很快我们就知道为什么要玩这个游戏了)。为了回答问题,对手会简单计算“正面”字符串的哈希值及“反面”字符串的哈希值,然后对手便可以知道他得到的是哪一个。这样,只需要几步,对手就能反解出输入值。
1703864451
1703864452 对手能够猜出字符串,这是因为x只有两个可能,他可以很轻易地将两个可能对应的哈希值计算出来。为了能够实现隐秘性,我们需要x的取值来自一个非常广泛的集合,也就是说,仅仅通过尝试几个特定的x,就能找到输出值的方式将不会发生了。
1703864453
1703864454 现在的问题是:在类似抛硬币的“正面”、“反面”实验中,如果我们想要的反解的输入值并非来自分散的集合,我们是否还能得到隐秘性?幸运的是,对于这个问题答案是肯定的!我们甚至能够通过与另一个较为分散的输入进行结合,而将一个并不分散的输入进行隐秘。现在我们可以更精确地表示隐秘的含义了(双竖线‖为连接符号,代表把一系列事件、事情等联系起来)。
1703864455
1703864456 隐秘性 哈希函数H具有隐秘性,如果:当其输入r选自一个高阶最小熵(high min-entroy)的概率分布,在给定H(r‖x)条件下来确定x是不可行的。
1703864457
1703864458 在信息论中,最小熵是用于测试结果可预测性的手段,而高阶最小熵这个概念比较直观描述了分布(如随机变量)的分散程度。具体来说,在从这样分布中取样时,我们将无法判定取样的倾向。举个具体的例子,如果r是从长度为256位的字符串中随意选出的,那么任意特定字符串被选中的概率为1/2256,这是一个小到几乎可以忽略的取值。
1703864459
1703864460 应用:承诺
1703864461
1703864462 现在来看一下隐秘性的应用。具体来说,我们把想做的事情称为承诺(commitment)。这里承诺是一个数字化过程,可以类比为以下动作:首先选定一个数字,将数字装进信封,然后将该信封放到一个人人都看得到的桌子上。这样做以后,可以说你就信封里的数字做出了承诺,在打开信封前,虽然你已经做出了承诺,对其他人来说它还是秘密。在之后,你可以打开信封,来展示承诺的数值。
1703864463
1703864464 承诺协议 一个承诺协议方案由两个算法构成:
1703864465
1703864466 ● com:=commit(msg, nonce),承诺函数将信息(msg)和一个临时随机数(nonce)作为输入,输出就是一个“承诺”。
1703864467
1703864468 ● verify(com, msg, nonce),验证函数将某个承诺输出(com)、临时随机数(nonce)及信息(msg)作为输入,如果com==commit(msg, nonce),则返回“真”(true);反之则返回“假”(false)。
1703864469
1703864470 我们要求以下两个安全特性要成立:
1703864471
1703864472 ● 隐秘性:已知com,没有可行的方法找到msg。
1703864473
1703864474 ● 约束性:没有可行的办法找到两组(msg, nonce)和(msg’, nonce’),msg≠msg’,而commit(msg, nonce)==commit(msg’, nonce’)。
1703864475
1703864476 为了使用承诺方案,我们首先需要产生一个临时随机数。然后将这个临时随机数与承诺信息msg一起代入承诺函数,计算承诺函数输出值com,然后公布该输出。这个过程就如同将封好的信封放到一个人人能看到的桌上那样。之后,如果我们希望展示之前的承诺值,我们首先公布用于产生承诺的临时随机数,并公布信息msg。此时任何人都可以验证这时公布的msg是否为之前承诺,这个阶段就如同打开信封。
1703864477
1703864478 对于每次的承诺值,你都需要选择新的随机值,这一点很重要。在密码学中,术语nonce是指,该取值只能使用一次。
1703864479
1703864480 以上两个安全特性决定了这一算法就如同密封及打开信封。第一,如果仅仅知道com,即承诺函数的输出,就如同只看信封并不能得到信息内容;第二就是约束性,这就保证了你一旦承诺信封内的内容,就不能再改变主意。也就是说,我们无法找到两个不同的信息,当你在承诺一个信息后,而又声称你承诺了另一个信息。
1703864481
1703864482 我们如何在承诺协议中保证隐秘性和约束性这两个性质成立呢?在讨论这一点之前,我们需要讨论如何执行承诺方案。我们可以通过使用加密的哈希函数来达到目的,考虑如下承诺协议实施方案:
1703864483
1703864484 commit(msg, nonce):=H(nonce‖msg)
1703864485
1703864486 其中,nonce为长度为256位的临时随机数。
1703864487
1703864488 为承诺一段消息,我们首先生成一个256位的临时随机数,然后将这个临时随机数与信息链接,并返回这个链接值的哈希值,来作为承诺输出。为了便于验证,我们还要设定其他人来计算一下临时随机数与信息链接之后的哈希值,比对一下计算结果是否与承诺输出相同。
1703864489
1703864490 再来看一下我们的承诺方案要求的两个特性,如果我们将承诺和验证换成H(nonce‖msg),那么这些特性就变成:
1703864491
1703864492 ● 隐秘性:已知H(nonce‖msg),没有可行方法找到msg。
1703864493
1703864494 ● 约束性:没有可行方法找到两对(msg, nonce)和(msg’, nonce’),msg≠msg’,而H(nonce‖msg)==H(nonce’‖msg’)。
1703864495
1703864496 承诺的隐秘特性正是我们要求哈希函数要具备的隐秘性,如果将一个解密钥匙选定为256位的随机值,那么由隐秘性得出,如果解密钥匙与信息链接,那么仅仅从哈希函数的输出中恢复信息就是不可行的。约束性隐含在哈希函数的碰撞阻力特性中[3],如果哈希函数具有碰撞阻力,那么我们将不能找到不同的msg及msg’值,而H(nonce‖msg)=H(nonce’‖msg’),如果这种情况发生,将构成碰撞。
1703864497
1703864498 因此,如果哈希函数H具有碰撞阻力及隐秘性,从安全特性上来讲,这个承诺方案将有效。
1703864499
[ 上一页 ]  [ :1.70386445e+09 ]  [ 下一页 ]