钱包
广义上讲,钱包由用于密钥管理、通信(持有者、发行者和验证者之间的数据交换)以及声明展示和验证的接口和底层基础设施组成。
我们需要区分 Crypto 钱包(MetaMask、Ledger、Coinbase Wallet 等)和身份钱包:Crypto 钱包存储区块链网络特有的 Crypto 密钥,用于发送/接收 Token 和签署交易;身份钱包存储身份,并允许用户创建和提出声明,这样他们就可以跨应用/平台展示身份数据。
身份钱包的例子包括 ONTO、Nuggets 和 Polygon ID Wallet。一些身份钱包,如 Fractal 将活跃度检查和 KYC 作为其上线流程的一部分,所以用户可以向有这种需求的应用程序展示他们的声明,不过这种情况在 Crypto 钱包中并不常见。身份钱包更有可能支持 W3C 所认可的 DID、可验证凭证和 DIDComm 的实现,以及除 Web3 之外的用例。
身份钱包的实例
WalletConnect * 是一个连接钱包和 dapp 的通信协议。作为一种极简、无偏见的协议,WalletConnect 已经为数百万 Crypto 用户提供了服务,在加速自主身份基础设施的采用方面,它可能要优于 DIDComm。与 DIDComm 不同的是,DIDComm 需要服务供应商提供托管调解器基础设施,而 WalletConnect 将信息存储在中继网络的「云邮箱」中,当钱包重新上线时,该网络会将这些信息推送给钱包。
认证系统会根据一个或多个认证因素来确认用户的身份,该因素可以是用户的持有物(数字签名、身份证、安全 Token),也可以是系统已知的信息(密码、PIN、机密问题答案)或生物特征信息(指纹、声音、视网膜扫描)。
互联网上认证的演变
在去中心化的身份范式中,用户可以使用钱包来认证自己的身份。在后台,钱包会使用其存储的密钥来生成数字签名,作为持有者拥有与该账户相关私钥的「证明」。由于 Crypto 钱包可以生成签名,提供 Web3 登录的应用程序能够让用户用他们的 Metamask 或 WalletConnect 进行认证。
多年来,Crypto 原住民通过「连接钱包」(Connect Wallet) 与 dapp 进行交互,他们通过这个基本操作指定自己想要使用的帐户。Dapp 不会记住任何关于已连接用户的信息,每次用户在访问站点时,dapp 都会将他们视为一张白纸。
今天,用户与 dapp 有了更深层次的交互模式。去中心化的身份信息在这里变得非常有用,因为它允许应用程序访问用户的更多信息,从而提供个性化的体验,同时让个人保留对自己数据的控制权。
对于更为丰富的交互场景,如加载用户偏好、配置文件或私人聊天消息,应用程序需要首先确保它们是在与帐户背后的实际密钥持有者进行对话。虽然「连接钱包」没有提供这种保证,但身份验证标准却可以做到。身份验证系统与用户建立了对话,并允许应用程序安全地读写他们的数据。
Sign-In with Ethereum (SIWE) 是由 Spruce、 ENS 和 Ethereum 基金会共同制定的认证标准。SIWE 标准化了一种消息格式(类似于 jwt),从而让用户可以使用基于区块链的账户登录服务。Sign-In with X(CAIP-122)在此基础上让 SIWE 成为了 Ethereum 版本的 SIWx,并令该标准适用于不同的区块链。
对于个人来说,这意味着他们可以用他们的 Web3 钱包注册或登录,而不需要创建用户名和密码,同时保证对其在线身份的自主权。应用程序可以将此作为一种针对于 Web3 原生受众的市场策略,从而满足用户的需求。
从中期来看,使用加密钱包登录 dapp 和其他 Web2 平台将改善 Web3 原住民的用户体验。然而,这也让用户面临着 Web 2 中的相关性和跟踪问题。鉴于此,通过 Peer DID 或自我认证身份标识进行身份验证便可以作为一种替代方案。
与上面「普通版」的 DID 不同,Peer DID 可以在 2 个或 N 个已知方之间使用。它们可以被用作每个服务或交互的唯一身份标识。该数字身份中的 Crypto 钱包地址可以与 VC 一起存储,作为每次商家或服务互动时的验证证明。
认证确认了用户的身份,而授权决定了一个实体能够访问哪些资源,以及他们可以如何使用这些资源。这两个过程相互独立,但在用户体验的设计流程中往往又相辅相成。在用社交账号登录(认证)到第三方服务平台后,用户可能会收到如下的授权请求:
授权请求的实例
在联合身份范式中,你可以授权第三方应用程序查看或更新存储在身份提供者(如谷歌)那里的数据,它们会负责维护你授权给这些应用程序的应用程序列表和相关权限。Web3 授权基础设施和标准有助于实现同样的目标,只是在这种情况下你享有自我主权的数据,并且可以授予每个第三方解密/阅读/更新数据的权利,而不再需要依靠中心化平台。
随着 Token 化社区的兴起,Collab.Land、Guild 和 Tokenproof 等 Web 3 Token 门槛产品也相继出现。这些工具的一个主要用途是对会员专用的 Discord 频道进行访问控制,以及基于角色和声誉的精细化访问。社区可以根据 Token 持有量、链上活动或社交验证,通过编程的方式授予访问权,而不用手动分配访问权。
Lit 是一个去中心化的密钥管理和访问控制协议,它使用 MPC 技术在 Lit 网络节点之间分配私钥的「权限」。公钥/私钥对由 PKP(可编程密钥对)NFT 表示,其所有者是该密钥对的唯一控制者。当任意定义的条件得到满足时,PKP 的拥有者可以触发网络的聚合机制,从而以他们的身份解密文件或签署信息。
在访问控制方面,Lit 让用户可以设置链上条件,从而获取链外资源。例如,DAO 可以上传一个文件到 Arweave 或 AWS,使用 Lit 加密,并定义一组条件(如 NFT 所有权)。符合条件的钱包会签署并向协议节点广播一条消息,协议节点检查区块链以确保签署者符合条件。如果条件符合,协议会为签署者合成密钥以解密文件。该基础设施也可以用来打造 Web2 的体验,如 Shopify 折扣、设有 Token 门槛的 Zoom 会议和 Gathertown 空间、直播以及谷歌云端硬盘访问。
Kepler 可以围绕用户控制的数据保险库(「Orbits」)组织数据,这些数据库代表了数据的指定主机列表,它将作为一个智能合约,持有唯一具备控制权的密钥。这些数据库可以由可信方、跨主机的共识机制、资源所有者和许可有效性来管理。任何使用 SIWE 的人都可以立即利用私人数据保险库来存储他们的偏好数据、数字证书和私人文件。由于其支持多个存储后端的「自带存储」,用户也可以进行自我托管或使用托管版本。
下面的这些例子向我们展示了应用程序可以如何运用构建模块的组合:
· Orbis 是一个社交类应用(「Web3 版的 Twitter/Discord」),它使用 Ceramic 进行数据存储和更新,DM 在存储之前会首先通过 Lit 进行加密
· Lit 可以作为一个去中心化的加密系统,用于委托他人来解密你的 Tableland 数据
· Kepler 可以将 Ceramic Documents 用作信标,以路由至私人存储区
· Lit PKP 可以「拥有」应用程序的 Ceramic 流,Lit Action(IPFS 上的代码)也将有权在满足任意条件下签署和更新数据库
CACAO 是一个用于表示通链对象能力(OCAP)的标准,它是使用 Sign-in-With X 来创建的。CACAO 定义了一种将 SIWx 签名操作的结果记录为基于 IPLD 的对象能力 (OCAP) 方法,不仅创建了一个身份验证的事件记录,而且还为可验证的授权创建了一个可组合且可重播的授权书。
授权方法让用户可以授予应用程序以精细化、可验证的方式范围精准的查看/更新数据。并且,由于这些方法会设置一定的期限,所以人们不用在每次更新时都去进行签名,而是能够在应用程序上进行丰富的互动,并在期限结束时签署一次就可以了。
如图所示,我们到达了去中心化身份基础设施栈的顶端:
· 证明能够确定一项声明和签名是否有效,它们的出现是源于对已记录事件进行独立验证的需要。
· 凭证是详细说明一个实体相关信息的文件,由另一个实体或他们自己书写并签署,兼具防篡改性和可加密验证性,并且可以存储在钱包里。
可验证凭证(VC)是W3C可验证凭证规范所定义的可加密数字凭证的标准数据模型和表示格式:
· 发行者是凭证的签发方(如大学)
· 持有者拥有凭证(如学生)
· 验证者负责验证凭证(如潜在雇主)
· 可验证的呈现是指用户与第三方分享他们的数据,第三方可以验证该凭证确实是由发证方所签署
注意:这里的发行者、持有者和验证者都是相对的概念,每个人都有自己的 DID 和各自收集的凭证。
凭证是构建声誉的基础,而声誉本质上是一种社会现象,会随环境的变化而变化。实体可以借助一个或多个凭证对外展示其资质、能力或权威。这就好比任何人都可以声称自己毕业于名牌大学,但这样说并不会赢得他人的信任,只有大学颁发的证书才能证明这一点。
虽然 Web3 原生的徽章和某某证明项目并不都遵守 W3C 的 VC 标准,但我们可以从上面描述的系统中找到相似之处。
· 最直接的例子便是不可转让的 NFT 徽章,只有完成了一些链上活动的钱包才可以铸造它。由于所有的交易历史都在链上,所以它从一开始就具备可验证和防篡改的特性。DegenScore 通过汇总你与 DeFi 协议的互动来量化你的赌徒指数,并根据智能合约上的规则输出一个分数。你可以把它铸造成 NFT,并将其作为一个「DeFi 证书」保存在你的 Crypto 钱包中。如果有某个 Degen DAO 对该分数做出了限制,你就可以向它展示这个 NFT,相应的 Token 门槛协议会对其进行验证,成功之后你便可以加入该 DAO 了——赌徒证明(Proof of Degen)
· POAP 可以证明你参加了某个活动或在现实生活中遇到了某人——出席证明/相遇证明
· Otterspace 允许 DAO 决定什么是有意义的工作,并为其成员颁发 ntNFT 徽章;
· Proved 要求 DAO 在使其成员为其铸造 DAO 特定的 NFT 徽章之前「签署」一项声明——贡献证明
· 101 会在线上课程结束以后给通过考试的学生颁发 ntNFT——学习证明
· Kleoverse 会根据 Github 数据向用户发放 Typescript、Rust 或 Solidity 能力徽章——技能证明
除了上面提到的访问控制用例,Lit PKP 还可以作为 Crypto 公证人,让 Lit Actions 在签署证书之前对其进行检查。例如,某些去中心化的教育平台可以让课程创建者自己定义考试通过的标准,将这些条件部署为 Lit Action,并根据这些条件使用其 PKP 以编程方式发布 VC。
这里出现了 2 个问题:这些证书数据点中哪些是有意义的?我们如何将它们汇总以获得声誉?
Orange Protocol 对此提供了一个解决方案:通过模型提供者将这些数据点整合到定义明确的模式中。在 Orange 上,MP 一般是指在其系统内有声誉评估措施的平台。「数据提供者」的数据会被用于模型提供者设计的模型之中,然后 MP 会添加计算方法,将声誉标记分配给不同的实体,并将这些模型提供给其他人使用。Dapp 可以为他们的用例策划并嵌入这些声誉模型。
到目前为止,Aave、Gitcoin、Snapshot、DAOHaus 等已经将他们的数据提供给 Orange。这些数据由他们和其他项目如Dework、talentDAO 和 Crypto Sapiens 建模,从而为成员提供 ntNFT。这为使用 CollabLand 和 Guild 完善 Discord 许可,以及 Snapshot 的声誉加权治理等工作创造了大量的机会。
我们在讨论身份基础设施时不能不考虑隐私问题和实现隐私的技术原语,因为隐私在栈的所有层面都很重要。在过去十年中,区块链的采用加速了 zk-proof 等加密原语的研发,它除了可以应用在 rollup 等扩展技术中外,还允许身份对可公开验证的信息做出有细微差别、保护隐私的声明。
隐私保证有助于避免我们在使用完全透明的数据生成可信声明时所产生的负面外部性。如果没有这些保证,第三方机构就可以发起与原始交易无关的交互活动(如广告、骚扰)。利用密码学和 zk 技术,我们可以构建身份系统,其中涉及到的交互活动和数据共享可以在明确定义且与背景相关的范围内被放入「沙盒」之中。
「普通」可验证凭证通常采用 JSON-JWT 或 JSON-LD 格式,每个凭证都有外部或嵌入证明(数字签名),从而使其具有防篡改和可验证的特性。
Zk-proof 和新的签名方案加强了 W3C VC 的隐私保护特性,例如:
· 反关联性:每当持有者分享凭证时,这个身份标识符都可以得到共享。因此,每次出示凭证时验证者都有可能串通起来,查看持有者在哪里出示他们的凭证,并将其定位到一个已识别的人身上。而有了盲签名之后,你可以每次都共享签名的唯一证明,而不共享签名本身。
· 选择性披露:只分享 VC 的必要属性,而隐藏其余的属性。JSON-JWT 凭证和 JSON-LD LD-签名凭证都要求持有者与验证者分享整个凭证,不能进行「部分」分享。
· 复合证明:将多个 VC 的属性合并到一个证明中,而不需要寻求发行者的帮助或生成一个新的 VC。
· 判断依据:允许在证明操作中隐藏验证者提供的真实数值。例如,证明持有者的账户余额超过一定的门槛而不透露其具体数额,或者在不透露生日的情况下证明你达到了法定饮酒年龄。
关于 ZKP 如何在凭证中保护隐私的简化图表
BBS 签名方案是 MATTR 在 2020 年最初提出的一种颇具前瞻性的方法。该提案允许 BBS 签名与 VC 常用的 JSON-LD 格式一起使用。持有者可以有选择地披露原始签名凭证中的声明。该方案生成的证明是签名的零知识证明,这意味着验证者无法确定具体哪个签名被用来生成了证明,从而解决了关联性问题。
Iden3 是一个 zk 原生身份协议,它提供了一个用于 zk 身份原语、身份验证和声明证明生成的可编程的 zk 框架 以及开源库。该协议使用 Baby Jubjub 椭圆曲线为每个身份生成密钥对,该椭圆曲线旨在有效地与 zk-SNARK 协同工作,后者用于以保护隐私的方式证明身份所有权和声明。PolygonID 目前正在利用这一协议来建设其身份钱包。
在过去的几年时间中,应用型 zkp 吸引了 Crypto 社区的极大关注。在 Web3 中,它已经在以下这些程序中得到了应用:
· 私人空投:Stealthdrop
· 保护隐私但可信的证明:Sismo(所有权)、Semaphore(会员制)
· 匿名通信:heyanon
· 匿名投票:Melo
这项研究的几点启示:
正如 Crypto 催化了 DPKI 的发展和采用,能够提供在线/IRL 访问权限的可组合声誉也将成为去中心化身份基础设施的催化剂。目前,凭证发行(某某证明)协议在不同的用例和区块链网络中依旧处于零散状态。到 2023 年,我们将看到这些 (如配置文件) 的聚合层变得成熟起来,并成为一个统一的界面。如果它可以用来解锁加密以外的其他体验,如访问事件或电子商务折扣,那么它也将会有更高的使用率。
密钥管理仍然是容易出现单点故障的摩擦点。对于大多数 Crypto 原住民来说,这是一种尴尬的体验,同时也是大多数消费者完全无法触及到的事情。联合身份对 Web 1.0 范式的用户体验做出了优化,允许用户使用单点登录的方式,而无需再记住不同的用户名与密码。虽然 Web3 认证的用户体验正在改善,但目前来看它提供的用户体验仍然不及预期——不仅需要记忆助记词,而且在密钥丢失时只提供有限的追索权。随着 MPC 技术的成熟和在个人和机构中的推广,这一点也将逐步得到完善。
Crypto 原生基础设施正在满足用户在 Web2 中的需求。Web3 原语开始与 Web2 应用程序和服务进行整合,为人们提供了去中心化的身份,例如 Collab.Land 与 Nuggets 的整合就让 Reddit 用户可以将他们的声誉作为 VC 来解锁访问。Auth0 认证与授权中间件整合了作为身份提供商的 SIWE,他们的 2K 企业客户现在除了 SSO 之外还可以提供钱包登录。
随着数据的民主化,策展机制需要得到进一步的证实。就像索引协议 The Graph 会使用策展人和委托人的网络对最有用的子图发出信号一样(链上数据的 API),Ceramic 和 Orange 等协议上有关用户和声誉的数据模型也需要充分的时间和社区的参与才能超越 DAO 和 Crypto 原生用例而走向成熟。
隐私方面也同样需要考量。项目在选择其栈时应仔细考虑公共存储或永久存储的影响。相对于保护隐私的 VC、短期和 Peer DID 以及链上/链下活动的 ZKP 组合,「纯」公共数据 ntNFTs 可能适合有限的用例(例如,一些链上活动的抽象描述),这些活动提供了选择性披露、密钥转置、反相关和撤销等功能。
zkSNARK 这样的新 Crypto 工具将是下一代身份基础设施的关键构件。ZKP 目前正用于独立的用例,要想将其与应用设计模式、Crypto 原语 ZK 电路的实施、电路安全工具和开发人员工具进行融合,研发部门还需要完成不少的工作。与此同时,这也是一个需要密切关注的问题。
去中心化身份是一个非常庞大的项目,单个团队很难独立完成。它的实现需要整个生态系统按照统一的标准,不断迭代原语,并相互检查设计决策的影响。
本篇探讨了去中心化身份栈的基础设施部分,下一篇我将讨论配置文件、抗女巫攻击、合规性和应用层,这些都将通过本文提到的构建模块来实现。
如果你正在这个领域进行建设,或者对这个话题有更多的想法,欢迎提出你的见解。