以下内容来自 Cipher 在 Nervos Talk 上发布的帖子,原文链接:
- https://talk.nervos.org/t/joyid/6780
目前的区块链钱包大多数基于助记词,非常用户不友好,也缺乏恢复机制。基于邮件的 UniPass 和基于手机号的 Flashsigner(Flashsigner 本质上是基于用户自己持有私钥备份)是一个尝试,但它们的问题是仍然依赖其他的中心化基础设施。JoyID(域名 joy.id,尚在开发中)是基于 FIDO WebAuthn 协议和 Nervos CKB 的一个跨平台、跨终端、无密码无助记词的钱包方案,用户在创建、使用、甚至恢复时均不需要密码和助记词,同时它支持以下特征:- 支持 CoTA 2 Rollup NFT、FT 资产的管理
- 支持用户名 + UID 作为身份标识(例如 cipher#0027)
JoyID 利用了 WebAuthn 的技术,目前该技术已经被 MacOS、Windows、Linux、ChromeOS、iOS、Android 等主流操作系统全面支持。该技术允许任何网站在用户设备侧 TEE 可信执行环境中创建公私钥对,并使用私钥签名,且私钥无法由任何人读取。在签名授权过程中,采取生物识别或系统 PIN 码验证等方式进行本地身份验证。JoyID 支持 WebAuthn 的主流签名算法 secp256r1(P256)进行签名验证,并在 CKB L1 上使用 CoTA 扩展对用户多个设备生成的公钥进行登记,指向相同的 CoTA Cell ID,从而完成了用户地址的抽象。JoyID 使用用户静态信息标准,包括用户名、头像、个人描述等都可以以 CTMeta 的标准格式写在链上,方便进行展示。
用户在设备侧访问 joy.id 调用 WebAuthn API 可以直接生成 r1 算法的公私钥对,我们利用该公钥即可生成一个 CKB 地址。但注意此时用户尚未注册 CoTA,因此:- 用户无法绑定另一个设备做授权,也无法设置社交恢复信息。
用户或者第三方可以代用户注册 CoTA cell,并获得用户 CCID。该过程需要 ~150CKB。
joy.id 会检测当前环境中是否存在用户的密钥信息,并以列表的方式展示给用户。如果已经保存了用户的密钥信息(例如 iCloud 会在多个设备中同步用户私钥),则直接点击用该密钥登录。如果没有保存对应用户的信息,则提示用之前的设备授权。新环境会展示一个二维码,原设备扫描并签名授权后,新环境即完成了对用户的认证。但新环境中目前仍然没有用户的密钥,因此后续进一步需要用户授权时,均会显示二维码,由用户使用移动设备进行扫码签名。该用户体验与 Wallet Connect 类似。应用方此时可以提示用户绑定当前设备,此时新环境需要生成新公私钥对,由原设备签名授权后,该公钥上链,作为 CoTA 数据扩展的子密钥,后续即可脱离原设备使用。用户的密钥由 Joy.id 统一管理(但整个架构实际上可以由任何网站使用,统一管理的好处是用户的地址统一)。所有的认证和签名授权均需要第三方网站调用 joy.id 来实现。第三方网站的请求转到 joy.id 后,它会自动查看当前环境中的密钥情况,并引导用户直接签名还是展示待签名二维码让另一个设备去签名。JoyID 的签名内容包括:私钥本身对交易的签名和私钥对应的公钥保存在 JoyID 链上 SMT 的证明。Joy.id 前端将完整开源,第三方(包括用户自己)可以自行部署。即便 joy.id 关闭,用户依然可以通过本地部署的形式管理自己的秘钥。
一旦用户所有设备丢失或者损坏,用户资产即无法恢复。因此 JoyID 设计了社交恢复功能。用户可以设置不少于三个好友,在自己设备丢失时可以要求好友使用 JoyID 进行签名授权以便将自己新设备的公钥添加到链上的设备列表,从而恢复控制权。用户直接访问 Joy.id 可以进入信息管理页面。该页面中,用户可以设定用户名、头像、简介,管理多设备(多个子密钥),设置社交恢复,或者申请社交恢复等功能。
JoyID 目前已经完成了协议设计和部分协议开发工作,预计在两个月内实现测试网运行,欢迎关注项目进展。1. @canof: 主设备无法解绑,那么可以授权更换吗?过了几年时间手机还是会坏的。Cipher: 主设备坏了或者丢失没关系的,可以添加任意多个子设备,使用权限和主设备相同。2. @keith: 如果可以社交恢复, 那为什么要限制主设备不可解绑呢?Cipher: 为了保证地址可以离线生成且在秘钥增删时不变,主设备公钥是地址的 lock args。3. @keith: 要保持地址不变, 需要保证主公钥不变, 这个比较好理解。但是主公钥和主设备必须要保证绑定关系吗? 是不是可以在创建的时候, 生成一次性的公私钥作为主公钥, 然后再生成新的子公私钥绑定到主设备上。如果主设备不可解绑, 丢失的情况下感觉风险还是挺大的。Cipher: 有解决方案,稍微麻烦一点。用户每次解锁都提供秘钥有效性证明即可,可以加到 JoyID 的下一步开发计划中。关于 JoyID,大家有任何问题都可以移步 Nervos Talk,在这个帖子下面回复哦:
- https://talk.nervos.org/t/joyid/6780
Nervos 网址:https://www.nervos.org/
中文电报群:https://t.me/NervosNetworkcn
中文推特:https://twitter.com/CKBMeta
中文Discord:https://discord.gg/f2qa52tJnz
《Nervos 入门手册》:ckborg.bit.host