如何使用ZKRandao的方案来生成随机数
扫描二维码
随时随地手机看文章
本文在Randao实现的基础上,对一种新型RNG(随机数生成器)进行了简短的思想实验。Randao是一个DAO(分去中心化自治组织),它使用提交和显示方案来生成随机数。Randao的ZKRandao实现使用zk -snark来消除不显示预先提交的哈希值的攻击。注意,zk -snark不用于匿名。
提交和显示方案
ZKRandao的提交和显示方案可以分为两种:
· 单一秘密计算
· 批量秘密计算
单一秘密计算
1. 收集一个有效的sha3(s)、一个范围s (s是s的一部分)和一个ZK-snark,证明sha3(s)的s在范围s内。
2. 为sha3(s)显示s。这可以由步骤1中的发起者或其他参与者完成(带有预先设置的延迟)。其他参与者可以通过计算范围S中的值的哈希值并将其与sha3(S)进行比较来计算sha3(S)。
批量秘密计算
1. 收集有效的sha3(s),一个范围s,其中s是s的一部分,ZK-snark证明sha3(s)的s在范围s内。
2. 为sha3(s)显示s。这可以由步骤1中的发起者或其他参与者完成(带有预先设置的延迟)。其他参与者可以通过计算范围S中的值的哈希值并将其与sha3(S)进行比较来计算sha3(S)。
3. 根据收集到的s值计算一个随机数,并将奖励发送给参与者(发起者和揭示者)。注意,根据步骤2,有可能启动程序!
批量模型的好处是可以有更多的参与者,但是它更加复杂,因此可能有更多的攻击向量。ZKRandao方案的两个模型都保留了Randao的优点,其中一个诚实的参与者足以生成一个随机数,并且消除了不披露的风险。因为秘密的范围是共享的,所以可以计算秘密。因此,每个参与者都被激励去参与和揭示,否则揭示将由另一个参与者(计算器)完成。
考虑单一RNG
在考虑时,我们将重点放在简单的单一秘密计算模型上。
共享范围消除了不泄漏的风险,但是它产生了其他参与者在泄漏数字之前计算秘密(随机)数字的风险。可以根据计算器的范围和哈希率为此设置边界。因此,有必要找到一个最优范围,使其他参与者能够在一个最大的设置时间范围内而不是在一个最小的设置时间范围之前计算s。下面我们将给出一个简短的边界评估示例。这些都被简化了,因为这是一个思维实验。在计算中使用下列符号:
R =参与者提供的范围
Hr =参与者每秒的Hashrate
秘密计算的时间以秒为单位
时间计算
(R / 2) / Hr = Ts
这是计算一个共享sha3(s)的秘密所需的时间。这个范围除以2,因为我们假设这个秘密会均匀地分布在所有参与者的范围内。对于一个非常大的种群,这可以简化为这样一个事实:秘密将在大约一半的范围内被发现。
评估的边界
我们使用比特币的hashrate池,约为62,500,000 Th/s,来计算在本例中计算一个秘密所需的最小时间范围 62,500,000,000,000,000,000 * 2 * 180 = 22,500,000,000,000,000,000,000,000。
对于所需的最大时间,我们期望池中的hashrate为14000 Th/s。这些大约是1000位主要的Antminer S9i(14位/秒)。需要的时间是(22,500,000,000,000,000,000,000 / 2)/ 14,000,000,000,000,000 = 535,715秒。约9分钟。这个矿池中采矿设备的成本约为1000美元,价值为100万美元。在这个例子中,随机数可以在180秒内被期望是公平的。如果发起者在180秒内(在一个由多个随机数组成的种群中)透露了一个消息,那么该消息就可以被认为是完全随机的,并假定汇聚的是比特币网络的最大哈希率(这一点很重要)。
您可以使用哈希率(最小值和最大值)、所需时间和范围来优化边界。进一步注意,比特币挖掘池不会被激励去计算随机数,因为发起者更愿意透露,因此不会有任何奖励。例如,如果发起者在计算器(在一段时间内)显示之后才显示,则奖励将归发起者所有。这将限制用于计算秘密的哈希率。
结论
ZKRandao实现使用可调边界创建一个RNG,该RNG在活动性和随机性之间进行优化。ZKRandao中最重要的考虑因素是范围和预期的哈西率。通过选择一个(相对)小范围,赋予活性假设更多的权重,以换取随机性的不完整性。通过选择一个较大的范围,赋予活性假设较少的权重,以换取较高的随机性的完整性。此外,ZKRandao的用户还可以选择随机数计算所需的秘密数(或小于180秒显示的最小秘密数)。因此,一个ZKRandao RNG可以被不同的用户使用,具有不同的活动性和随机性假设的完整性。
请注意,当计算秘密时,随机数不会被直接操作,只有计算器知道了这个秘密。为了操纵随机数,集合中的所有随机数(由RNG的用户决定)都需要由计算器解锁,并且这个集合的最后一个秘密需要由计算器来初始化。只是极其困难的。