前言
每個人都有過回答「你是誰」這個問題的經驗。最近一次被問到「你是誰」時,你是怎么介紹自己的?是回答姓名與職稱?或是身分證字號?還是某活動的報名序號?當我們在嘗試回答「你是誰」的時候,也正在定義我們的身份。身份會因情境不同而不同,有時是姓名,有時是身分證字號,也有時是某個臨時編號。
什么是數字身份(Digital Identity)?
數字身份就是以數字形式表現與儲存的身份。自全球資訊網被發明以來,數字身份便跟著開始發展直到今日。網站域名、電子信箱、社群帳號等等都是數字身份的一種。我們的日常生活離不開數字身份的使用:上社群網站發文、訂演唱會門票、上PTT看廢文、用GMail聯絡公事、用線上課程進修、用云端硬碟備份資料等等。幾乎可以說沒有數字身份,就沒有現代便利的生活。
根據2016年的文章,自我主權身份出現之前,數字身份的發展大致可以分為三個階段:
第一階段:中心化身份(Centralized Identity)
數字身份第一次隨著全球資訊網的流行而有了大量的需求。如雨后春筍般冒出來的各種網站顯露了一個迫切的問題:要怎么證明你正在瀏覽的網站是可信任的?一個直覺的思路是:我們可以對可信任的網站域名頒發憑證(Certificate)。那么由誰來頒發?由于頒發憑證的機構必須是具有公信力的機構,因此憑證機構(Certificate Authority, CA)被設立,負責域名的審核與憑證的頒發。自1995年發展至今,憑證機構現在仍是Https的骨干。
然而,CA是中心化且階層化的(Hierarchical):根CA(Root CA)頒發憑證給次級CA,次級CA再頒發憑證給更次級的CA,更次級的CA可以頒發憑證給注冊某域名的網站,擁有憑證的域名則可以讓用戶信任,使用戶愿意于此域名注冊身份。在這樣階層化的架構下,一個用戶的身份可以一直往上追朔到根CA,也就是說,根CA是身份的根基。
由此可知,這樣的數字身份非常依賴可信的根憑證機構,且用戶的身份完全掌控于注冊身份的域名擁有者,隨著使用服務的增長,一個用戶可能必須同時在數十個服務注冊身份,身份變得破碎而脆弱。
第二階段:聯合身份(Federated Identity)
為了解決身份的破碎,一個直覺的思路是:讓身份由數個組織組成的聯盟共同管理,于聯盟中任一個域名注冊的身份都可以在聯盟中通用,其中一個例子就是由升陽(Sun)主導的自由聯盟 (Liberty Alliance, 2001)。聯合身份雖然稍微解決在聯盟之間身份破碎的問題,但是于聯盟之外的身份仍然是破碎的,且身份仍由服務提供者掌控。
第三階段:以用戶為中心的身份(User-Centric Identity)
這就是我們目前所在的階段:讓不同服務、不同聯盟的身份互通以及給予用戶更多對身份的掌控,是此階段的目標。若要使某一服務的身份可以在多個服務之間通用,則各家服務需要共同制定同一套規格以跨服務驗證身份。重視用戶允許 (User Consent)與互通性 (Interoperability)的結果使用戶成為了身份的中心。用戶可以自行決定是否要從一個服務分享自己的身份至另一個服務,防止數字身份的破碎。例如OpenID(2005) / OAuth (2010) / FIDO (2013)這些開發者熟知的驗證(Authentication)協定就是遵循此原則的產物。
雖然用戶對身份擁有更多掌控以及有更好的互通性,但用戶對于中心化服務的依賴程度卻更勝以往,導致服務商擁有「濫用」用戶隱私的權力,例如以廣告營收為主要獲利來源的企業,可以在不經用戶同意下便使用或販售用戶資訊,用戶隱私有受到侵犯的風險。
身份的價值與厚度來自社交行為與頻繁的互動,在完全理想(例如非數字)的場景下,身份應當是一個整體,并能依據情境不同而揭露不同資訊,正如同當我被詢問「我是誰」時,我可以依照情境的不同給予不同的身份證明。
然而,我們當今使用的數字身份既脆弱也無法表達身份的厚度。那么要如何實現一個不受任何中心化服務掌控的身份呢?這個問題的答案一直到最近才出現— 分散式帳本就是實現自我主權身份的最后一塊拼圖。
什么是自我主權身份(Self sovereign Identity)?
自我主權身份就是用戶可以完全掌控且于任何服務之間互通使用的數字身份。自我主權身份與當今的數字身份不同—自我主權身份錨定于分散式帳本,不被任何中心化服務掌控。分散式帳本使數字身份具備下列特性,且正是這些特性保證了數字身份的自主性:
· 存在性(Existence):中心化服務可以隨時竄改數字身份的存在;分散式帳本則使身份能以去中心化識別符(DID)的形式錨定在其上且保護其不受篡改。
· 掌控性(Control):中心化服務可以完全掌控數字身份;分散式帳本使用數字簽章,掌控私鑰即掌控身份,且私鑰由用戶自行保管。
· 存取性(Access):中心化服務可以輕易限制身份存取;分散式帳本是復制狀態機,用戶可以于任一節點隨時存取身份。
· 透明性(Transparency):中心化服務多為閉源專案;分散式帳本大多為開源專案,用戶可以掌控軟體運作的細節。
· 持續性(Persistence):中心化服務有服務中斷的風險;分散式帳本多由受到經濟激勵的節點共同維護,不易中斷服務。
自我主權身份的技術架構
數字身份由識別(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年,卻已經有相當豐碩的成果,也能看到新的應用程式、協定、規格不斷推陳出新,生態系也趨于完整。但由于是相當新穎的領域,資訊經常散落在各處且缺乏脈絡,需要埋首于文件堆中才能偶然理出一些頭緒。期許這篇文章能夠幫助***的開發者快速掌握自我主權身份的精要。
評論
查看更多