ZKLogin 是一种结合 OAuth 与零知识证明的链上认证机制,允许用户在不暴露身份的前提下完成登录验证。它解决了传统签名登录中地址公开、隐私缺失的问题,已在 Sui 网络中率先落地,并正逐步成为 Web3 身份基建的重要方向。
Web3 登录系统传统上依赖钱包签名(EIP-191 或 EIP-712)作为身份认证方式。然而,这种方式会直接暴露用户的公钥地址,使用户行为在链上被永久记录、可被第三方分析、追踪。这种“透明性”虽符区块链精神,却违背了现实世界中对隐私与最小披露的需求。
尤其当 Web3 用户希望同时保持去中心化特性与身份保护时,这种设计成为关键障碍。随着链上应用向游戏、社交、治理等更贴近真实身份的场景拓展,隐私增强型认证系统成为迫切所需。
因此,需要一种方式,既能证明“我是合法用户”,又不需要暴露链上身份本体 —— 这正是 ZKLogin 的切入点。
ZKLogin 是一种基于零知识证明(ZKP)的链上身份验证机制,其核心目标是:
在不暴露 OAuth 身份信息的前提下,实现链上认证与账户绑定。
id_token
(JWT)Sui 是目前最先落地 ZKLogin 的公链,其 ZKLogin 机制结合了 OpenID(OAuth)与 zkSNARK 电路,构建了完整的 OAuth → 零知识 → 链上账户绑定流程。
用户通过 Google OAuth 获取 id_token
(JWT 格式)
本地 ZK 电路读取 JWT 内容:
sub
(Google 用户唯一 ID)aud
(App ID)iss
(Google 身份签发者)exp
(过期时间)构造电路公共输入(public input):
aud
, iss
, hashed_sub
, address_seed
, max_epoch
, nonce
, jwt_exp
本地使用 zkSNARK 电路生成 zkProof
,证明用户拥有该 id_token
且未过期
本地生成链上地址:
zkAddress = hash(aud, sub, nonce) // 由电路输出,确定用户唯一地址
**将 zkProof
+ public inputs 发送给链上 verifier...
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!