drand- 随机数获取和验证

文章目录

    • 一、drand- 随机数获取和验证
      • 1. 什么是drand
      • 2. drand组织
      • 3. 获取公开随机性(Randomness)
      • 4. 获取私有随机性(Randomness)
      • 5. 通过http端点 获取
      • 6. 随机数验证
    • 二、部署安装
      • 1. 通过源码安装
      • 2. 使用
      • 3. 创建Drand部署
    • 三、其他参考

一、drand- 随机数获取和验证

官网:https://github.com/drand
熵联盟官网:https://www.cloudflare.com/leagueofentropy/

1. 什么是drand

Drand是一个独立的项目。

类似于ETH2.0实行的信标链(Beacon Chain),FIL目前采用Drand作为其Beacon源。

官网描述:
Drand - A Distributed Randomness Beacon Daemon
Drand (pronounced “dee-rand”) is a distributed randomness beacon daemon written in Golang.

Linked drand nodes collectively produce publicly verifiable, unbiased and unpredictable random values at fixed intervals using bilinear pairings and threshold cryptography.

Drand was first developed within the DEDIS organization, and as of December 2019, is now under the drand organization.
Drand:分布式随机信标守护程序
Drand(发音为“ dee-rand”)本身是一个程序,作为分布式节点都可以加入运行。Drand 由 Golang编写,使用双线性配对和阈值加密技术,将运行drand的服务器彼此链接,以固定的间隔生成共同的的,可公开验证的,无偏向于的,不可预测的随机值。Drand节点还可以将本地生成的私有随机性提供给客户端。

drand最初是在DEDIS(去中心化分布式组织)组织内部开发的,在2019年12月,独立成为drand组织。

官网about:https://drand.love/about/

Drand (pronounced “dee-rand”) is a distributed randomness beacon daemon written in Golang. Servers running drand can be linked with each other to produce collective, publicly verifiable, unbiased, unpredictable random values at fixed intervals using bilinear pairings and threshold cryptography.
Drand是一个用Golang编写的分布式随机信标守护程序。运行drand的服务器可以使用双线性对和阈值加密技术,以固定的时间间隔生成集体的、可公开验证的、无偏的、不可预测的随机值。

Drand is meant to be an Internet infrastructure level service that provides randomness to applications, similar to how NTP provides timing information and Certificate Transparency servers provide certificate revocation information
Drand是一种Internet基础设施级服务,它为应用程序提供随机性,类似于NTP提供定时信息和证书透明服务器提供证书撤销信息的方式。

2. drand组织

官网: https://drand.love/about/#origins-of-drand

As drand has gained maturity, an increasing number of organizations (including NIST, Cloudflare, Kudelski Security, the University of Chile, and Protocol Labs) started taking interest, and decided to collectively work on setting up a drand network spanning these organizations.
随着drand的成熟,越来越多的组织(包括NIST、Cloudflare、Kudelski Security、智利大学和协议实验室)开始感兴趣,并决定共同致力于建立跨越这些组织的drand网络。

3. 获取公开随机性(Randomness)

获取一个最新随机数

drand get public --round <i> <group.toml>

<group.toml>是drand节点的组标识文件。生成公共随机性后,可以指定整数。如果未指定,此命令将返回最近的随机信标。

drand生成的JSON格式的输出格式如下:

{"round": 367,"signature": "b62dd642e939191af1f9e15bef0f0b0e9562a5f570a12a231864afe468377e2a6424a92ccfc34ef1471cbd58c37c6b020cf75ce9446d2aa1252a090250b2b1441f8a2a0d22208dcc09332eaa0143c4a508be13de63978dbed273e3b9813130d5","previous_signature": "afc545efb57f591dbdf833c339b3369f569566a93e49578db46b6586299422483b7a2d595814046e2847494b401650a0050981e716e531b6f4b620909c2bf1476fd82cf788a110becbc77e55746a7cccd47fb171e8ae2eea2a22fcc6a512486d","randomness": "d7aed3686bf2be657e6d38c20999831308ee6244b68c8825676db580e7e3bec6"
}

