分布式链上随机数和keyless account

1. 引言

相关论文见:

  • Aptos团队2024年论文 Distributed Randomness using Weighted VRFs

相关代码实现见:

  • https://github.com/aptos-labs/aptos-core(Rust)

在链中生成和集成共享随机数,以扩展应用和强化安全。该论文的目的是:

  • 让validators自动生成链上随机数,并为每个区块生成新鲜的共享随机数
  • 专注于PoS链,这样每个validator有不同的质押量(即权重)
    • 可引入权重门限设置,子集授权依赖于该子集validators的累加权重,而不是子集的大小。

在该论文中引入了3种在权重设置下支持生成共享随机数的方案:

  • PVSS:publicly verifiable secret sharing scheme (PVSS),是有权重且可聚合的
  • DKG:weighted distributed key generation protocol (DKG),
  • VUF:weighted verifiable unpredictable function (VUF)
    • 在运行最频繁的VUF协议中,参与者的计算和通信开销与其权重无关。该特性对于可扩展性至关重要。

当前已在Aptos链上实现了相关方案,其签名、验签、签名大小等均与各方总权重无关,并将其与BLS签名对比进行了benchmark。其中,当总权重分别为821和4053时,VUF将签名大小分别降低了7倍和34倍。
在这里插入图片描述
在这里插入图片描述

2. 分布式链上随机数

现有链上随机数放啊对比:
在这里插入图片描述
其中:

  • DFINITY:依赖于threshold DKG (tDKG) and a threshold VRF (tVRF),而不是权重。因DFINITY采用的是non-PoS安全模型,其认为只要不超过三分之一的validators(而不是质押量)被compromised,该链仍是安全的。这样,其门限设置,要比Aptos的权重设置,简单得多。因为这样shares的总数可设置为validators数量(如数百个)。而Aptos的权重设置,shares的总量与总质押量呈比例,即使向下取整,也要大得多(如数千个)。
  • Drand:也依赖于在servers委员会中实现tDKG和tVRF。在门限设置下,实现要更简单。但,当某dapp消费了所生成的随机数,其必须对randomness beacon的安全性和可用性附加额外信任。此外,该随机数无法即时消费,而是通过一个commit-and-reveal流程,使得开发很笨重,对随机数的访问也有更大的延迟。同理,Algorand的随机数beacon设计也存在类似的问题,其消费的随机数源自不同的外部随机数beacon。
  • Chia采用 verifiable delay functions (VDFs),其优势在于,即使所有validators都堕落了,其仍具有不可预测性。其基于的假设为,无人可evaluate the VDF faster than the delay it was originally set up with。但其缺陷在于,无法快速生成随机数,因其内部依赖于随机数计算的延迟性。此外,基于 VDF 的方法无法轻松提供即时交付的随机性,因为这需要为每个块生成一个 VDF,这对于低延迟区块链来说很困难,因为 VDF 本质上很慢。换句话说,如果区块的生成频率高于 VDF,那么这些区块将无法获得即时随机性。
  • Flow :validators验证者投票并附上他们对提议区块A的 VRF 评估,允许下一个区块B的提议者聚和投票并揭示A的随机性。这通过策略性地不提议 block B、将 block A 渲染为orphan孤儿区块来实现偏差。
  • Celo:让区块的提议者选择随机数,对其进行承诺并在后续区块中揭示。这为拒绝揭示随机数或根据后续区块中的预期交易做出明智的预测以最大化利润开辟了途径。
  • 以太坊:每个区块提议者都会根据当前epoch纪元数评估 VRF。然后,纪元的随机数被定义为提议者 VRF 评估的best-effort组合。不幸的是,这种方法很容易产生偏见,因为一个或多个共谋的区块提议者如果不喜欢结果,可以选择不混合他们的贡献。此外,这种方法非常慢,因为 epoch 每 6.4 分钟才发生一次。

Aptos团队的 Aline Temesku,提出了:分布式链上随机数和keyless account,致力于称为:

  • 改变链上互动和交易方式的新范式

Aline Temesku 2020年时在VMWare工作,对身份验证的数据结构、向量承诺颇有研究,同时对stateless validation无状态验证非常感兴趣,当时的工作重点是经身份验证的数据结构和门限密码学。在VMWare工作期间,Aline Temesku研究了一种匿名支付方案,该方案可平衡责任或合规性与隐私。Aline Temesku于2022年2月加入Aptos团队。

