解密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…...
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
