解密zkLogin:探索前沿的Sui身份验证解决方案
由于钱包复杂性导致的新用户入门障碍是区块链中一个长期存在的问题,而zkLogin是其简单的解决方案。通过使用前沿的密码学和技术,zkLogin既优雅又复杂。本文深入探讨了zkLogin的工作原理,涵盖了用户和开发者的安全性方面,并解释了Sui的设计如何促进了这一创新的OAuth登录流程。
让我们深入了解吧!
zkLogin工作原理
使用zkLogin为每个OAuth凭据&应用程序组合创建了一个独特的Sui地址。单个OAuth凭据可以用于管理与无限数量的应用程序相关联的独立地址。例如,将单个Google帐户连接到两个不同的去中心化交易apps,将产生两个不同的Sui地址,每个app一个。
在创建典型的区块链地址时,地址将关联一个永久的公钥-私钥对,并且地址标识符是从公钥派生的。而使用zkLogin,地址与临时密钥对相关联,必须通过OAuth登录流程定期重新生成。按照设计,Sui地址可以保持不变,而相关的密钥对可以更改。这是因为zkLogin地址是从OAuth提供程序返回的有效负载中获得的唯一标识符(称为“密钥声明”),而不是从公钥派生的。
zkLogin过程包括六个连续步骤:
视频学习:https://www.youtube.com/watch?v=Jk4mq5IOUYc
第一步:生成临时密钥
当用户打开应用时,它会为用户生成一个临时密钥对,这个密钥对有一个有效期限,决定了所需登录的频率。
第二步:生成JWT
应用提示用户通过OAuth提供商登录来进行身份验证,生成一个JSON Web Token(JWT),这是提供商的数字签名数据的有效载荷。在zkLogin中,这个JWT包括一个nonce字段,其中包含了公钥以及一个过期时间。JWT中嵌入了密钥声明,用于后续生成Sui地址。
第三步:请求用户的唯一salt
salt(用于随机数据的常见加密术语)是一个任意的数字字符串,与JWT和临时密钥对一起用来将OAuth凭据与Sui地址关联起来。这一步的路径取决于应用程序,因为构建者有不同的设计选项。zkLogin文档概述了多种salt管理选项,每种都有自己的权衡。
一种方法是使用SSO类型的salt管理选项,它使用salt服务来存储并根据需要提供salt。在这种情况下,应用程序将JWT token发送到salt服务,后者在验证JWT token后返回唯一的用户salt。另一种salt管理方法要求用户在第一次登录时设置他们的salt,并自行管理它,将其视为密码或PIN码。
第四步:生成零知识证明
凭借JWT token、salt和公钥,流程继续请求从零知识(zk)证明服务中获得zk证明。这一关键步骤通过严格审查请求的准确性来确保:1)nonce正确定义并包括公钥,2)提供的密钥声明与JWT一致,3)地址与密钥声明和用户salt一致,4)OAuth提供商的签名正确。如果任何元素未符合期望,整个步骤都将失败。
第五步:识别用户的Sui地址并构建交易
然后,应用程序根据从JWT中提取的用户salt和密钥声明来识别用户的Sui地址。在转发给Sui之前,使用与临时签名、zk证明和JWT的私钥捆绑的附加输入,对交易进行了认可。
第六步:验证交易
一旦在区块链上,Sui验证节点将仔细检查zk证明和临时签名以进行认证。在一瞬间,交易被正式记录在Sui中,无缝地完成整个流程。
zkLogin本地支持使用OAuth凭据进行简单的登录流程
安全注意事项
与任何其他“使用X登录”功能一样,用户需要确保他们用于登录的帐户的安全性。如果由于任何原因用户无法使用其OAuth凭据登录,他们将无法访问与该凭据关联的Sui地址。忘记密码的用户可以求助于OAuth服务提供的标准恢复程序以恢复访问权限。
强烈建议在zkLogin操作中使用的所有OAuth帐户都加入双重身份验证(two-factor authentication,2FA),以提高其OAuth提供商帐户和关联的Sui地址的安全性。应用程序构建者还应鼓励他们的用户采取最佳安全实践,如使用安全密码和2FA。值得注意的是,即使OAuth帐户受到入侵,黑客要通过zkLogin访问Sui地址,他们还必须获取用户的salt。
应用程序构建者应优先考虑保护和限制salt值的曝光。这个值充当连接用户的Web2和Web3凭据的关键,提交给zk证明者是至关重要的。因此,强烈建议将zk证明服务托管在应用程序的后端,有效地限制任何潜在的第三方访问salt的可能性。构建者可以选择独立开发自己的zk证明者,利用现成的公共参考字符串(common reference string,CRS)。
有关证明者和salt管理的更多信息,请阅读《zkLogin构建者的最佳实践和业务思考》。
Sui在zkLogin方面具有独特的优势
Sui的密码学灵活性和面向对象的设计使其能够通过zkLogin实现无缝的OAuth登录集成。与大多数仅本质上支持一种密码身份验证方法的区块链不同,Sui通过允许直接集成各种密码体制来实现差异。这种能力消除了用户因使用协议外的密码而产生额外的gas费来执行交易的需要。在Sui中,引入新的本地密码身份验证方法能够保持与现有系统的兼容性,确保用户选择不同的密码方法时不会受到不利影响。
传统的Web3 OAuth登录解决方案依赖于智能合约来实现JWK,需要信任Oracle数据发布的准确性。Sui通过将JWK表示为Sui对象改革了这一过程,从而巩固了验证。通过zkLogin,Sui的验证节点承担了Oracle的角色,确保遵守JWK验证的预定义规则。这种简化的方法增强了身份验证过程中的安全性和可靠性。
展望未来
随着zkLogin在主网上迈出了第一步,我们期待着未来能够整合更多的OAuth提供者和增强功能。zkLogin是Sui生态系统的重要里程碑,但真正的激动人心之处在于开发者们将掌握主动权,将zkLogin集成到他们的应用程序中。实施这一基本功能的巨大潜力必然会引发生态系统的演进。这个旅程才刚刚开始,前景是无限的。
有关如何将zkLogin集成到您的应用程序的更多详细信息,请访问zkLogin文档。
关于 Sui Network
Sui是基于第一原理重新设计和构建而成的L1公有链,旨在为创作者和开发者提供能够承载Web3中下一个十亿用户的开发平台。Sui上的应用基于Move智能合约语言,并具有水平可扩展性,让开发者能够快速且低成本支持广泛的应用开发。获取更多信息:https://linktr.ee/sui_apac
官网|英文Twitter|中文Twitter|Discord|英文电报群|中文电报群
相关文章:
解密zkLogin:探索前沿的Sui身份验证解决方案
由于钱包复杂性导致的新用户入门障碍是区块链中一个长期存在的问题,而zkLogin是其简单的解决方案。通过使用前沿的密码学和技术,zkLogin既优雅又复杂。本文深入探讨了zkLogin的工作原理,涵盖了用户和开发者的安全性方面,并解释了S…...
js构造函数
构造函数 通过 new 函数名 来实例化对象的函数叫构造函数。 任何的函数都可以作为构造函数存在。之所以有构造函数与普通函数之分,主要从功能上进行区别的,构造函数的主要 功能为 初始化对象,特点是和new 一起使用。new就是在创建对象&#x…...
性能测试-redis常见问题
缓存击穿、缓存穿透、缓存雪崩 缓存雪崩 解决办法 1.设置缓存失效时间,不要在同一时间 2.redis集群部署 3.不设置缓存设置时间 4.定时刷缓存的时间 缓存穿透 请求不管返回什么数据都返回给redis对参数合法器进行验证,不合法的时候直接过滤掉使用布…...
预测:2024 年将是互联网永远改变的一年。
人工智能的下一步发展将彻底改变互联网的各个方面。 如果你真的认为人工智能只是另一个炒作周期,那么你就会迎来新的觉醒。 以下是即将发生的事情: 1. 自主待办事项列表/代理:无需人工干预即可执行任务的人工智能。 这些代理将发送您的电子邮…...
Vue2 与 React 的区别
【5年以上前端】Vue 和 React 的区别看这里 - 知乎 vue和react的区别_vue react-CSDN博客 Vue 和 React 有什么不同?_vue和react区别-CSDN博客 1、相同点: ① 都使用了虚拟 DOM; ② 组件化开发; ③ 都是单向数据流ÿ…...
【AI视野·今日Robot 机器人论文速览 第五十一期】Tue, 10 Oct 2023
AI视野今日CS.Robotics 机器人学论文速览 Tue, 10 Oct 2023 Totally 54 papers 👉上期速览✈更多精彩请移步主页 Daily Robotics Papers On Multi-Fidelity Impedance Tuning for Human-Robot Cooperative Manipulation Authors Ethan Lau, Vaibhav Srivastava, Sh…...
零经验想跳槽转行网络安全,需要准备什么?
最近在后台看到很多私信都是有关转行网络安全的问题,目前咨询最多的都是:觉得现在的工作没有发展空间,替代性强,工资低,想跳槽转行网络安全。其中,他们主要关心的是:没有经验怎么学习࿱…...
Rust-是否使用Rc<T>
Rust的所有权机制,数据允许通过借用的方式,在函数的上下文中传递数据。如果离开数据作用的有效范围,这个借用就会失效,编译就会报错。这也是我们不会将借用(引用)作为函数的返回值的原因。下面的代码编译失败。 fn cr…...
论文解析——一种面向Chiplet互连的高效传输协议设计与实现
作者及发刊详情 熊国杰, 张津铭, 贺光辉. 一种面向Chiplet互连的高效传输协议设计与实现[J]. 计算机工程与科学, 2023, 45(08): 1339-1346.XIONG Guo-jie, ZHANG Jin-ming, HE Guang-hui. Design and implementation of an efficient transmission protocol for Chiplet inter…...
svo2.0 svo pro 编译运行
sudo apt-get install python-catkin-tools python-vcstool unable to locate python-vcstool 添加ros源 然后sudo apt update 依赖库下载,查看dependencies.yaml文件: 逐个clone到src目录下即可 dbow2_catkin 编译出错: 把https://gi…...
微信小程序前端生成动态海报图
//页面显示<canvas id"myCanvas" type"2d" style" width: 700rpx; height: 600rpx;" />onShareShow(e){var that this;let user_id wx.getStorageSync(user_id);let sharePicUrl wx.getStorageSync(sharePicUrl);if(app.isBlank(user_i…...
SQL如何导入数据以及第一次上机作业
如何导入excel数据 首先得学会导入数据 使用excel格式不需要改成其它格式(如csv,txt),因为你改了到时候还是会报错(实践过使用Sum统计总数一直说我数据格式有问题) 首先右键TSGL数据库->任务->导入数…...
数据结构-----红黑树简介
目录 前言 1.什么是红黑树? 2.为什么需要红黑树?(与AVL树对比) 3.红黑树的特性 前言 在此之前我们学习过了二叉排序树和平衡二叉树(AVL树),这两种树都是属于搜索树的一种,那么今天…...
哈佛教授因果推断力作:《Causal Inference: What If 》pdf下载
因果推断是一项复杂的科学任务,它依赖于多个来源的三角互证和各种方法论方法的应用,是用于解释分析的强大建模工具,同时也是机器学习领域的热门研究方向之一。 今天我要给大家推荐的这本书,正是因果推断领域必读的入门秘籍&#…...
Drecom 的《Eternal Crypt - Wizardry BC -》加入 The Sandbox 啦!
经典 “Wizardry” 游戏系列的新区块链迭代将通过全球合作拓展 Web3 游戏宇宙。 我们非常高兴地宣布,沙盒游戏公司与富有远见的传奇游戏《Wizardry》系列创造者 Drecom 将建立充满活力的合作伙伴关系。我们将共同推出《Eternal Crypt - Wizardry BC -》,…...
外贸网站流量下降可能是这五点原因造成的
随着互联网的发展,企业开始重视网站优化,越来越多的人开始从事网站优化工作,然而真正做起来,很多站长朋友并非一帆风顺,往往越到很多问题,比如外贸网站流量出现异常下降情况,但很多时候在遇到外…...
交通部 EDI是什么?如何处理?
交通部于1996年开始实施《国际集装箱运输电子信息传输和运作系统及示范工程》,即在中国远洋运输集团、上海口岸、宁波口岸、天津口岸和青岛口岸建立 EDI 示范工程。 交通部 EDI 的数据结构 电子口岸或者其他物流企业需要确保能够生成和解析符合交通部要求的EDI数据…...
【Redis】Java Spring操作redis
目录 引入Redis依赖StringRedisTemplate使用String使用List使用Set使用hash使用zset 引入Redis依赖 StringRedisTemplate 此处RedisTemplate是把这些操作Redis的方法,分成了几个类别,分门别类的来组织的。 此处提供的一些接口风格,和原生的Re…...
如何养好一个微信新号?
最近听到一句话,“微信是个完整的互联网”。 你还真别说,真是。如果你还觉得微信只是个聊天视频打电话的工具,那可就有信息差了。 微信有各种各样的小程序,有打车的,有交话费的,有游戏,可以说&a…...
flutter问题汇总
一直卡在building a flutter app for general distribution; AS Message窗口显示 依赖下载失败: 1、修改仓库地址的配置:android/build.gradle repositories {maven { url https://download.flutter.io }maven { url "https://maven.a…...
2.1 初探大数据
文章目录 零、学习目标一、导入新课二、新课讲解(一)什么是大数据(二)大数据的特征1、Volume - 数据量大2、Variety - 数据多样3、Velocity - 数据增速快4、Value - 数据价值低5、Veracity - 数据真实性 (三࿰…...
论自动化测试中的xpath | 多语言测试最新案例
XPath(XML Path Language)是一门在XML文档中查找信息的语言。XPath是XML处理中非常重要的组成部分,能大大简化文档的解析和处理。它与XSLT、XPointer等标准一起被广泛应用于XML的解析处理。 一般情况下,xpath主要应用在以下几个方…...
CSS基础详细解析(附带综合小练习)
目标:掌握 CSS 属性基本写法,能够使用文字相关属性美化文章页。 01-CSS初体验 层叠样式表 (Cascading Style Sheets,缩写为 CSS),是一种 样式表 语言,用来描述 HTML 文档的呈现(美化内容&#…...
react中ant.design框架配置动态路由
目录 什么是动态路由? 应用场景: ant.design动态路由如何配置: 首先:找到app.tsx文件 然后:找到menuHeaderRender 其次:修改menuHeaderRender为menuDataRender编辑 最后:在箭头函数里re…...
Linux运行环境搭建系列-Openresty安装
安装Openresty 构建环境:腾讯云CentOS 7.9。 更新云库 yum update添加&&安装云库 wget https://openresty.org/package/centos/openresty.repo sudo mv openresty.repo /etc/yum.repos.d/ sudo yum check-update sudo yum install openresty安装命令行工具…...
React TreeSelect设置默认展开项的方法
需要实现TreeSelect组件的onTreeExpand、treeExpandedKeys方法。 代码样例如下: 1.TreeSelect标签部分 render() {const {codeselect} this.props;const {treeExpandedKeys} this.state ................<TreeSelectshowSearch{false}dropdownStyle{{ maxHei…...
Golang基础学习笔记
Golang基础学习笔记 1、下载安装 1.1、下载 Golang下载地址:https://golang.google.cn/dl/ 1.2、安装 1.3、环境变量 # GOPATH D:\GolandProjects# GOPROXY https://mirrors.aliyun.com/goproxy# 启用Go模块支持 go env -w GO111MODULEon1.5、验证安装/配置 1.…...
ES _bulk 批量操作用法
es 的 bulk 操作,是用来批量发送请求,或者理解为批量操作的。 支持4种操作 bulk 支持多种操作,如下create、index、update、delete。 create 如果文档不存在就创建,但如果文档存在就返回错误index 如果文档不存在就创建&#x…...
LCR 176.判断是否为平衡二叉树
题目来源: leetcode题目,网址:LCR 176. 判断是否为平衡二叉树 - 力扣(LeetCode) 解题思路: 若树中任意节点左子树是平衡二叉树,右子树是平衡二叉树 且该节点左右子树平衡,则该树…...
跨境商城源码有哪些独特的功能和优势
1. 强大的跨境支付功能 跨境商城源码具备强大的跨境支付功能,支持多种支付方式,包括信用卡、支付宝、微信支付等。该功能遵循国际支付标准,能够确保支付过程的安全性和可靠性,为用户提供便捷的跨境购物体验。 2. 多语言和多货币支…...
用wordpress仿一个网站模板下载/怎样做一个产品营销方案
弱视治疗的基础,是“大脑神经可塑性”。基于这一理论,大龄弱视患者,找到正确的治疗方法,能很快提高视力,甚至立体视。前几期推送的文章,分享了成人弱视治疗案例。弱视患者的视觉训练,主要包括&a…...
wordpress图片属性添加图片/seo优化技术培训中心
在学习linux内核源码kfifo队列之际,自己用C模板简单写了一个类似的队列,如下: 对linux内核的kfifo队列讲解详细可参考:Linux内核数据结构kfifo详解 #ifndef MFIFO_H #define MFIFO_H#include <iostream>using namespace s…...
站点搜索/产品推广文案范文
2019独角兽企业重金招聘Python工程师标准>>> 1. volatile的作用 a.volatile关键字可以简单保持赋值和返回操作的原子性,弱同步。 比如:读取和写入long和double不是原子性的操作,jvm会把64位(long和double)的…...
个人短信接口wordpress/搜索引擎营销经典案例
因为近几年工信部对电话的打击和通讯规则的变化,传统的外呼模式已经不能满足企业电销业务的开展,光靠手机号卡没办法支撑得了频繁的经常外呼,而传统坐席因前期部署和后期维护的成本极高,也逐渐被市场淘汰。 基于目前的市场情况&am…...
企业网站管理制度建设/关于友情链接的作用有
网络协议系列文章 网络协议(一):基本概念、计算机之间的连接方式 网络协议(二):MAC地址、IP地址、子网掩码、子网和超网 网络协议(三):路由器原理及数据包传输过程 网络协议(四):网络分类、ISP、上网方式、公网私网、NAT 网络…...
wordpress 仿煎蛋妹子图/seo新闻
阿里云ECS服务器操作系统如何选择?笔者分享阿里云操作系统选择说明及选择方法: 公共镜像指的就是:操作系统(Window或Linux) 阿里云服务器操作系统镜像地址:Linux系统镜像&Windows系统镜像 如何选择操作…...