在语言层面,Sui 和 App Toss 都使用 move,但 move 的子集开始有点有趣的分叉。如,Aptos 支持的脚本比 Sui move 中支持的 ptps 强大得多。

Aptos 的整体理念是改善用户体验和开发人员体验,并将 Web 3 带给下一个十亿用户。

Aptos与Sui的另一个不同之处在于:

  • Aptos上有一种称为即时链上随机数的东西。该功能背后的想法是让智能合约立即获得无偏见、不可预测的随机性,并改善想要编写游戏、彩票、抽奖、随机 NFT 甚至交互式零知识证明verifier等内容的智能合约编写者的开发体验。

ZK密码学无处不在,即使是签名方案,也可将其看成是“知悉某密钥的零知识证明”。

在Aptos中,发现零知识证明用途广泛,如:

  • 为token转账添加隐私,需对转账金额做范围证明
  • 分布式随机数,可公开验证的秘密共享等协议,使用具有加法全同态功能的函数来对其进行加密,实际最有效的方案是采用了具有零知识范围证明的 Elgamal 加密。
  • 账户管理,当前在做的Aptos Keyless Accounts,利用 OpenID Connect 标准和零知识证明来增加隐私。

Aptos rollup扩容方案中,最大的挑战在于:

  • 计算昂贵的零知识证明的延迟

Aptos对延迟很敏感,若需等待30秒才能完成交易,认为对用户来说并不友好。所以目前并未深入研究如何来构建Aptos rollup方案。

Aptos上目前有个应用程序加改进提案AIP-41:

  • 描述了用于为合约提供无偏且不可预测的随机数的Move API。这些API非常简单:
    • 实际上是一个名为“获取随机整数”的函数。如合约调用它,会立即获得一个随机整数。不必等待下一个区块。不需要等待8分钟。不必提前承诺未来将生成的随机数,只需立即获取即可。
  • 实现方式为,确保每个应用程序和区块都有一个随机种子。从随机数种子中,可得出这些合约调用的个体随机数。

问题在于,如何将随机性种子放入其中,以及如何使其无偏见或不可预测?

Aptos中,使用基于 PVSS 的公共可验证秘密共享的分布式密钥生成协议和可验证的不可预测函数或 VUF。在 Aptos Network 的PoS设置中使 DKG 变得实用并不是一件容易的事。在这种情况下,使 VUF 或加权 VUF 实用起来也不是很容易。

DKG,即在PoS委员会中传播了一个密钥。

与VDF类似,但更具挑战性:

  • Aptos有一个基于委员会的共识协议,该协议在两个小时内进行。因此,每两个小时,validators集可能会发生变化。每当一个新的临时项目以新的valiators集开始时,基本上都希望完成 DKG 协议,以便新的 Epox 委员会拥有共享秘密,并且他们可以计算 VOF,这允许将区块席位放入块中的随机种子。

更多详细技术细节,可参看:Aptos团队2024年论文 Distributed Randomness using Weighted VRFs。

3. keyless account

Aptos 致力于改善用户体验和开发人员体验,并将 Web 3 带给下一个十亿用户。但对于该领域的任何加密货币来说,让新用户进入 Web 3。这些用户必须下载钱包,写下助记词,记住它,了解它的重要性。当用户丢失了助记词,就失去了所有资产。当前Web 3 用户的用户体验就是这样。

在 2023 年左右,Aptos团队思考了很多关于通过为用户管理密钥的 NBC 协议来解决这个问题。但这并没有真正解决问题,因为用户仍然需要向 NPC 系统验证自己的身份。所以他们仍然需要一些凭据来证明他们是用户,以便 NBC 系统为他们提供密钥。因此,当观察周围的 NBC 公司时,发现很多公司都在使用 OpenID Connect,让用户使用 Google 帐户等方式向 NPC 系统证明自己的身份。最初它并不让人满意,但大约一两个月后,很明显,如果 NBC 系统可以验证这个OpenID Connect 凭证,那么区块链也可以,而且实际上并不需要 NBC 系统。

