Drand去中心化可验证随机数

Posted by LB on Thu, Dec 8, 2022

drand

Drand最初来自DEDIS实验室,由于使用基于配对的密码学,drand 能够以非常简单和有效的方式生成随机性,并以可靠的方式将其交付给客户端。Drand 旨在成为一种分布式服务,以与应用程序无关、安全且高效的方式提供公共随机性。随着 drand 的成熟,越来越多的组织(包括 NIST、Cloudflare、Kudelski Security、智利大学和协议实验室)开始感兴趣,并决定共同努力建立一个跨越这些组织的 drand 网络。

Drand 旨在成为一种互联网基础设施级服务,为应用程序提供随机性,类似于 NTP 提供计时信息和证书透明服务器提供证书吊销信息的方式,Drand去中心化随机数方案可以提供 去中心化随机性可验证性两大核心功能。

为什么去中心化随机性很重要

多年来,一代公共随机性(通常称为common coins)吸引了密码学研究社区的持续兴趣。许多分布式系统,包括各种共识机制、Tor等匿名网络或区块链系统,都假定可以访问这种公共随机性。例如,在最近的权益证明区块链中,矿工在每个时期都是通过一个共同的随机源随机选出的。然而,拥有一个不可偏置的、分布式的、可扩展的公共随机资源仍然是一个主要的缺失部分。目前存在一些集中式解决方案,尽管它们确实提供了一个统一的随机性来源,但这些信标既不可验证也不分散。可验证性是必要的。对于权益证明系统中的示例,可验证性是必要的,在该系统中,区块生产者需要证明他已被选为给定时期的矿工。

What Is Chainlink VRF?

实验代码

 1
 2package main
 3
 4import (
 5        "context"
 6        "encoding/hex"
 7        "log"
 8        "time"
 9
10        "github.com/drand/drand/client"
11        "github.com/drand/drand/client/http"
12)
13
14var urls = []string{
15        "https://api.drand.sh",
16        "https://drand.cloudflare.com",
17}
18
19var chainHash, _ = hex.DecodeString("8990e7a9aaed2ffed73dbd7092123d6f289930540d7651336225dc172e51b2ce")
20
21func main() {
22        c, err := client.New(
23                client.From(http.ForURLs(urls, chainHash)...),
24                client.WithChainHash(chainHash),
25        )
26
27        if err != nil {
28                log.Panicln(err)
29        }
30
31        t1, _ := time.ParseDuration("-0h2m0s")
32
33        t2 := time.Now().Add(t1)
34
35        round := c.RoundAt(t2)
36
37        ret, err := c.Get(context.TODO(), round)
38
39        if err != nil {
40                log.Panicln(err)
41        }
42
43        log.Println(ret.Round())
44        log.Println(ret.Randomness())
45        log.Println(ret.Signature())
46}

可验证性证明

 1
 22022/12/08 10:11:01 2502108
 32022/12/08 10:11:01 [36 169 143 42 40 0 213 117 159 253 59 239 108 209 196 196 4 161 37 208 156 161 88 72 116 146 95 85 104 189 144 201]
 42022/12/08 10:11:01 [140 27 51 128 122 203 251 122 176 115 90 43 158 171 202 106 162 223 213 50 180 123 231 116 239 98 0 187 209 98 186 90 8 139 20 123 250 248 219 152 99 146 47 0 77 124 243 159 17 22 165 96 114 64 199 167 241 229 181 190 192 176 84 126 8 137 224 33 139 96 28 62 142 64 78 51 212 222 235 178 182 150 212 96 218 231 207 15 47 144 216 200 117 75 78 153]
 5
 6程序模拟倒退两分钟
 7
 82022/12/08 10:13:05 2502108
 92022/12/08 10:13:05 [36 169 143 42 40 0 213 117 159 253 59 239 108 209 196 196 4 161 37 208 156 161 88 72 116 146 95 85 104 189 144 201]
102022/12/08 10:13:05 [140 27 51 128 122 203 251 122 176 115 90 43 158 171 202 106 162 223 213 50 180 123 231 116 239 98 0 187 209 98 186 90 8 139 20 123 250 248 219 152 99 146 47 0 77 124 243 159 17 22 165 96 114 64 199 167 241 229 181 190 192 176 84 126 8 137 224 33 139 96 28 62 142 64 78 51 212 222 235 178 182 150 212 96 218 231 207 15 47 144 216 200 117 75 78 153]

附录

  1. Drand:https://drand.love
  2. 熵联盟介绍: https://blog.cloudflare.com/zh-cn/league-of-entropy-zh-cn
  3. Advanced crypto library for the Go:https://github.com/dedis/kyber