Filecoin的可信随机源是如何设计的?
Ticket Chain 是Filecoin在最初的设计中采用来产生不可预测但可公开验证的随机数。但是在实际的应用中,由于Ticket Chain 在每个区块中都会有,但是一个区块只需要一个的特性造成选择上会比较复杂。而且在出块过程中Ticket Chain 上的随机数就已经更早的被一部分矿工知晓,这对于其他人来说就不再意味着纯粹的随机数。另外,一旦当前的链发生分叉也会导致Ticket 的随机数失效,综合这些原因,导致最终官方决定采取Drand作为可信随机源。
Drand由DEDIS(去中心化分布式组织)组织内部开发,后来才独立成为的Drand组织。Drand作为一个程序可以接入所有的分布式节点进行运行,在固定的间隔下回将产生可公开验证的、无偏向的、不可预测的随机值。
这些随机值符合一个良好的随机源的5个特性,即不可预测性、没有偏向性、公共可验证性、去中心化以及可获得性。事实上,这5个特性的核心就是很好的满足了随机性。
Drand的目标和机制
Drand旨在通过提供随机即服务网络(类似于用于时间的NTP服务器或用于CA验证的证书颁发机构服务器)来实现实现突破,并提供连续的随机源。
Drand机制包括如下特点:
去中心化:Drand是由Internet上各种信誉良好的实体运行的软件,需要一个阈值来产生随机性,没有故障的中心点。
可公开验证且无偏向:drand定期提供可公开验证且无偏向的随机性。任何第三方都可以获取并验证随机性的真实性,并确保该随机性未被篡改。
同时提供“私有”的本地服务:Drand节点还可以提供加密的随机性,以供本地应用程序使用,例如为操作系统的PRNG注入种子。
公共随机数
Drand 的主要功能就是产生公共随机数。这种随机数的使用场合非常多,比如出块权、复制证明的各个阶段、时空证明等等。
Drand随机信标由一组分布式节点组成,并分为两个阶段:
设置:每个节点首先生成一个长期使用的固定的公私密钥对。然后,将所有公钥与操作信标所需的其他一些元数据一起写入组文件中。分发此组文件后,节点执行分布式密钥生成(DKG)协议以为每个服务器创建公共公用密钥和一个私有密钥因子。也就是说,这个私钥是一个分布式私钥,由一组节点共同掌握。每一个参与者不会明确地看到或者使用整个分布式私钥,而是利用各自的私钥因子来通过计算获知公共密钥对,来产生公共随机性。设置的过程只需运行一次。
生成:设置后,节点切换到持续性的随机性生成模式。任何一个节点都可以通过广播消息来发起随机性生成回合,所有其他参与者都使用Boneh-Lynn-Shacham(BLS)签名方案的n个阈值版本及其各自的私钥因子进行签名。一旦任何节点(或第三方观察者)收集了t个部分签名,它就可以重建完整的BLS签名(使用拉格朗日插值)。然后使用SHA-512对签名进行哈希处理,以确保最终输出的字节表示形式没有偏差。该散列对应于集合随机值,并且可以针对集合公钥进行验证。
私有随机性
私有随机性生成是Drand的次要功能。客户端可以从某些或所有Drand节点请求私有随机性,这些Drand节点从其熵池中本地提取它并以加密形式发送回去。这对于从不同的熵源(例如在嵌入式设备中)收集随机性可能很有用。
在这种模式下,收到请求后,Drand节点会在本地生成32个随机字节,并使用接收到的公钥对它们进行加密,然后将其发送回客户端。但是,初始客户端密钥对必须由受信任的源(例如设备制造商)来发布,当密钥对的安全受到影响时,那么其随机数的接收也会大打折扣。
Drand目前并不能做到完全的去中心化,其潜在的威胁在于,一旦一些节点出现合谋,就可能影响随机数稳定的运行。这对于以去中心化为重要特征的区块链技术来说还有一段距离,需要更长久的运行才能论证其可靠性。
上一篇:Filecoin存储挖矿指南