Aptos Keyless 允许用户从现有的 Google 帐户(而不是传统的密钥或助记符)设置 Aptos 区块链帐户。简而言之,使用 Aptos Keyless,用户的区块链帐户就是他们的 Google 帐户。未来,Aptos Keyless 将支持许多 OpenID Connect (OIDC) 提供商,而不仅仅是 Google。

重要的是,Aptos Keyless 通过两种方式维护用户隐私:

  • 用户的电子邮件地址不会在链上向任何人透露,包括其他用户和验证者。
  • 用户的区块链地址和相关交易历史对身份提供商(如谷歌)是隐藏的。

keyless account无钥匙账户对于用户来说是革命性的,原因如下:

  • 通过熟悉的 Web2 登录,如Sign In with Google。
  • 能够在 Aptos 区块链上进行交易,而无需离开应用程序体验来下载钱包。
  • 不需要用户管理密钥。这意味着区块链帐户访问与 OIDC 帐户的访问同义,并且在用户失去对其 OIDC 帐户的访问权限时,可以使用类似 Web2 的恢复流程来重新获得对其区块链帐户的访问权限。
  • 无缝的跨设备体验;用户无论使用什么设备都可以使用 OIDC 帐户登录 - 无需在每台设备上下载钱包软件、导入密钥并使用必须维护的密码进行加密。

参考资料

[1] 2024年3月20日 Zero Knowledge Podcast Episode 316 - Alin Tomescu on Distributed On-chain Randomness and Keyless Accounts
[2] 2024年2月2日博客 Roll with Move: Secure, instant randomness on Aptos
[3] Aptos Keyless

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

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

相关文章

G - Find a way

题目分析 1.双重bfs,遍历两个起点求最短路再计算总和即可 2.唯一的坑点在于对于一个KFC&#xff0c;两人中可能有一个到不了&#xff0c;所以还要对到不了的点距离做处理 #include <bits/stdc.h> using namespace std; using ll long long; const int N 220;struct pos…

