由于钱包复杂性导致的新用户入门障碍是区块链中一个长期存在的问题,而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|英文电报群|中文电报群