打字猴:1.70386853e+09
1703868530
1703868531
1703868532
1703868533 图9.8 NASA太阳黑子照片
1703868534
1703868535 但上述这些方法都有一个共同的问题,就是生成随机数太慢了。例如,如果随机信号是当日最高温度,那么你每天只能获取一次这样的数值;太阳表面也不是经常变化,在很多密码学应用中,随机数通常作为伪随机数发生器(Pseudo-Random Generator,简称PRG)的输入,从安全角度考虑,这些输入通常需要达到80比特位长度,甚至更多,但如果以天气或者天文学为数据源,那我们可能需要很长时间才能积累到80位长度的随机数。
1703868536
1703868537 另外,观测太阳黑子现象这种方法还需要专业技能,所以你还需要依赖一些可信任的专业观测者来获取这些测量数据。由于有很多这样的可信任的观测者,我们也希望他们“互相之间有诚信”。信号塔的应用者,或者说是这些应用的用户,可以随时选择并替换观测者。这个特性被称为“信任的敏捷性”,相比于NIST是提供信号塔服务的单一机构,这个特性更加优越。
1703868538
1703868539 还有更深层次的问题,虽然这个问题看起来可能微不足道,那就是,我们是否可以找到一个方法,它可以使一个现实世界的观测数据——例如温度、太阳黑子图——转变为一个数据字符串,并且它还需要保证每一个观测者都获得相同的字符串?我们可以尝试数字化这个观测数据:比如,我们用华氏度来描述温度,并使用第一个十进制数位作为信号塔的输出,但是除非每一个观测者的温度计都是不可思议的精准,否则就会出现下面的情形,有些观测者读取的温度(比如)是62.7,而另外一些人读取的则是62.8。目前看来,不管我们选择哪种自然现象或者采用哪种协议,我们都会遇到这种“极端情况”。对于一个密码学信号塔,即使测量值出现非连续性的可能性非常小,那也是无法接受的,因为这有可能使得PRG产生的随机数变得完全不同。
1703868540
1703868541 金融数据
1703868542
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
[ 上一页 ]  [ :1.70386853e+09 ]  [ 下一页 ]