JoyID:面向大规模用户落地的非托管钱包

概述

目前的区块链钱包大多数基于助记词,非常用户不友好,也缺乏恢复机制。基于邮件的 unipass 和基于手机号的 flashsigner(flashsigner 本质上是基于用户自己持有私钥备份)是一个尝试,但它们的问题是仍然依赖其他的中心化基础设施。

JoyID(域名 joy.id,尚在开发中)是基于 FIDO Webauthn 协议和 Nervos CKB 的一个跨平台、跨终端、无密码无助记词的钱包方案,用户在创建、使用、甚至恢复时均不需要密码和助记词,同时它支持以下特征:

  • 链上地址唯一,且不因密钥更新发生变化
  • 支持多设备、多终端
  • 支持社交恢复
  • 支持 CoTA Rollup NFT、FT 资产的管理
  • 支持 CKB、sudt 等 L1 资产的管理
  • 支持用户名、头像等静态描述信息
  • 支持用户名 + UID 作为身份标识(例如 cipher#0027)
  • 支持 .bit 去中心化域名绑定

实现原理

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 协议进行资产创建、转让

注册 CoTA

用户或者第三方可以代用户注册 CoTA cell,并获得用户 CCID。该过程需要 ~150CKB。

新环境登录

joy.id 会检测当前环境中是否存在用户的密钥信息,并以列表的方式展示给用户。如果已经保存了用户的密钥信息(例如 icloud 会在多个设备中同步用户私钥),则直接点击用该密钥登录。如果没有保存对应用户的信息,则提示用之前的设备授权。新环境会展示一个二维码,原设备扫描并签名授权后,新环境即完成了对用户的认证。

未绑定状态

但新环境中目前仍然没有用户的密钥,因此后续进一步需要用户授权时,均会显示二维码,由用户使用移动设备进行扫码签名。该用户体验与 Walletconnect 类似。

绑定状态

应用方此时可以提示用户绑定当前设备,此时新环境需要生成新公私钥对,由原设备签名授权后,该公钥上链,作为 CoTA 数据扩展的子密钥,后续即可脱离原设备使用。

用户可以随时解绑任何设备,但主设备无法解绑。

数字签名

用户的密钥由 Joy.id 统一管理(但整个架构实际上可以由任何网站使用,统一管理的好处是用户的地址统一)。所有的认证和签名授权均需要第三方网站调用 joy.id 来实现。

第三方网站的请求转到 joy.id 后,它会自动查看当前环境中的密钥情况,并引导用户直接签名还是展示待签名二维码让另一个设备去签名。

JoyID 的签名内容包括:私钥本身对交易的签名和私钥对应的公钥保存在 JoyID 链上 SMT 的证明。

Joy.id 前端将完整开源,第三方(包括用户自己)可以自行部署。即便 joy.id 关闭,用户依然可以通过本地部署的形式管理自己的秘钥。

社交恢复

一旦用户所有设备丢失或者损坏,用户资产即无法恢复。因此 JoyID 设计了社交恢复功能。用户可以设置不少于三个好友,在自己设备丢失时可以要求好友使用 JoyID 进行签名授权以便讲自己新设备的公钥添加到链上的设备列表,从而恢复控制权。

信息管理

用户直接访问 Joy.id 可以进入信息管理页面。该页面中,用户可以设定用户名、头像、简介,管理多设备(多个子密钥),设置社交恢复,或者申请社交恢复等功能。

协议与开发进度

JoyID 目前已经完成了协议设计和部分协议开发工作,预计在两个月内实现测试网运行,欢迎关注项目进展。

6 Likes

万分期待~
不过,我个人更喜欢这种 社交恢复 的形式:
前提是绑定了一系列的社交帐户
恢复流程是在一定时间内(比如5~10分钟),twitter、facebook、gist等等挨个验证,从而完成授权 :grin:

这种就是中心化依赖了,可以在这个协议基础上由可信第三方充当这个中心化认证者

主设备无法解绑,那么可以授权更换吗?过了几年时间手机还是会坏的

主设备坏了或者丢失没关系的,可以添加任意多个子设备,使用权限和主设备相同。

如果可以社交恢复, 那为什么要限制主设备不可解绑呢?

nervos没有gitcoin cipher能不能留个ckb地址来打赏 或者有别的打钱的支持方式给大家

为了保证地址可以离线生成且在秘钥增删时不变,主设备公钥是地址的 lock args

感谢,关注我们 & 给出产品反馈就是最大的支持了

要保持地址不变, 需要保证主公钥不变, 这个比较好理解.

但是主公钥和主设备必须要保证绑定关系吗? 是不是可以在创建的时候, 生成一次性的公私钥作为主公钥, 然后再生成新的子公私钥绑定到 主设备 上. 如果主设备不可解绑, 丢失的情况下感觉风险还是挺大的.

有解决方案,稍微麻烦一点。用户每次解锁都提供秘钥有效性证明即可,可以加到 joyid 的下一步开发计划中。

1 Like