分布式链上随机数和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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

四、C语言中的数组:如何输入与输出二维数组(数组,完)

本章的学习内容如下 四、C语言中的数组:数组的创建与初始化四、C语言中的数组:数组的输入与元素个数C语言—第6次作业—十道代码题掌握一维数组四、C语言中的数组:二维数组 1.二维数组的输入与输出 当我们输入一维数组时需要一个循环来遍历…

经典Bug永流传---每周一“虫”(四十五)

如果有人错过机会,多半不是机会没来,而是因为机会过来时,没有一伸手抓住它。 大写W惹的祸 前提: A账号已登录 步骤: 打开某商品链接,然后在商品的评论区任意一条评论,点击回复,回…

Flink入门知识点汇总(一)

具体内容请看b站尚硅谷课程! 32_Flink运行时架构_提交流程_Yarn应用模式_哔哩哔哩_bilibili Flink本身有状态机制,状态都存储在Flink内部结构中,无需集成Mysql等对于精确一次Exactly-once,Flink进行了相关的配置,无需像…

爱因斯坦可以教给在机器学习中利用对称性

爱因斯坦可以教给我们关于机器学习的知识 在机器学习中利用对称性 目录 一、说明二、物理学中的对称性三、机器学习中的对称性四、卷积神经网络 (CNN) 中的对称性五、将对称性集成到机器学习中,用于平面图像及其他图像六、引用 一、说明 在许…

【MySQL】对表的相关操作(DDL)

👦个人主页:Weraphael ✍🏻作者简介:目前学习计网、mysql和算法 ✈️专栏:MySQL学习 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论&#x1f4ac…

[Python人工智能] 四十四.命名实体识别 (5)利用bert4keras构建Bert-CRF实体识别模型(实体位置)

从本专栏开始,作者正式研究Python深度学习、神经网络及人工智能相关知识。前文讲解如何实现中文命名实体识别研究,构建BiGRU-CRF模型实现。这篇文章将继续以中文语料为主,介绍融合Bert的实体识别研究,使用bert4keras和kears包来构建Bert+BiLSTM-CRF模型。然而,该代码最终结…

GPT模型部署后续:聊天机器人系统的扩展与优化

一、多轮对话支持 为了实现多轮对话支持,我们需要维护用户的会话上下文。这可以通过在服务器端使用一个字典来存储会话状态实现。 目录 一、多轮对话支持 下面是一个简单的扩展例子: 二、性能优化 三、用户界面与交互优化 下面是一个简单的HTML示例&…

如何使用Python进行网络安全与密码学【第149篇—密码学】

👽发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 用Python进行网络安全与密码学:技术实践指南 随着互联网的普及,网络…

SpringMVC 简介及入门级的快速搭建详细步骤

MVC 回顾 MVC,即Model-View-Controller(模型-视图-控制器)设计模式,是一种广泛应用于软件工程中,特别是Web应用开发中的架构模式。它将应用程序分为三个核心组件: Model(模型)&#…

论文阅读:Forget-Me-Not: Learning to Forget in Text-to-Image Diffusion Models

Forget-Me-Not: Learning to Forget in Text-to-Image Diffusion Models 论文链接 代码链接 这篇文章提出了Forget-Me-Not (FMN),用来消除文生图扩散模型中的特定内容。FMN的流程图如下: 可以看到,FMN的损失函数是最小化要消除的概念对应的…

福建科立讯通信 指挥调度管理平台 SQL注入漏洞复现(CVE-2024-2620、CVE-2024-2621)

0x01 产品简介 福建科立讯通信指挥调度管理平台是一个专门针对通信行业的管理平台。该产品旨在提供高效的指挥调度和管理解决方案,以帮助通信运营商或相关机构实现更好的运营效率和服务质量。该平台提供强大的指挥调度功能,可以实时监控和管理通信网络设备、维护人员和工作任…

java获取数据库信息为空解决方案

问题:1.可能的解决方法一2.可能的解决方法二3.可能的解决方法三4.可能的解决方法四5.可能的解决方法五(我自己问题的解决方案)总结 问题: 刚发现这个问题的时候还是在进行插入数据操作的时候,发现报错。 报错的原因是因…

java项目将静态资源中的文件转为浏览器可访问的http地址

新增一个类叫啥无所谓,主要是实现 WebMvcConfigurer 加上注解 Configuration项目启动时加入bean中 只操作addResourceHandlers这一个方法 其他都没用 文章下方附带一个简易的上传图片代码 package cn.exam.config;import org.springframework.context.annotati…

155.乐理基础-和弦固定标记法(四)加音(add)和弦六和弦意义之二

如果到这五线谱还没记住还不认识的话去看102.五线谱-高音谱号与103.五线谱-低音谱号这两个里,这里面有五线谱对应的音名,对比着看 如果一章没落下,看到这里,但是看不懂什么意思,那就强行下看,看着看着指不…

Vue+SpringBoot在线教育考试及管理平台开发(纯原创)后续还在开发,会持续更新

登录页面设计 登录页面设计思路-分为三个角色进行登录&#xff0c;分别为学生&#xff0c;教师&#xff0c;管理员。 前端将登录设计为表单形式&#xff0c;通过选项组件绑定角色参数&#xff0c;向后端传递角色信息&#xff0c;通过表单绑定向后端传递登录者所有信息 <div …

js中filter处理后端返回表格数据

<template><div><el-table:data"tableData"style"width: 100%"><el-table-column:formatter"tranForm"prop"gender"label"性别"width"180"></el-table-column><el-table-column…

K8S Storage

概述 一般情况下&#xff0c;K8S中的Pod都不应该将数据持久化到Pod中&#xff0c;因为Pod可能被随时创建和删除&#xff08;扩容或缩容&#xff09;&#xff0c;即便是StatefulSet或Operator的Pod&#xff0c;也都不建议在Pod里存放数据&#xff0c;可以将数据持久化到Host上。…

构建以太网交换网络——(以太网基础与VLAN配置实验)

实验介绍 关于本实验 以太网是一种基于CSMA/CD&#xff08;Carrier Sense Multiple Access/Collision Detection&#xff09;的共享通讯介质的数据网络通讯技术。当主机数目较多时会导致冲突严重、广播泛滥、性能显著下降甚至造成网络不可用等问题。通过交换机实现LAN互连虽然…

小程序云开发实战:通用企业产品信息展示小程序

之前做小程序都是自己搭建数据管理后台&#xff0c;比如我之前做的小程序&#xff1a;一搜就学&#xff0c;就是使用java来做管理后台&#xff0c;小程序做前端展示。但是对于简单的小程序来说&#xff0c;做一套管理后台有点拿大炮打蚊子&#xff0c;所以使用云开发就是不错的…

怎样修改grafana的Loading picture和加载的文本

登录装了grafana的linux机器 command “sudo vi /usr/share/grafana/public/views/index.html”&#xff0c;编辑配置文件。 找到.preloader__logo更改background-image. 这里可以是个url也可以是个路径。 如果想要更改加载的文字.可以更改 的内容 改完:wq保存以后退出&…