Here Signature is the threshold BLS signature on the previous signature value Previous and the current round number. Randomness is the hash of Signature, to be used as the random value for this round. The field Round specifies the index of Randomness in the sequence of all random values produced by this drand instance. The message signed is therefore the concatenation of the round number treated as a uint64 and the previous signature. At the moment, we are only using BLS signatures on the bls12-381 curves and the signature is made over G1.

  • signature字段:是前一个签名值 和当前的round 的BLS阈值签名。
  • round 字段:round,英文单词,名词意思是“阶段;轮次;回合;” 代表 Randomness(随机数)的索引,在这个drand实例产生的所有随机值的序列中。 因此,签名的消息是作为uint64处理的整数与前一个签名的级联。
  • randomness 字段:为signature 进行哈希的值,被用作当前round的随机值。
  • 目前,我们只在bls12-381曲线上使用BLS签名,并且签名是在G1上生成的。

总结:Round 指定了Randomness (随机性)的索引。

4. 获取私有随机性(Randomness)

drand get private group.toml
{"Randomness": "764f6e3eecdc4aba8b2f0119e7b2fd8c35948bf2be3f87ebb5823150c6065764"
}

该命令输出一个32字节的十六进制编码的随机值,该随机值由所联系服务器的本地随机引擎生成。如果加密不正确,则命令将输出错误。

5. 通过http端点 获取

您可能希望通过向HTTP端点发出get而不是使用gRPC客户机来获取分布式密钥或公共随机性。下面是一个关于如何使用curl进行操作的基本示例。

要获取分布式密钥,可以使用:

curl <address>/group

类似地,要从drand beacon获得最新一轮的随机性,可以使用

curl <address>/public/latest

例如:
https://drand.cloudflare.com/public/latest
https://pl-eu.testnet.drand.sh/public/latest

6. 随机数验证

根据url获取drand链信息,从而获取验证随机性要用的公钥

package drandimport ("os""testing"dchain "github.com/drand/drand/chain"hclient "github.com/drand/drand/client/http""github.com/stretchr/testify/assert"
)func TestPrintGroupInfo(t *testing.T) {c, err := hclient.New("https://drand.cloudflare.com", nil, nil)assert.NoError(t, err)cg := c.(interface {FetchChainInfo(groupHash []byte) (*dchain.Info, error)})chain, err := cg.FetchChainInfo(nil)assert.NoError(t, err)err = chain.ToJSON(os.Stdout)assert.NoError(t, err)
}

具体验证随机还是调用 “github.com/drand/drand/chain” 提供的方法VerifyBeacon:
引入包 dchain “github.com/drand/drand/chain”

如下demo,VerifyBeacon方法 我们需要传入公钥,和Beacon数据结构变量(即返回的 随机性数据 包含上一个随机数签名,随机索引Round,和本次随机数签名)

