关于 zklogin
zklogin 是一项技能,为 AI 编码 Agent 提供 Sui zkLogin 概念和集成参考。它说明基于 OAuth 的无钱包登录,并按任务引导至协议流程、安全性和应用集成资料。
主要功能
- 01基于 OAuth 的 Sui 登录概念
- 02协议架构参考
- 03应用集成指导
- 04安全规则与常见误区
- 05按任务路由参考资料
适用场景
- 01解释 zkLogin 协议流程
- 02规划 zkLogin 应用集成
- 03检查 JWT、salt 和密钥安全问题
MCP 相关
在环境支持时,该技能会引导查询 Sui 文档 MCP 服务 https://sui.mcp.kapa.ai,以核实信息并获取最新细节。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ mystenlabs/ skills --skill zklogin安装后在 Claude Code 中输入/zklogin确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
architecture.mdintegration.mdevals/evals.json详细介绍
zkLogin 技能
**MCP 工具:**如果你的环境中提供了此功能,也请查询 Sui 文档 MCP 服务(
https://sui.mcp.kapa.ai),以获取最新答案。使用它进行验证,并了解这些参考文件未涵盖的详情。
**来源限制:**此技能中的所有信息均仅来源于 docs.sui.io/concepts/cryptography/zklogin。扩展或更新此技能时,只能从此来源获取信息。不要使用第三方博客、教程或非官方文档。
zkLogin 是 Sui 的一项基础功能,用户可以使用现有的 OAuth 凭据(Google、Facebook、Apple 等)登录,而无需管理传统的加密钱包。它使用零知识证明,将 OAuth 身份与 Sui 地址关联起来,同时不在链上泄露 OAuth 标识符。AI 编码中常见的错误包括混淆 salt、临时密钥和 ZK 证明在安全模型中的作用,误以为 JWT 泄露就意味着资金已遭到盗用,以及不了解地址是永久的,而会话是临时的。
此技能会引导你查阅相应的参考文件。只加载与当前任务相关的文件。
此技能中的所有模式均基于: https://docs.sui.io/concepts/cryptography/zklogin
如果不确定任何细节,请在回答前获取相关页面。 不要根据其他身份验证系统进行猜测或推断。
参考文件
architecture -- 架构和协议流程
路径: architecture.md
适用场景: 用户询问 zkLogin 的内部工作原理、三个关键实体(前端、salt 服务、证明服务)、10 步协议流程、地址派生、会话时长、Groth16 仪式,或 JWT 和 nonce 的作用时加载。
涵盖内容: 三个关键实体、JWT 结构、协议流程(10 步)、地址派生公式、会话时长和临时密钥过期、密钥表示法、Groth16 仪式。
integration -- 集成指南
路径: integration.md
适用场景: 用户需要将 zkLogin 集成到应用中、选择受支持的 OpenID 提供商、验证链下签名、了解安全权衡或排查常见问题时加载。
涵盖内容: 各网络支持的 OpenID 提供商、实施步骤、链下签名验证方法、安全注意事项、常见问题解答。
路由指南
| 任务 | 加载 |
|---|---|
| 解释 zkLogin 是什么 | 仅 SKILL.md |
| 了解协议流程 | architecture |
| 了解地址派生 | architecture |
| 了解会话时长和临时密钥 | architecture |
| 选择 OpenID 提供商 | integration |
| 将 zkLogin 集成到应用中 | integration |
| 链下验证 zkLogin 签名 | integration |
| 了解安全属性 | integration |
| 回答 zkLogin 常见问题 | integration |
| 全面深入了解 zkLogin | 所有参考文件 |
技能内容
核心概念
-
无钱包登录。 zkLogin 让用户使用 OAuth 凭据(Google、Facebook、Apple 等)在 Sui 上进行交易,无需管理助记词或私钥。用户的 OAuth 身份会映射到一个确定性的 Sui 地址。
-
三个关键实体。 该系统涉及三个组件:(1)管理临时密钥和 OAuth 流程的应用前端;(2)为每位用户返回一致且唯一的盐值的盐值服务;(3)生成零知识证明的证明服务。
-
临时密钥对。 每个会话都使用一个短期有效的密钥对。临时公钥、最大 epoch 和随机数会嵌入 OAuth nonce 中。超过 max_epoch 后,用户需要重新登录并生成新的密钥对和 ZK 证明,但会继续使用同一个 Sui 地址。
-
零知识证明。 Groth16 zkSNARK 证明会验证 nonce 是否以正确方式生成、密钥声明值是否与 JWT 匹配、RSA 签名是否有效,以及地址是否与密钥声明和盐值一致——同时不会在链上泄露 OAuth subject 标识符。
-
永久地址。 从 zkLogin 派生的 Sui 地址是永久的。只有在 sub、iss、aud 或 user_salt 发生变化时,地址才会改变。同一用户使用不同的提供方或应用时,会生成不同的地址。
规则
- 切勿将 JWT 泄露与资金被盗混为一谈。 只要临时私钥安全,JWT 泄露可能会损害隐私,但不会导致资金被盗。
- 切勿认为 ZK 证明本身就能授权交易。 临时签名和 ZK 证明缺一不可;任何一者单独都不够。
- 务必说明盐值对隐私和访问都至关重要。 盐值会断开 OAuth 标识符与链上地址之间的关联。丢失盐值意味着永久失去访问权限。
- 务必指出 iss、aud 和 kid 会在链上公开。 JWT 本身不会发布到链上,但这三个字段是可见的。
- 切勿建议将传统钱包转换为 zkLogin 地址。 两者使用不同的地址派生方案,不能互换。
常见错误
- 认为 JWT 泄露就意味着资金被盗。 仅凭 JWT 并不足够。攻击者还需要临时私钥和盐值,才能创建有效交易。
- 忘记证明的有效范围仅限当前会话。 ZK 证明仅在临时密钥过期前(max_epoch)有效。证明无法跨会话重复使用,但可以在同一会话内缓存并重复使用。
- 忽略盐值在隐私保护中的作用。 没有盐值,OAuth subject 与 Sui 地址之间就没有关联。如果盐值泄露,这种关联就会变得可见,但资金仍然安全。
- 认为所有提供方都适用于所有网络。 部分提供方(Slack、Kakao、Microsoft)仅在 Devnet 和 Testnet 上可用,在 Mainnet 上不可用。其他提供方(RedBull、Amazon、WeChat、Auth0、Okta)仍在审核中。