1703868512
那么,通过密码学的办法,我们是否可以做得更好?这里,我们用密码学“信号塔”(cryptographic beacons)来特指一个提供公共随机源的服务。我们的想法是“信号塔”会源源不断地在一个固定的频率产生随机数,并且没有人可以预测这些随机数。只要大家同意这一点——没人可以预测这个信号塔的下一个输出,那么大家就都可以相信其生成的是一个真正的随机数。
1703868513
1703868514
一个完美的密码学信号塔可以服务于各种公开乐透项目,比如上面两个例子。如果你想要在本地的俱乐部玩一个宾果(Bingo)游戏[2],你再也不需要用一个大的转盘来产生随机性了。只要每个人都信任信号塔,就不要用物理的方法来展示随机性了,这会省去很多麻烦。
1703868515
1703868516
密码学专家提出了很多其他的公共随机源的应用方案,包括投票系统、零知识验证、分割选择协议等。如果你有一个完美的密码学信号塔,其中很多方案都会变得非常简单有效。但遗憾的是,截至目前,我们还没有找到一个完美的方案去打造这样一个信号塔。
1703868517
1703868518
NIST信号塔
1703868519
1703868520
NIST,即美国国家标准与技术研究所(National Institute of Standard and Technology)。从2011年开始,NIST运行了一个它们自己的信号塔服务。它们声称用了一个非常复杂的实验室装置来产生随机数,甚至动用了两个纠缠态光子。由于随机数是由量子力学现象产生的,那么理论上这个数字可以保证非常强的随机性。如果你认可海森堡不确定性原理(Heisenberg uncertainty principle)和其他一些被广泛接受的物理学原理,那么你就会相信这个信号塔产生的数是真正随机的,并且不可预测。NIST信号塔服务可以每60秒产生一个附带有数据签名的随机数,并提供一个非常便利的程序接口——服务可以通过网页来访问并返回随机数。
1703868521
1703868522
从某种意义上说,NIST信号塔代表了从物理上展示随机性的极限,但无法解决一个基本的信任问题——你必须信任NIST确实是通过它们所宣称的这些程序来产生随机数的,你必须信任在马里兰州的某一个建筑里面,NIST确实用它们的实验室来产生这些随机数,而不是伪造的,你还必须信任它们确实没有能力故意重写其中一些随机数。
1703868523
1703868524
打造一个信号塔的其他潜在方法:自然现象
1703868525
1703868526
我们是否可以使用一些每个人都可以观测到的自然现象来实现信号塔?或者我们可以使用天气的一些细节,比如在某天某个特定地点的温度,或者是风力的强度,或者是否会下雨。当然,我们有能力去提前预测天气,但是预测的结果并不是非常精确,所以我们可以使用这些测量值的“最低有效位”。但是这个方法也有局限性,那就是需要所有的参与者在同一个地点做同样的测量。
1703868527
1703868528
为了避免这个问题,我们可以利用太阳黑子,一种太阳表面的爆发活动(见图9.8)。另外一个例子是宇宙背景辐射,通过广播天线,你可以从地球上的任意一点都可以监测到这个数据,而且每个人都可以读取到同样的数值。这些都是超大范围发生的现象,很容易向公众证明没有其他人可以操纵这个过程。想象一下,某人穿越宇宙到达太阳表面,然后用某种办法去影响太阳黑子现象,而其目的仅仅是为了操纵地球上的某个乐透项目,这显然是不现实的。所以上述这些方法都有很好的特性:公众可观测性、可防止被操纵性,以及一个可接受的不可预测性。
1703868529
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
[
上一页 ]
[ :1.703868512e+09 ]
[
下一页 ]