打字猴:1.703868543e+09
1703868543 还有一个类似的想法是使用金融数据作为数据源,比如股票市场价格指数。同样,这些是公开的可观测的数值,而不像自然现象,这些金融数据本身就是用数字来呈现的,所以不会因为观测者不同,产生数据不一致的问题;同时,我们有很好的理由相信,股票价格的小波动是很难预测的:如果你可以预测纽约证交所某一只股票的交易价格,并且精确到美分级别,你就会成为一个非常赚钱的日内交易员。某些人可以通过买卖股票,去操纵股票价格到某一个特定的数值,但这需要巨大的成本。
1703868544
1703868545 但是,这种方法也需要依赖某一个信任方,比如股票交易所。即使股票交易所本身有很强的意愿去建立自己的诚信,但如果让它们操纵一个非常有利可图的乐透,那么它们就有可能去尝试改变股票价格(例如,通过插入自己的买卖单)。
1703868546
1703868547 截至目前讨论的方法,似乎很难去规避信任方的问题,而这个信任方却是可以在整个过程中的某些关键环节对结果施加重要影响的。
1703868548
1703868549 用比特币作为一个“信号塔”
1703868550
1703868551 幸运的是,把中央权威从数据交换协议中剥离出来,在之前认为几乎是不可能的任务,而比特币是很有希望实现这一任务的技术,而这也是本书的中心思想之一。我们是否可以把比特币作为一个生成随机数的“信号塔”呢?我们想要从比特币的区块链里摘取随机数,与此同时保留比特币所有去中心化的特点,正是这些特点使比特币如此吸引人。
1703868552
1703868553 我们回忆一下,矿工必须计算大量的随机哈希函数来找到一个有效区块。或许这意味着没有人可以不经过挖矿工作就能预测或是影响下一个区块的生成。当然,任何一个区块的哈希函数结果的最初几个字节都是零,但是在合适的假设下,唯一可以预测剩余位数的比特值的方法可能是找到一个胜出有效区块,然后选择性丢弃它(见图9.9)。
1703868554
1703868555
1703868556
1703868557
1703868558 图9.9 比特币像灯塔一般
1703868559
1703868560 注:我们可以通过使用随机提取功能,提取公共随机数据,标注区块链上的各个区块。
1703868561
1703868562 这样一来,把区块链变成一个随机数“信号塔”成了一件简单的事。在区块链上的每一个区块上,我们在区块头部设置一个“随机数抽取器”。随机数抽取器,其实就是一个哈希函数,这个哈希函数把所有的输入随机熵均匀地压缩成一个随机字符串。每次只要发表一个区块,我们就有了一个新的随机信号输出。
1703868563
1703868564 评估比特币“信号塔”的安全性
1703868565
1703868566 假设你参加一个乐透抽奖,这个抽奖的结果是由未来将要产生的、一个预先设定的、位于高度h的某个区块的输出所决定的。这个乐透抽奖有N个参与者,每个参与者都下注了B个比特币,如果你也是一名矿工,我们再假设,你幸运地找到了一个区块h的函数解谜的答案,你就可以选择发表或是不发表这一区块。如果你不喜欢从这个区块里产生的抽奖的结果,你可以轻易地丢弃这一区块,然后让其他找到这个区块的人来决定这个抽奖结果,但同时,你必须放弃因为找到这个区块所带来的收入。
1703868567
1703868568 让我们计算一下,下注的数额B值需要多大,才值得考虑放弃区块本身的奖励。如果你成功地找到了一个位于高度h的区块来决定抽奖的结果,然后意识到,如果你发表了这个结果,你肯定会输掉抽奖;如果你扔掉这块,你还是有1/N的概率来赢得B×N比特币,这就意味着,如果你期望的抽奖奖励(1/N)×B×N比特币比挖矿所获得的25个比特币奖励要大的话,那么放弃区块奖励是合理的(在2015年,如果不考虑交易费的话,区块奖励大概是25个比特币),所以如果B大于25,这种丢弃策略就是有利可图的。在2015年中旬,25个比特币价值大约在5 000美元左右。所以如果每个玩家下注不到5 000美元的话,并且假设每个玩家都是理智的,那么这个乐透抽奖是可以抵抗放弃有效区块这种攻击的。
1703868569
1703868570 另一大优点是这是一个完全去中心化的信号源,没有一个中心化的信托方。比起其他几个信号源的方案,它的处理速度相当快,大概每10分钟就产生一个输出。然后通过上述的简单模型,我们可以估计一个攻击者想要操纵信号源输出所需要付出的代价。
1703868571
1703868572 用比特币作为信号塔办法的一个缺点是,不能精确定时。比如,假设我们想要在明天正午读取这个信号源的值,但我们无法知道哪个区块在哪个时点会生成最新的一个区块。虽然平均来说,在正午之前或之后的10分钟内一定会有一个区块被公布,但这还是会有误差。如果我们想降低目标区块在一个短分叉事件中丢失的可能性,我们还要对有可能发生的延迟有所准备。在比特币世界里,通常情况下要等6个区块(60分钟)后,才能确信这个信号值是真正地被确认了。
1703868573
1703868574 另一个缺陷是,相对来说,操纵这个信号值所需的代价可能还是太低。如果我们用这个方法来实行NBA选秀,由于其中可能涉及几千万美元利益,球队顿时就有了贿赂矿工来操纵选秀过程的动力。所以,当涉及巨额资金时,这个方法是否有效仍值得探讨。
1703868575
1703868576 最后,我们的安全评估忽略了一些现实生活中的因素。比如,对于加入某一个矿池的矿工来说,丢弃一个有效区块并不会让他损失很多钱,因为他们是根据贡献算力的比例,而不是区块来领取奖励的。所以,比特币信号塔目前还是一个有趣但没有被证明的想法。
1703868577
1703868578 脚本语言对信号塔的支持
1703868579
1703868580 如果我们扩展比特币的脚本语言功能,加入一个特殊的操作码(opcode)来读取比特币信号呢?按照最初的设计,现在的比特币脚本语言没有任何办法去实现任何随机性,因为矿工必须验证脚本,而且一个脚本的有效性需要获得所有矿工的认可,但如果我们用了信号塔产生的随机数,由于这是一个可被证明的公共随机数,把这个随机数加入交易脚本中,矿工就容易随机性地达成共识。
1703868581
1703868582 假设我们有一个操作码可以做一个随机的决定,这个决定是基于上个区块的信号塔输出的。我们可以把整个复杂的抽奖数据协议用一个脚本来替代——读信号塔的随机数值,然后把该输出分派到n个密钥中的一个。这需要有多回合的数据协议安全保证或是有时效的函数约定。
1703868583
1703868584 这个想法的一个缺点是,为矿工操纵抽奖提供了可能性,如果他们发觉挖到的这一个区块里的交易会让他们输掉这个抽奖,他们就会简单地将抽奖交易延迟至后面的一块出现。但是我们可以对信号塔的操作码做一个小小的调整来防御这类攻击,也就是说,你不是用上一个区块,而是使用某一个特定高度的区块所产生的信号塔随机数。
1703868585
1703868586 [1]所以一个公平的不受操纵的公共随机源是一个公共福祉,而比特币可以做到这一点,因为它是去中心化的。——译者注
1703868587
1703868588 [2]Bingo是一种填写格子的游戏,在游戏中第一个成功者以喊“Bingo”表示取胜而得名。——译者注
1703868589
1703868590
1703868591
1703868592
[ 上一页 ]  [ :1.703868543e+09 ]  [ 下一页 ]