前言
数字身份由识别(Identifier)、验证机制(Authentication)、凭证(Credential)这三个要素组成。自我主权身份除了这三个要素,还具备了第四个要素:私钥与资料管理机制(DKMS),这是由于自我主权身份使用数字签章而有管理私钥的需求。
自我主权身份并不是全新的发明—许多技术的思路基本上沿用了现有的规格,自我主权身份真正的创举在于制定一套通用规格:去中心化识别符(Decentralized Identifier, DID),使身份能够以同一标准锚定于不同分散式帐本并且互相通用。
自我主权身份的四个要素之间具有如上图所示的关系,这些要素形成一个堆叠(Stack)的架构:最底层的#1负责身份的锚定;第二层的#2需要和底层的分散式帐本互动及负责用户资料与私钥的储存;第三层的#3则需要使用第二层的资料以进行用户身份的验证;成功完成验证后,最顶层的#4则可以发送各种凭证以表明用户的身份。这种上层依赖下层且同层之间互通的架构类似TCP/IP的七层网路协定— 各层具有各自的协定与规格,且各层之间的运作细节是抽象的。
哪些组织在推动自我主权身份?
由于自我主权身份需要一系列协定的紧密配合,因此自我主权身份的进展有赖于统一的规格与设计良好的协定,这需要由业界组成的非营利组织共同推动与维护。目前有许多非营利的组织都在自我主权身份领域持续贡献,例如:
重启信任网路 (Rebooting Web of Trust, RWoT)
全球资讯网协会的凭证社群组 (W3C Credential Community Group, W3C CCG)
去中心化身份基金会 (Decentralized Identity Foundation, DIF)
网际网路身份工作坊 (Internet Identity Workshop, IIW)
这些组织在近3年来都有非常丰硕的产出。其中最活跃的应该就属RWoT:自2016年开始启动以来,RWoT发表超过40篇的论文、技术规格与开源程式码;RWoT孕育的技术规格也进一步提案给W3C或者IETF以进行标准化;DID规格草稿有一大部分是奠基于RWoT的工作成果;甚至连「自我主权身份」这个词汇也是在RWoT被创造的。
实现自我主权身份的技术规格
那么自我主权身份架构中的各层是如何运作的?笔者接下来针对各层使用的规格做概述。
1. 去中心化识别符(Decentralized Identifier, DID)
DID是自我主权身份技术架构中最底层、也是最关键的一层— 它负责身份于分散式帐本的写入/读取,其对于识别符的格式以及解析方法都有明确的定义,下列简述几个重要的部分:
· DID(Decentralized Identifier):DID是一个由数字与英文字母组成的识别符,其是唯一的且映射至一个位于某个帐本的DID文件。DID由三个部分组成:格式(scheme)、DID方法(DID Method)以及DID方法特化字串(DID Method-specific String)。DID方法将于下一点阐述;DID方法特化字串的产生方式则需于DID方法的规格中明确定义。
· DID方法(DID Methods):为位于DID中的一组字串,功能为区分每个DID的解析方式—每一种帐本都有专属该帐本的DID方法,且其对应位于该帐本之DID文件的创建/解析规则。例如注册于以太坊的DID会是像did:eth:12345这样的形式。DID方法需要向W3C注册以被解析器辨识。
· DID文件(DID Document):分散式帐本可以被想像成一个键值资料库(Key-value Database) — DID是键值,它所对应的内容就是写入分散式帐本的DID文件(DID Document )。DID文件包含:代表身份的公钥、验证协定、能与此身份互动的的服务终端等等。
· DID解析器(DID Resolver):协助更上层协定便于查询DID文件,解析器能够针对不同的DID方法进行解析,再将解析结果返回上层,上层协定不需要理会关于文件解析的细节。DIF针对解析的需求开发了通用解析器(Universal Resolver),如此该解析器只需要部署一次,日后若有新的DID方法被注册,只需针对该方法进行扩充即可。
2. 去中心化私钥管理系统(Decentralized Key Management System, DKMS)
DKMS是用户使用自我主权身份的主要介面,除了与底层的DID连接之外,还需提供凭证的储存、私钥的备份等等,任务相当多元。规格上来说,DKMS可以再细分成三个子层:
· DID层(DID Layer):负责与更底层的分散式帐本连结以执行DID查询。
· 云端层(Cloud Layer):负责储存用户的个人资料供上层协定使用,例如可验证凭证。
· 边缘层(Edge Layer),负责管理私钥,同时也是让用户可以使用自我主权身份的去中心化应用程式(DApp)。
3. DID验证(DID Authentication)
目前仍尚未有任何准备成为通用标准的DID验证规格的提案,只有一份RWoT的文件深入探讨了验证流程。DID验证的任务只有一个:就是让用户证明自己拥有某身份— 用户只要证明自己拥有跟某个自我主权身份公钥匹配的私钥即可。进行验证后便能使不同个体之间建立可信任且更长久的通讯管道,以利更上层协定交换其他资料,例如可验证凭证。
现今存在许多行之有年的验证方式,例如OAuth / OpenID等等。类似这些验证方法,DID验证也使用挑战-回应循环 (Challenge-response Cycle)进行验证:验证者发出挑战,身份拥有者根据挑战作出回应,验证者再检验回应是否有效。至于挑战的形式则没有明确的定义,不过我们一定都有回应挑战的经验—我们在登入某帐号前都必须输入的帐号密码就是其中一种挑战的方式。
4. 可验证凭证(Verifiable Credential, VC)
VC是自我主权身份架构中发展最早、也是最成熟的规格。作为自我主权身份架构最顶层的协定,它只有一个目的:取代用户皮夹里的所有证件。VC是基于密码学的数位凭证,可在不同应用程式间通用,它让身份回归到最理想的状态:身份是完整的且完全受用户掌控的,用户可以依照情境的不同而揭露不同的凭证。由于所有自我主权身份都能发行与保存凭证,也就没有身份破碎的问题。
VC包含三个部分:
· 断言(Claims):为关于主体的一段陈述,表示[主体— 性质— 内容]之间的关系,例如:[小明— 学生— 有间学校]代表小明为有间学校的学生。
· 凭证后设资料(Credential Metadata):为有关凭证的其他资讯,例如类型、发行者、发行时间等等。
· 证明(Proof):为发行者对凭证内容的数位签章。
在使用VC揭露身份时,要如何避免不会暴露过多的隐私?可验证陈述 (Verifiable Presentation)便是利用零知识证明(Zero-knowledge Proof)保护凭证的进阶规格,细节容笔者于日后令撰文分析。
结语
本文用了相当多的篇幅在介绍自我主权身份的背景与发展脉络。自我主权身份的发展虽然距今只有短短4年,却已经有相当丰硕的成果,也能看到新的应用程式、协定、规格不断推陈出新,生态系也趋于完整。但由于是相当新颖的领域,资讯经常散落在各处且缺乏脉络,需要埋首于文件堆中才能偶然理出一些头绪。期许这篇文章能够帮助台湾的开发者快速掌握自我主权身份的精要。
币搜:比特币领域的搜索引擎www.btcsearch.com
