如何在分散式帳本上實(shí)現(xiàn)自我主權(quán)身份
前言
每個(gè)人都有過(guò)回答「你是誰(shuí)」這個(gè)問(wèn)題的經(jīng)驗(yàn)。最近一次被問(wèn)到「你是誰(shuí)」時(shí),你是怎么介紹自己的?是回答姓名與職稱?或是身分證字號(hào)?還是某活動(dòng)的報(bào)名序號(hào)?當(dāng)我們?cè)趪L試回答「你是誰(shuí)」的時(shí)候,也正在定義我們的身份。身份會(huì)因情境不同而不同,有時(shí)是姓名,有時(shí)是身分證字號(hào),也有時(shí)是某個(gè)臨時(shí)編號(hào)。
什么是數(shù)字身份(Digital Identity)?
數(shù)字身份就是以數(shù)字形式表現(xiàn)與儲(chǔ)存的身份。自全球資訊網(wǎng)被發(fā)明以來(lái),數(shù)字身份便跟著開(kāi)始發(fā)展直到今日。網(wǎng)站域名、電子信箱、社群帳號(hào)等等都是數(shù)字身份的一種。我們的日常生活離不開(kāi)數(shù)字身份的使用:上社群網(wǎng)站發(fā)文、訂演唱會(huì)門票、上PTT看廢文、用GMail聯(lián)絡(luò)公事、用線上課程進(jìn)修、用云端硬碟備份資料等等。幾乎可以說(shuō)沒(méi)有數(shù)字身份,就沒(méi)有現(xiàn)代便利的生活。
根據(jù)2016年的文章,自我主權(quán)身份出現(xiàn)之前,數(shù)字身份的發(fā)展大致可以分為三個(gè)階段:
第一階段:中心化身份(Centralized IdenTIty)
數(shù)字身份第一次隨著全球資訊網(wǎng)的流行而有了大量的需求。如雨后春筍般冒出來(lái)的各種網(wǎng)站顯露了一個(gè)迫切的問(wèn)題:要怎么證明你正在瀏覽的網(wǎng)站是可信任的?一個(gè)直覺(jué)的思路是:我們可以對(duì)可信任的網(wǎng)站域名頒發(fā)憑證(Certificate)。那么由誰(shuí)來(lái)頒發(fā)?由于頒發(fā)憑證的機(jī)構(gòu)必須是具有公信力的機(jī)構(gòu),因此憑證機(jī)構(gòu)(CerTIficate Authority, CA)被設(shè)立,負(fù)責(zé)域名的審核與憑證的頒發(fā)。自1995年發(fā)展至今,憑證機(jī)構(gòu)現(xiàn)在仍是Https的骨干。
然而,CA是中心化且階層化的(Hierarchical):根CA(Root CA)頒發(fā)憑證給次級(jí)CA,次級(jí)CA再頒發(fā)憑證給更次級(jí)的CA,更次級(jí)的CA可以頒發(fā)憑證給注冊(cè)某域名的網(wǎng)站,擁有憑證的域名則可以讓用戶信任,使用戶愿意于此域名注冊(cè)身份。在這樣階層化的架構(gòu)下,一個(gè)用戶的身份可以一直往上追朔到根CA,也就是說(shuō),根CA是身份的根基。
由此可知,這樣的數(shù)字身份非常依賴可信的根憑證機(jī)構(gòu),且用戶的身份完全掌控于注冊(cè)身份的域名擁有者,隨著使用服務(wù)的增長(zhǎng),一個(gè)用戶可能必須同時(shí)在數(shù)十個(gè)服務(wù)注冊(cè)身份,身份變得破碎而脆弱。
第二階段:聯(lián)合身份(Federated IdenTIty)
為了解決身份的破碎,一個(gè)直覺(jué)的思路是:讓身份由數(shù)個(gè)組織組成的聯(lián)盟共同管理,于聯(lián)盟中任一個(gè)域名注冊(cè)的身份都可以在聯(lián)盟中通用,其中一個(gè)例子就是由升陽(yáng)(Sun)主導(dǎo)的自由聯(lián)盟 (Liberty Alliance, 2001)。聯(lián)合身份雖然稍微解決在聯(lián)盟之間身份破碎的問(wèn)題,但是于聯(lián)盟之外的身份仍然是破碎的,且身份仍由服務(wù)提供者掌控。
第三階段:以用戶為中心的身份(User-Centric IdenTIty)
這就是我們目前所在的階段:讓不同服務(wù)、不同聯(lián)盟的身份互通以及給予用戶更多對(duì)身份的掌控,是此階段的目標(biāo)。若要使某一服務(wù)的身份可以在多個(gè)服務(wù)之間通用,則各家服務(wù)需要共同制定同一套規(guī)格以跨服務(wù)驗(yàn)證身份。重視用戶允許 (User Consent)與互通性 (Interoperability)的結(jié)果使用戶成為了身份的中心。用戶可以自行決定是否要從一個(gè)服務(wù)分享自己的身份至另一個(gè)服務(wù),防止數(shù)字身份的破碎。例如OpenID(2005) / OAuth (2010) / FIDO (2013)這些開(kāi)發(fā)者熟知的驗(yàn)證(Authentication)協(xié)定就是遵循此原則的產(chǎn)物。
雖然用戶對(duì)身份擁有更多掌控以及有更好的互通性,但用戶對(duì)于中心化服務(wù)的依賴程度卻更勝以往,導(dǎo)致服務(wù)商擁有「濫用」用戶隱私的權(quán)力,例如以廣告營(yíng)收為主要獲利來(lái)源的企業(yè),可以在不經(jīng)用戶同意下便使用或販?zhǔn)塾脩糍Y訊,用戶隱私有受到侵犯的風(fēng)險(xiǎn)。
身份的價(jià)值與厚度來(lái)自社交行為與頻繁的互動(dòng),在完全理想(例如非數(shù)字)的場(chǎng)景下,身份應(yīng)當(dāng)是一個(gè)整體,并能依據(jù)情境不同而揭露不同資訊,正如同當(dāng)我被詢問(wèn)「我是誰(shuí)」時(shí),我可以依照情境的不同給予不同的身份證明。
然而,我們當(dāng)今使用的數(shù)字身份既脆弱也無(wú)法表達(dá)身份的厚度。那么要如何實(shí)現(xiàn)一個(gè)不受任何中心化服務(wù)掌控的身份呢?這個(gè)問(wèn)題的答案一直到最近才出現(xiàn)— 分散式帳本就是實(shí)現(xiàn)自我主權(quán)身份的最后一塊拼圖。
什么是自我主權(quán)身份(Self sovereign Identity)?
自我主權(quán)身份就是用戶可以完全掌控且于任何服務(wù)之間互通使用的數(shù)字身份。自我主權(quán)身份與當(dāng)今的數(shù)字身份不同—自我主權(quán)身份錨定于分散式帳本,不被任何中心化服務(wù)掌控。分散式帳本使數(shù)字身份具備下列特性,且正是這些特性保證了數(shù)字身份的自主性:
· 存在性(Existence):中心化服務(wù)可以隨時(shí)竄改數(shù)字身份的存在;分散式帳本則使身份能以去中心化識(shí)別符(DID)的形式錨定在其上且保護(hù)其不受篡改。
· 掌控性(Control):中心化服務(wù)可以完全掌控?cái)?shù)字身份;分散式帳本使用數(shù)字簽章,掌控私鑰即掌控身份,且私鑰由用戶自行保管。
· 存取性(Access):中心化服務(wù)可以輕易限制身份存??;分散式帳本是復(fù)制狀態(tài)機(jī),用戶可以于任一節(jié)點(diǎn)隨時(shí)存取身份。
· 透明性(Transparency):中心化服務(wù)多為閉源專案;分散式帳本大多為開(kāi)源專案,用戶可以掌控軟體運(yùn)作的細(xì)節(jié)。
· 持續(xù)性(Persistence):中心化服務(wù)有服務(wù)中斷的風(fēng)險(xiǎn);分散式帳本多由受到經(jīng)濟(jì)激勵(lì)的節(jié)點(diǎn)共同維護(hù),不易中斷服務(wù)。
自我主權(quán)身份的技術(shù)架構(gòu)
數(shù)字身份由識(shí)別(Identifier)、驗(yàn)證機(jī)制(Authentication)、憑證(Credential)這三個(gè)要素組成。自我主權(quán)身份除了這三個(gè)要素,還具備了第四個(gè)要素:私鑰與資料管理機(jī)制(DKMS),這是由于自我主權(quán)身份使用數(shù)字簽章而有管理私鑰的需求。
自我主權(quán)身份并不是全新的發(fā)明—許多技術(shù)的思路基本上沿用了現(xiàn)有的規(guī)格,自我主權(quán)身份真正的創(chuàng)舉在于制定一套通用規(guī)格:去中心化識(shí)別符(Decentralized Identifier, DID),使身份能夠以同一標(biāo)準(zhǔn)錨定于不同分散式帳本并且互相通用。
自我主權(quán)身份的四個(gè)要素之間具有如上圖所示的關(guān)系,這些要素形成一個(gè)堆疊(Stack)的架構(gòu):最底層的#1負(fù)責(zé)身份的錨定;第二層的#2需要和底層的分散式帳本互動(dòng)及負(fù)責(zé)用戶資料與私鑰的儲(chǔ)存;第三層的#3則需要使用第二層的資料以進(jìn)行用戶身份的驗(yàn)證;成功完成驗(yàn)證后,最頂層的#4則可以發(fā)送各種憑證以表明用戶的身份。這種上層依賴下層且同層之間互通的架構(gòu)類似TCP/IP的七層網(wǎng)路協(xié)定— 各層具有各自的協(xié)定與規(guī)格,且各層之間的運(yùn)作細(xì)節(jié)是抽象的。
哪些組織在推動(dòng)自我主權(quán)身份?
由于自我主權(quán)身份需要一系列協(xié)定的緊密配合,因此自我主權(quán)身份的進(jìn)展有賴于統(tǒng)一的規(guī)格與設(shè)計(jì)良好的協(xié)定,這需要由業(yè)界組成的非營(yíng)利組織共同推動(dòng)與維護(hù)。目前有許多非營(yíng)利的組織都在自我主權(quán)身份領(lǐng)域持續(xù)貢獻(xiàn),例如:
重啟信任網(wǎng)路 (Rebooting Web of Trust, RWoT)
全球資訊網(wǎng)協(xié)會(huì)的憑證社群組 (W3C Credential Community Group, W3C CCG)
去中心化身份基金會(huì) (Decentralized Identity Foundation, DIF)
網(wǎng)際網(wǎng)路身份工作坊 (Internet Identity Workshop, IIW)
這些組織在近3年來(lái)都有非常豐碩的產(chǎn)出。其中最活躍的應(yīng)該就屬RWoT:自2016年開(kāi)始啟動(dòng)以來(lái),RWoT發(fā)表超過(guò)40篇的論文、技術(shù)規(guī)格與開(kāi)源程式碼;RWoT孕育的技術(shù)規(guī)格也進(jìn)一步提案給W3C或者IETF以進(jìn)行標(biāo)準(zhǔn)化;DID規(guī)格草稿有一大部分是奠基于RWoT的工作成果;甚至連「自我主權(quán)身份」這個(gè)詞匯也是在RWoT被創(chuàng)造的。
實(shí)現(xiàn)自我主權(quán)身份的技術(shù)規(guī)格
那么自我主權(quán)身份架構(gòu)中的各層是如何運(yùn)作的?筆者接下來(lái)針對(duì)各層使用的規(guī)格做概述。
1. 去中心化識(shí)別符(Decentralized Identifier, DID)
DID是自我主權(quán)身份技術(shù)架構(gòu)中最底層、也是最關(guān)鍵的一層— 它負(fù)責(zé)身份于分散式帳本的寫(xiě)入/讀取,其對(duì)于識(shí)別符的格式以及解析方法都有明確的定義,下列簡(jiǎn)述幾個(gè)重要的部分:
· DID(Decentralized Identifier):DID是一個(gè)由數(shù)字與英文字母組成的識(shí)別符,其是唯一的且映射至一個(gè)位于某個(gè)帳本的DID文件。DID由三個(gè)部分組成:格式(scheme)、DID方法(DID Method)以及DID方法特化字串(DID Method-specific String)。DID方法將于下一點(diǎn)闡述;DID方法特化字串的產(chǎn)生方式則需于DID方法的規(guī)格中明確定義。
· DID方法(DID Methods):為位于DID中的一組字串,功能為區(qū)分每個(gè)DID的解析方式—每一種帳本都有專屬該帳本的DID方法,且其對(duì)應(yīng)位于該帳本之DID文件的創(chuàng)建/解析規(guī)則。例如注冊(cè)于以太坊的DID會(huì)是像did:eth:12345這樣的形式。DID方法需要向W3C注冊(cè)以被解析器辨識(shí)。
· DID文件(DID Document):分散式帳本可以被想像成一個(gè)鍵值資料庫(kù)(Key-value Database) — DID是鍵值,它所對(duì)應(yīng)的內(nèi)容就是寫(xiě)入分散式帳本的DID文件(DID Document )。DID文件包含:代表身份的公鑰、驗(yàn)證協(xié)定、能與此身份互動(dòng)的的服務(wù)終端等等。
· DID解析器(DID Resolver):協(xié)助更上層協(xié)定便于查詢DID文件,解析器能夠針對(duì)不同的DID方法進(jìn)行解析,再將解析結(jié)果返回上層,上層協(xié)定不需要理會(huì)關(guān)于文件解析的細(xì)節(jié)。DIF針對(duì)解析的需求開(kāi)發(fā)了通用解析器(Universal Resolver),如此該解析器只需要部署一次,日后若有新的DID方法被注冊(cè),只需針對(duì)該方法進(jìn)行擴(kuò)充即可。
2. 去中心化私鑰管理系統(tǒng)(Decentralized Key Management System, DKMS)
DKMS是用戶使用自我主權(quán)身份的主要介面,除了與底層的DID連接之外,還需提供憑證的儲(chǔ)存、私鑰的備份等等,任務(wù)相當(dāng)多元。規(guī)格上來(lái)說(shuō),DKMS可以再細(xì)分成三個(gè)子層:
· DID層(DID Layer):負(fù)責(zé)與更底層的分散式帳本連結(jié)以執(zhí)行DID查詢。
· 云端層(Cloud Layer):負(fù)責(zé)儲(chǔ)存用戶的個(gè)人資料供上層協(xié)定使用,例如可驗(yàn)證憑證。
· 邊緣層(Edge Layer),負(fù)責(zé)管理私鑰,同時(shí)也是讓用戶可以使用自我主權(quán)身份的去中心化應(yīng)用程式(DApp)。
3. DID驗(yàn)證(DID Authentication)
目前仍尚未有任何準(zhǔn)備成為通用標(biāo)準(zhǔn)的DID驗(yàn)證規(guī)格的提案,只有一份RWoT的文件深入探討了驗(yàn)證流程。DID驗(yàn)證的任務(wù)只有一個(gè):就是讓用戶證明自己擁有某身份— 用戶只要證明自己擁有跟某個(gè)自我主權(quán)身份公鑰匹配的私鑰即可。進(jìn)行驗(yàn)證后便能使不同個(gè)體之間建立可信任且更長(zhǎng)久的通訊管道,以利更上層協(xié)定交換其他資料,例如可驗(yàn)證憑證。
現(xiàn)今存在許多行之有年的驗(yàn)證方式,例如OAuth / OpenID等等。類似這些驗(yàn)證方法,DID驗(yàn)證也使用挑戰(zhàn)-回應(yīng)循環(huán) (Challenge-response Cycle)進(jìn)行驗(yàn)證:驗(yàn)證者發(fā)出挑戰(zhàn),身份擁有者根據(jù)挑戰(zhàn)作出回應(yīng),驗(yàn)證者再檢驗(yàn)回應(yīng)是否有效。至于挑戰(zhàn)的形式則沒(méi)有明確的定義,不過(guò)我們一定都有回應(yīng)挑戰(zhàn)的經(jīng)驗(yàn)—我們?cè)诘侨肽硯ぬ?hào)前都必須輸入的帳號(hào)密碼就是其中一種挑戰(zhàn)的方式。
4. 可驗(yàn)證憑證(Verifiable Credential, VC)
VC是自我主權(quán)身份架構(gòu)中發(fā)展最早、也是最成熟的規(guī)格。作為自我主權(quán)身份架構(gòu)最頂層的協(xié)定,它只有一個(gè)目的:取代用戶皮夾里的所有證件。VC是基于密碼學(xué)的數(shù)位憑證,可在不同應(yīng)用程式間通用,它讓身份回歸到最理想的狀態(tài):身份是完整的且完全受用戶掌控的,用戶可以依照情境的不同而揭露不同的憑證。由于所有自我主權(quán)身份都能發(fā)行與保存憑證,也就沒(méi)有身份破碎的問(wèn)題。
VC包含三個(gè)部分:
· 斷言(Claims):為關(guān)于主體的一段陳述,表示[主體— 性質(zhì)— 內(nèi)容]之間的關(guān)系,例如:[小明— 學(xué)生— 有間學(xué)校]代表小明為有間學(xué)校的學(xué)生。
· 憑證后設(shè)資料(Credential Metadata):為有關(guān)憑證的其他資訊,例如類型、發(fā)行者、發(fā)行時(shí)間等等。
· 證明(Proof):為發(fā)行者對(duì)憑證內(nèi)容的數(shù)位簽章。
在使用VC揭露身份時(shí),要如何避免不會(huì)暴露過(guò)多的隱私?可驗(yàn)證陳述 (Verifiable Presentation)便是利用零知識(shí)證明(Zero-knowledge Proof)保護(hù)憑證的進(jìn)階規(guī)格,細(xì)節(jié)容筆者于日后令撰文分析。
結(jié)語(yǔ)
本文用了相當(dāng)多的篇幅在介紹自我主權(quán)身份的背景與發(fā)展脈絡(luò)。自我主權(quán)身份的發(fā)展雖然距今只有短短4年,卻已經(jīng)有相當(dāng)豐碩的成果,也能看到新的應(yīng)用程式、協(xié)定、規(guī)格不斷推陳出新,生態(tài)系也趨于完整。但由于是相當(dāng)新穎的領(lǐng)域,資訊經(jīng)常散落在各處且缺乏脈絡(luò),需要埋首于文件堆中才能偶然理出一些頭緒。期許這篇文章能夠幫助臺(tái)灣的開(kāi)發(fā)者快速掌握自我主權(quán)身份的精要。