func (db *DrandBeacon) VerifyEntry(curr types.BeaconEntry, prev types.BeaconEntry) error {if prev.Round == 0 {// TODO handle genesis betterreturn nil}b := &dchain.Beacon{PreviousSig: prev.Data,Round:       curr.Round,Signature:   curr.Data,}err := dchain.VerifyBeacon(db.pubkey, b)if err == nil {db.cacheValue(curr)}return err
}

二、部署安装

官网参考: https://beta.drand.love/operator/deploy/

1. 通过源码安装

git clone https://github.com/drand/drand
cd drand
make install
drand get public deploy/latest/group.toml

经过测试,默人make install到目录:

/root/go/bin/drand

因此,我们建立一个软链接方便,我们调用:

ln -s /root/go/bin/drand /usr/local/bin/drand

2. 使用

官网demo: https://github.com/drand/drand/tree/master/demo

启动本地demo,你可以简单运行:

make demo

该将启动一些drand本地进程,执行重新共享和其他操作,并将继续以每个Xs(当前为6s)打印出新的随机性。

drand beacon为客户提供多种公共服务。drand节点在同一端口上的gRPC端点和REST JSON端点上公开其公共服务。

Local demo of drand
This folder contains code that spins up drand nodes in the same way as in a real world deployment. It uses real processes as drand instances and uses the CLI commands.
此文件夹包含以与实际部署相同的方式启动drand节点的代码。它使用真实的进程作为drand实例,并使用CLI命令。

What the demo is doing

  • 从头开始建立新网络(运行DKG)
  • 获取一些beacons
  • 停止节点并检查网络是否仍处于活动状态
  • 获取节点并检查它是否已捕获链
  • 对扩展组进行重新共享
  • 检查新网络会产生有效的随机信标

3. 创建Drand部署

在部署时请参阅官方完整的说明

三、其他参考

第九章:Drand-分布式随机信标
参考URL: https://www.bilibili.com/video/BV1nM4y1w7Qo/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/21642.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文摘要一般要写些什么内容?

论文摘要通常需要包含以下几个关键内容&#xff1a; 研究背景与目的&#xff1a;简要介绍研究的背景信息&#xff0c;包括研究领域的重要性、当前的研究现状以及存在的问题。然后&#xff0c;清晰地阐述研究的目的、研究问题或研究假设&#xff0c;让读者明白研究的出发点和意图…

推荐一个图片识别的llama3微调版本 清华面壁项目

水一篇&#xff1a; MiniCPM-V是面向图文理解的端侧多模态大模型系列。该系列模型接受图像和文本输入&#xff0c;并提供高质量的文本输出。自2024年2月以来&#xff0c;我们共发布了4个版本模型&#xff0c;旨在实现领先的性能和高效的部署&#xff0c;目前该系列最值得关注的…

工业4.0利器:MES系统

工业4.0利器&#xff1a;MES系统 &#x1f604;生命不息&#xff0c;写作不止 &#x1f525; 继续踏上学习之路&#xff0c;学之分享笔记 &#x1f44a; 总有一天我也能像各位大佬一样 &#x1f3c6; 博客首页 怒放吧德德 To记录领地 &#x1f31d;分享学习心得&#xff0c;…

2024/6/3随笔

上周二又出差了&#xff0c;出差三天&#xff0c;跟公司里的一个年轻小哥一起去合肥&#xff0c;他教我怎么操作BI机器&#xff0c;就是ATE测试里面的老化测试&#xff0c;输入命令运行机器那种&#xff0c;说实话&#xff0c;他们写的这个脚本命令没有我自己写的uoskit写的好&…

Java如何实现pdf转base64以及怎么反转?

问题需求 今天在做发送邮件功能的时候&#xff0c;发现邮件的附件部分&#xff0c;比如pdf文档&#xff0c;要求先把pdf转为base64&#xff0c;邮件才会发送。那接下来就先看看Java 如何把 pdf文档转为base64。 两种方式&#xff0c;一种是通过插件 jar 包的方式引入&#xf…

英语学习笔记31——Where‘s Sally?

Where’s Sally? Sally在哪&#xff1f; 词汇 Vocabulary garden /ˈɡɑːrdn/ n. 花园&#xff0c;院子&#xff08;属于私人&#xff09; 区别&#xff1a;park n. 公园&#xff08;公共的&#xff09; 例句&#xff1a;我的花园非常大。    My garden is very big. 搭…

【linux-imx6ull-设备树点灯】

目录 1. 设备树简介1.1 编译-引用1.2 设备树文件结构1.3 设备树节点介绍1.3.1 特殊节点chosen 1.4 节点内容追加 2. 设备树常用OF操作函数2.1 节点寻找类2.2 属性提取类2.3 其它常用类 4. 设备树下LED实验4.1 实验简介4.2 添加LED设备节点4.3 获取设备节点并提取属性4.3.1 获取…

深度学习-05-反向传播理论知识

深度学习-05-反向传播理论知识 本文是《深度学习入门2-自製框架》 的学习笔记&#xff0c;记录自己学习心得&#xff0c;以及对重点知识的理解。如果内容对你有帮助&#xff0c;请支持正版&#xff0c;去购买正版书籍&#xff0c;支持正版书籍不仅是尊重作者的辛勤劳动&#xf…

关系数据库设计规范化

文章目录 基础知识规范化1NF&#xff08;第一范式&#xff09;2NF&#xff08;第二范式&#xff09;3NF&#xff08;第三范式&#xff09;BCNF&#xff08;Boyce Codd Normal Form&#xff0c;巴克斯范式&#xff09;4NF&#xff08;第四范式&#xff09; 模式分解总结 基础知识…

java面试题及答案2024,java2024最新面试题及答案(之一)

发现网上很多Java面试题都没有答案&#xff0c;所以花了很长时间搜集整理出来了这套Java面试题大全&#xff0c;希望对大家有帮助哈~ 本套Java面试题大全&#xff0c;全的不能再全&#xff0c;哈哈~ 一、Java 基础 1. JDK 和 JRE 有什么区别&#xff1f; JDK&#xff1a;Ja…

03_03_初识SpringAOP和应用

一、SpringAOP的初识与原理 1、概述 AOP&#xff1a;面向切面编程OOP&#xff1a;面向对象编程面相切面编程&#xff1a;是基于OOP基础之上的新编程思想&#xff0c;OOP面向的主要是对象是类&#xff0c;而AOP面向的主要对象是切面&#xff0c;它在处理日志、安全管理、事务管…

D365 Project Operations

目录 D365包含哪些模块&#xff1f; D365 Project Operations是什么&#xff1f; D365 Project Operations优势 D365 Project Operations部署方案 总结 D365包含哪些模块&#xff1f; 微软的D365是一套功能强大的企业管理解决方案&#xff0c;其中包含了多种模块&#xff…

结账和反结账

结账与反结账功能在财务软件和会计系统中扮演着重要的角色&#xff0c;以下是关于这两个功能的详细解释&#xff1a; 一、结账功能 结账功能是计算和结转各个会计科目本期发生额和期末余额的过程&#xff0c;同时标志着一定时期内财务活动的结束和财务数据的固化。结账功能的…

深入React Hoooks:从基础到自定义 Hooks

使用 useContext useContext 是另一个常用的 Hook&#xff0c;它可让我们在函数组件中轻松访问 React 的 context。如果你的应用程序依赖于一些全局状态&#xff0c;或者你希望避免将 props 一层一层地传递到子组件&#xff0c;context 很有用。你可以在父组件设置一个值&…

C语言 链表经典OJ题

链表经典OJ题 移除链表元素链表的中间节点反转链表合并两个有序链表分割链表 移除链表元素 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例 1&#xff1a; 输入&#xff1a;head […

mysql5.7血泪史

因为工作需要&#xff0c;需要将mysql8.0.33版本切换为mysql5.7系列。 在这个过程当中&#xff0c;首先我将mysql8卸载干净。 mysql彻底卸载干净的5个步骤&#xff0c;超多图超详细保姆级教程最新教程新手小白轻松上手_卸载mysql-CSDN博客 然后发现mysql5.7在官网上下载很…

python小练习03

1.绘制奥运五环旗 #奥运五环的绘制 import turtle as t t.pensize(3) t.speed(0) def draw_circles():i0while i <4:args [[-60,0,"blue"],[0,0,"black"],[60,0,"red"],[-30,-30,"yellow"],[30,-30,"green"]]#定义一个…

lua vm 二: 查看字节码、看懂字节码

本文讲一讲如何查看 lua 的字节码&#xff08;bytecode&#xff09;&#xff0c;以及如何看懂字节码。 以下分析基于 lua-5.4.6&#xff0c;下载地址&#xff1a;https://lua.org/ftp/ 。 1. 查看字节码 1.1 方法一&#xff1a;使用 luac luac 是 lua 自带的编译程序&#x…

CF Round 368 (Div. 2) C. Pythagorean Triples【数学 构造】

Codeforces Round 368 (Div. 2) C. Pythagorean Triples 题意&#xff1a; 给你一个整数n&#xff0c;让你构造另两个整数满足三角形的勾股定理。 思路&#xff1a; 首先&#xff0c;n < 2无解 由题意得&#xff1a;a^2 b^2 c^2&#xff1b;不妨设n a&#xff0c;则…

【AIGC半月报】AIGC大模型启元:2024.06(上)

AIGC大模型启元&#xff1a;2024.06&#xff08;上&#xff09; (1) ChatTTS&#xff08;语音合成项目&#xff09; (1) ChatTTS&#xff08;语音合成项目&#xff09; 2024.06.01 ChatTTS 文本转语音项目爆火出圈&#xff0c;引来大家极大的关注。短短三天时间&#xff0c;在…