1703868437
每个参与者选择一个大的任意字符串。爱丽丝选x,鲍勃选y,卡罗尔选z。
1703868438
1703868439
每个参与者发布对应的哈希函数值H(x)、H(y)、H(z)。
1703868440
1703868441
每个参与者验证H(x)、H(y)、H(z)具有明显的差异性(否则放弃这个协议)。
1703868442
1703868443
第二回合:
1703868444
1703868445
三个参与者分别披露他们所选的字符串x、y和z。
1703868446
1703868447
每个参与者查证这些字符串是否与第一回合里发布的函数值相吻合。
1703868448
1703868449
最后的输出是(x+y+z)%3。
1703868450
1703868451
这种数据协议之所以能成功是因为以下因素:第一,因为函数的输入x,y,z是大的任意数,没有人可以在第一回合之后预测其他人的输入;第二,如果爱丽丝按照规则任意地选择她的输入,她可以相信,不管鲍勃和卡罗尔是否选择了随机数,最后的输出结果也是随机的。
1703868452
1703868453
公平性
1703868454
1703868455
要是有人不披露约定怎么办?在这个协议的第二回合里,假设卡罗尔一直等到爱丽丝和鲍勃披露他们的秘密随机数,然后,在披露之前,意识到她会输掉这一局,她就有可能拒绝公布她的随机数——她可以说她忘记了或是假装下线。爱丽丝和鲍勃可能会怀疑,但他们也没有什么好的办法去追查。
1703868456
1703868457
我们所要做的是立下一个规矩:参与者若是做出承诺,则必须在一定的时间内披露所选的随机数。在密码学里,这个特性叫作公平性。比特币提供了一个非常好的解决方法。
1703868458
1703868459
比如爱丽丝想要做出一个有时限的约定承诺,但鲍勃是唯一对此有顾虑的。第一,爱丽丝先设置一定的保证金,比特币支出交易的脚本可以用来规定,这笔保证金只能用以下两种支付情形:第一种支付情形是必须同时有爱丽丝和鲍勃两人的共同签名;第二种支付情形是只要爱丽丝披露了她的随机数,以后消费这笔交易,就只需要有爱丽丝的签名。如果爱丽丝所选择的随机字符串是x,那么输出脚本(ScriptPubkey)会包括哈希函数H(x)的值。
1703868460
1703868461
接下来,爱丽丝和鲍勃会同时签下一个交易,把这个保证金支付给鲍勃(两种情形之一)。但为什么爱丽丝会同意这样做呢?这个交易带有一个nLockTime值来保障鲍勃不能在时间点t之前来赎取保证金。因为,在此时间之前,爱丽丝只要愿意披露她的约定随机值,她就可以赎回这个保证金,所以她的这个签名交易是安全的。见图9.5。
1703868462
1703868463
1703868464
1703868465
1703868466
图9.5 在有时限的哈希函数约定中使用输出脚本和输入脚本的交易输出
1703868467
1703868468
如果爱丽丝在弃局之前没有披露她的约定随机数值,那么鲍勃就可以在时间点t之后赎取该保证金。没有人逼迫爱丽丝披露她的随机数,但如果她不披露,她会因此失去预设的保证金。
1703868469
1703868470
我们如何用这个有时限的函数约定来实现安全的博彩系统?其实,架构和之前几乎一样,差别在于,我们不再采用简单的函数约定,而是采用有时限的函数约定。任何一方,要赎回这笔保证金就必须把正确的随机数值x披露出来;如果在最后期限到来时还不披露出他的随机数值,就会放弃他的保证金,以用来补偿其他两个玩家。
1703868471
1703868472
可以在比特币系统上实施这个博彩系统。但这个系统有些复杂,而且有时限的函数约定还要求多个非标准的交易。当系统里有n个玩家的时候,由于每个玩家都要设置一笔保证金,我们需要n2个约定,此外玩家们还不得不投入比全部赌注更多的资金用来托管保证金。但对于参与者较少的游戏来说,这是合理的,并且有更好的效率。最重要的是,这个游戏验证了本来认为不可能的数据交换协议,比如在线掷虚拟硬币,并对不遵守规则的玩家进行惩罚,在比特币的世界里是可以做到的。
1703868473
1703868474
1703868475
1703868476
1703868478
区块链技术驱动金融:数字货币与智能合约技术 9.4 比特币作为一个公共的随机源
1703868479
1703868480
在上一节,我们展示了一群人如何选择一个公平的随机数。在这一节里,我们将讨论如何用比特币来产生一个对任何人都公平的公共随机数。为什么我们需要一个公共随机数?让我们先看一下几个现实中已经存在的依赖公共随机数的案例。
1703868481
1703868482
NBA新人选秀
1703868483
1703868484
其中一个例子就是每年春天的美国NBA联赛的新人选秀大乐透。NBA联盟中所有的30支球队聚集在一起,根据上赛季每个球队的赛季排名增加相应的权重,随机选择球队选秀顺序。在1985年,联盟首次采取这种方法进行选秀,乐透选秀的过程通过电视现场直播,包含球队名字的信封在一个透明的转盘里被充分打乱,委员会专员随后去挑选这些信封。因为纽约尼克斯(Knicks)队获得了当年的状元秀中锋帕特里克·尤因(Patrick Ewing),最终尤因也确实成为NBA名人堂的一员,当时这个乐透的产生引起了不小的争议。由于那次的乐透发生在纽约,其他球队的球迷宣称整个过程被人操纵,并偏向尼克斯队。
1703868485
1703868486
有很多有关NBA是如何操纵选秀过程的阴谋论,比如著名的“折角”论(“bent corner” theory)是说包含有尼克斯的信封有一个角被故意折弯了,这样委员会专员通过触摸就可以分辨出哪个信封是尼克斯的。另外一个论调是说尼克斯的信封之前被放在了冷冻室里,这样专员可以通过选择一个手感比较冷的信封来挑选出尼克斯队。这些论调都反映了一个事实,这种类型的选择要做到绝对公平是非常困难的,有很多合乎推理的作弊空间,想象一下一个职业魔术师的巧手可以做些什么!直到今天,选秀乐透每年都会举行,但每一次都充斥着各种阴谋论和谣言,以说明选秀并不是绝对公平的。
[
上一页 ]
[ :1.703868437e+09 ]
[
下一页 ]