交通事故档案管理系统|基于JSP技术+ Mysql+Java+Tomcat的交通事故档案管理系统设计与实现(可运行源码+数据库+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java&#xff0c;ssm&#xff0c;springboot的平台设计与实现项目系统开发资源&#xff08;可…

docker 修改日志存储路径

docker 日志默认存放在 /var/lib/docker/ 下 docker info修改步骤&#xff1a; 1、停止docker服务 systemctl stop docker 2、新建配置文件 vi /etc/docker/daemon.json添加如下内容 {"data-root": "/data/docker" }3、然后把之前的数据全部复制到新目…

python 之 装饰器(Decorators)

装饰器本质上也是一个函数&#xff0c;他可以让其他函数在不需要做任何代码变动的前提下&#xff0c;增加额外的功能&#xff0c;可以接受一个函数作为参数&#xff0c;并返回一个新的函数。 1. 装饰器的定义 装饰器的基本语法是使用符号&#xff0c;后面跟着装饰器的名称。这…

leetcode 494.目标和

思路&#xff1a;可以转化为背包问题。 首先我们看到&#xff0c;题目中要求我们求出目标数的方案数。既然有正数也有负数&#xff0c;那么就一定会从数组中选一部分当负数&#xff0c;选一部分当正数。 假如我们拿z当作选取当正数的元素的和&#xff0c;sum当作全部元素之和…

十、C#基数排序算法

简介 基数排序是一种非比较性排序算法&#xff0c;它通过将待排序的数据拆分成多个数字位进行排序。 实现原理 首先找出待排序数组中的最大值&#xff0c;并确定排序的位数。 从最低位&#xff08;个位&#xff09;开始&#xff0c;按照个位数的大小进行桶排序&#xff0c;将…

06 分页

文章目录 PageInfo PageInfo package com.aistart.tech.common;import java.io.Serializable; import java.util.List;public class PageInfo<T> implements Serializable {private Integer pageNum;//当前页private Integer pageSize;//每页显示条数private Integer pa…

将OpenCV与gdb驱动的IDE结合使用

返回&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;OpenCV4.9.0开源计算机视觉库在 Linux 中安装 下一篇&#xff1a;将OpenCV与gcc和CMake结合使用 ​ 能力 这个漂亮的打印机可以显示元素类型、、标志is_continuous和is_subm…

ClickHouse的表操作

1、背景 由于大数据平台需要对数据进行分析,因为ClickHouse是一个开源的列式数据库管理系统(DBMS)&#xff0c;专为联机分析处理(OLAP)而设计。 官方地址&#xff1a;ClickHouse 开发 | ClickHouse Docs 2、集群中的操作 在操作集群中的表的时候&#xff0c;最好是采用[dbn…

【设计模式】Java 设计模式之状态模式(State)

深入理解状态模式&#xff08;State&#xff09; 一、概述 状态模式是一种行为设计模式&#xff0c;它允许一个对象在其内部状态改变时改变它的行为。对象看起来好像修改了它的类。状态模式把所有的与一个特定的状态相关的行为放到一个类中&#xff0c;并且将请求委托给当前状…

5.79 BCC工具之tcpaccept.py解读

一,工具简介 tcpaccept工具用于追踪接受TCP套接字连接的内核函数(例如,通过accept()函数实现的被动连接;不是connect()函数)。 accept() 是一个在 UNIX-like 系统上用于套接字编程的系统调用,它在 TCP 服务器中起着关键作用。当 TCP 服务器通过 listen() 系统调用使其套…

蓝桥杯 全球变暖

Problem: 蓝桥杯 全球变暖 文章目录 思路解题方法复杂度Code 思路 这道题目可以使用深度优先搜索&#xff08;DFS&#xff09;或广度优先搜索&#xff08;BFS&#xff09;来解决。我们需要遍历整个地图&#xff0c;当遇到陆地&#xff08;‘#’&#xff09;时&#xff0c;就进行…

分块算法模板更新

基础模板&#xff08;区间修改&#xff0c;求区间和&#xff09; #include "bits/stdc.h" using namespace std; #define int long long const int N 100010;int sum[N],add[N],a[N],b[N]; int l[N],r[N];void change(int l1,int r1,int k) {int pb[l1],qb[r1];if(…

【Java常用API】简单爬虫练习题

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏 …

0基础学习VR全景平台篇第146篇:为什么需要3D元宇宙编辑器?

一.什么是3D元宇宙编辑器&#xff1f; 3D元宇宙编辑器是全新3DVR交互渲染创作工具&#xff0c;集3D建模、虚拟展厅、AI数字人等能力&#xff0c;渲染和虚拟现实技术于一身的生产力工具。 具有跨平台和随时随地编辑等特点&#xff0c;可广泛应用于展会、展厅、博物馆、可视化园…

uniapp_微信小程序客服

一、调用api 二、代码 <button open-type"contact">客服</button> 三、小程序后台添加客服人员就行

Ubuntu学习笔记之Shell与APT下载工具

基本都是摘抄正点原子的文章&#xff1a;<领航者 ZYNQ 之嵌入式Linux 开发指南 V3.2.pdf&#xff0c;因初次学习&#xff0c;仅作学习摘录之用&#xff0c;有不懂之处后续会继续更新~ 一、Ubuntu Shell操作 简单的说Shell 就是敲命令。国内把 Linux 下通过命令行输入命令叫…

RabbitMQ docker 单机部署

RabbitMQ docker 单机部署 1.单机部署 我们在Centos7虚拟机中使用Docker来安装。 1.1.下载镜像 方式一&#xff1a;在线拉取 docker pull rabbitmq:3.8-management1.2.安装MQ 执行下面的命令来运行MQ容器&#xff1a; docker run \-e RABBITMQ_DEFAULT_USERroot \-e RAB…

CSS隐藏video标签中各种控件

1.edio标签加上controls会出现视频控件&#xff0c;如播放按钮、进度条、全屏、观看的当前时间、剩余时间、音量按钮、音量的控制条等等 <video type"video/mp4" src"" autoplay"" style"width: 400px; height: 300px;" id"e…

idea 2023 spring initializr 没有JDK1.8选项的解决方法

在升级最新版本的IDEA后,新建项目里面的 spring initializr的选项里面已经没有了JDK1.8的选项了,原因是spring官方的initializr https://start.spring.io/ 现在主推3.x版本这个最低要求是JDK17, 解决方法: 将IDEA默认的 Initializr的URL https://start.spring.io/换成第三方…