# DID Primer (正體中文翻譯) 原文:[DID Primer](https://github.com/WebOfTrustInfo/rwot5-boston/blob/master/topics-and-advance-readings/did-primer.md) --- 這是由 Drummond Reed 和 Manu Sporny 編輯以及[Decentralized Identifier 1.0](https://w3c-ccg.github.io/did-spec/) 規範的其他貢獻者和實施者維護的社群文件。 ## 引言 粗淺上看來,**decentralized identifier (DID)** 只是一種新型的全球唯一 identifier,具有為區塊鏈設計的特殊功能。但是從更深層次上講,DID 實際上是網際網路中,去中心化的數位身份和公鑰基礎結構(PKI)全新層的冰山一角(或矛尖)。這種[去中心化的公共密鑰基礎結構(DPKI)](https://github.com/WebOfTrustInfo/rebooting-the-web-of-trust/blob/master/final-documents/dpki.pdf)對全球網絡安全和網絡隱私的影響,可能與開發用於加密網站傳輸的 [SSL/TLS 協議](https://en.wikipedia.org/wiki/Transport_Layer_Security)(現在是世界上最大的PKI)一樣大。這份入門手冊是設計給對於 DID 的架構與背景的新手。不僅需要理解 DID 規範,而且需要了解正在開發中的 DID 相關規範,他們包含: - DID 的起源和 DID 規範的背景。 - DID 與其他全球唯一 (globally-unique) idntifier 的區別。 - DID 語法如何適應運行於任何現代的區塊鏈上。 - DID 如何解析為包含公鑰和服務端點 (service endpoints) 的 **DID documents**。 - **DID methods** 在 DID 基礎結構的實現中的關鍵角色。 - 在使用 DID 時的隱私考量。 - DID 基礎結構如何為 **verifiable claims** 奠定基礎。 ## 設置階段:DID 的起源 在 Internet 的歷史中,每一個 identifier 在全球範圍內都是唯一,且可全球解析的(意味著您可以查找它,並獲取相關資源的 metadata )而這些 identifier 需要某種類型的集中管理。例如,IP(Internet 協議)位址和 DNS(域名系統)名稱(Internet 和 Web 的基礎)都需要集中的註冊管理機構和註冊商。 儘管這些集中式系統非常地有效率,但長久以來,這種體系結構一直被認為,既是單點的控制(從而進行潛在的審查),同時也是故障的單點。因此,在最近幾年中,幾個小組開始獨立研究分散式替代方案。按年代順序: 1. The [W3C Web Payments Working Group](https://www.w3.org/Payments/WG/) and [W3C Verifiable Claims Task Force](https://w3c.github.io/vctf/), led by Manu Sporny and David Longley of Digital Bazaar, recognized that truly portable digital credentials for individuals would require a new type of identifier that was not dependent on a third-party for registration or resolution. 2. The XDI.org Registry Working Group, led by [OASIS XDI Technical Committee](https://www.oasis-open.org/committees/xdi/) co-chairs Drummond Reed and Markus Sabadello and Internet Identity Workshop (IIW) co-founder Phil Windley, began looking for a decentralized solution for identifying participants in a global peer-to-peer XDI semantic data interchange network. 3. The [Rebooting the Web of Trust](http://www.weboftrust.info/) (RWOT) community, led by Christopher Allen, began exploring how blockchain technology could be used to enable the decentralized digital identity and trust network originally envisioned by [Phil Zimmermann](https://en.wikipedia.org/wiki/Phil_Zimmermann) for [PGP](https://en.wikipedia.org/wiki/Pretty_Good_Privacy). 4. [The U.S. Department of Homeland Security (DHS) Science & Technology Directorate](https://www.dhs.gov/science-and-technology) (S&T), led by Identity and Data Privacy Program Manager Anil John, began researching [how blockchain technology could be used for privacy-respecting decentralized identity management](https://www.sbir.gov/sbirsearch/detail/867797). 到了 2016 年春季,所有四個小組都集中在 DID 的概念上,該術語最初由 W3C Verifiable Claims Task Force 提出。 部分歸功於DHS S&T 提供的研發資金,第一個 [Decentralized Identifier 1.0](https://w3c-ccg.github.io/did-spec/) 規範的制定工作於 2016 年 5 月在 RWOT#2 正式開始。規範草案於 2016 年 10 月在 RWOT#3 和 IIW#23 進行了審查,並已發布 於 2016 年 11 月 21 日作為實施者的 1 號草稿。 在 W3C Verifiable Claims 工作組於 2017 年 3 月獲得批准後,2017 年 7 月,DID 規範被提交給 [W3C Credentials Community Group](https://www.w3.org/2017/vc/charter.html)。 每六個月舉行的 RWOT 和 IIW 活動以及其他行業活動和會議將繼續進行一些相關規範(見下文)的工作。 有關參與 DID 規範系列的資源和方法的列表,請參見附錄 A。 ## DID 與其他全球唯一 identifier 的區別 不需要集中式註冊機構的全局唯一 identifier 的需求並不新鮮。[UUIDs](https://en.wikipedia.org/wiki/Universally_unique_identifier)(通用唯一 identifier,也稱為GUID,全球唯一 identifier),為此被開發於 1980 年代,並先由開放軟體基金會然後由 [IETF RFC 4122](https://tools.ietf.org/html/rfc4122) 對其進行了標準化。 對持久性的 identifier(可以一次分配給實體並且永遠不需要更改的 identifier)的需求也不是新鮮的。 此類 identifier 首先由[IETF RFC 2141](https://www.ietf.org/rfc/rfc2141.txt) 標準化,後來又由 [RFC 8141](https://tools.ietf.org/html/rfc8141) 標準化為 [URNs](https://en.wikipedia.org/wiki/Uniform_Resource_Name)(統一資源名稱)。 但是,通常,UUID 不能全域解析,而 URN(如果可以解析)需要集中的註冊機構。 此外,UUID 和 URN 本質上都無法解決第三個特徵,即以**密碼學的方式驗證 identifier 所有權的能力**。 對於區塊鏈身份-更具體地說是**自我主權身份**,可以定義為,-不依賴任何集中授權,且永遠不會被剝奪的終身攜帶式數位身份- 我們需要一種新型的 identifier 來滿足這三個條件與要求。 ## DID 的格式 在 2016 年,DID 規範的開發者同意 Christopher Allen 的建議,即可以遵循與 URN 規範相同的基本模式,使 DID 可以與多個區塊鏈一起使用: ![](https://i.imgur.com/2h3ktbD.png) 關鍵區別在於,使用 DID 時,以 namespace 部件識別一個 **DID methods**,而 **DID methods specification** 指定方法特定 identifier 的格式。 ![](https://i.imgur.com/zf0GMn2.png) DID methods 定義 DID 如何與特定區塊鏈一起使用。它們將在下面被進一步的解釋,但是所有 DID method specification 都必須定義方法特定 identifier 的格式和生成。 請注意,方法特定的 identifier 字串在該 DID method 的 namespace 中必須是唯一的。例如,上面的 DID 使用 Sovrin DID methods,其中方法特定的 identifier 是通過對 Ed25519 驗證密鑰的前半部分進行 base-56 編碼生成的。 ## DID Documents DID 基礎設施可以被認為是全域的 [key-value database](https://en.wikipedia.org/wiki/Key-value_database),其中該資料庫為所有 DID 相容的區塊鏈,分散式分類帳本或分散式網絡。在此虛擬資料庫中,密鑰 (key) 是 DID,值 (value) 是 DID documents。 DID documents 的目的是描述引導與標識的實體進行,密碼可驗證的交互所必需的公鑰和服務端點。 DID documents 是有效的 [JSON-LD 物件](https://json-ld.org/spec/latest/json-ld/),它使用 DID 規範中定義的 **DID context**(屬性名稱的 RDF 詞彙表)。這包括六個核心部份: - DID 本身,因此 DID document 是完全自描述的。 - 一組可用於身份驗證,或與已標識實體進行交互的公鑰或其他證明。 - 一組服務端點,描述了在何處以及如何與所標識的實體進行交互。 - 一組用於標識實體(或其他委派實體)的授權功能,以更改 DID document。 - 審核的時間戳。 - 如果需要用於驗證文檔完整性時可選擇用 JSON-LD 簽名。 有關 DID documents 的幾個示例,請參見 [DID specification](https://w3c-ccg.github.io/did-spec/)。 ## DID Methods DID 架構的特定目標是使 DID 和 DID document 適用於任何能夠將唯一密鑰解析為唯一值的現代區塊鏈,分散式分類帳本或其他分散式網絡。 區塊鍊是公共的,私有的,未經許可的還是被許可的都沒有關係。 重要的是如何在特定的區塊鏈上創建,解析和管理 DID 和 DID documents。 定義這就是 **DID method specification** 的作用。 DID method specification 適用於通用 DID specification,就像 URN namespace 規範(UUID,ISBN,OID,LSID等)適用於通用 IETF URN 規範([RFC 8141](https://tools.ietf.org/html/rfc8141))。 DID method specification 必須定義以下內容: - DID method 名稱。 - Identifier ABNF 結構的特定方法 - 特定方法的 identifier 如何產生或導出。 - 如何對 DID 和 DID documents 執行 [CRUD 操作](https://en.wikipedia.org/wiki/Create,_read,_update_and_delete): - 創造一個新的 DID - 讀取(解析)DID documents。 - 更新一個 DID documents - 刪除(或撤銷)一個 DID 這些 CRUD 操作在不同的 DID method 中可能有很大的不同。 例如: 1. 創造: 一些 DID method 可能直接從加密密鑰對中生成 DID。 其他人可能會在區塊鏈上,使用交易或智能合約的地址。 2. 讀取: 一些 DID method 使用可以將 DID documents 直接存儲在區塊鏈上的區塊鏈。其他人可能指示 DID 解析器 (DID resolvers) 根據區塊鏈記錄的屬性動態構建它們。還有一些人可能在區塊鏈上存儲了指向DID documents 的指標,該 DID documents 存儲在 [IPFS](https://en.wikipedia.org/wiki/InterPlanetary_File_System) 或 [STORJ](https://en.wikipedia.org/wiki/STORJ) 等其他分散存儲網路的一個或多個部分中。 3. 更新: 從安全的角度來看,更新的操作是最關鍵的,因為對 DID documents 的控制代表了對認證實體(從而使攻擊者冒充該實體)所需的公鑰或證明的控制。 由於 DID documents 更新權限的驗證只能由目標區塊鏈執行,因此 DID method 規範必須明確的定義如何對任何更新操作,執行身份驗證和授權。 4. 刪除: 根據定義,區塊鏈上的 DID 條目是不可變的,因此從傳統的資料庫意義上講,它們永遠都無法“刪除”。 但是,可以從密碼學意義上撤銷它們。 DID method 規範必須定義此終止的執行方式,例如,通過編寫空 DID documents。 ## 相關規格 DID 是去中心化身份基礎結構新階層的 “原子單元”。以下是 DID 系列中,其他正在開發中的其他規範的列表。 ### DKMS (Decentralized Key Management System) DID 僅可通過公鑰/私鑰加密進行; 在沒有任何中介的情況下產生,寫入 DID 和 DID documents 並將其更新到區塊鏈的能力要求控制關聯的私鑰。 這種密鑰管理本身不能依靠集中的權威,否則會破壞整體目標。 簡而言之,分散的身份要求分散的密鑰管理。 如何可在不同區塊鏈,應用程序和供應商之間,以互相操作的方式管理與 DID 相關聯的私鑰和其他私有數據的生命週期是 DKMS(分散密鑰管理系統)規範的重點。 該規範是在美國國土安全部科學技術局的資助下開發的。 DKMS 規範將基於 [NIST Special Publication 800-130](http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-130.pdf) “設計密鑰管理系統的框架” 中提出的要求和最佳實踐。 ### DID TLS 當今的 TLS 基礎架構是使用基於傳統分層 PKI 的 [X.509 certs](https://en.wikipedia.org/wiki/X.509),其中證書頒發機構(CA)遵循標準化的最佳實踐,以便符合將被瀏覽器供應商認可的信任根。 DID TLS 通過使建立 TLS 會話所需的標準 X.509 certs 元素能夠從符合 DID 規範的任何 DID 和 DID documents 中動態生成,從而分散了此過程。 ### DID Names DID 規範有意地限制於機器生成的分散式 identifier,這些 identifier 完全缺乏人類的記憶力或可用性。 但是,在許多用例中,希望能夠使用人類友好的語義名稱來探索 DID。 這樣的命名服務看起來像是 DNS 的平面,可加密驗證的版本。 當然,最大的區別是 DID 命名服務需要完全分散,即沒有集中的註冊管理機構和註冊服務商。 DID 名稱的註冊將由身份所有者,直接使用與 DID 交易相同的密碼驗證方式向區塊鏈本身進行。 DID 名稱規範的目標是,標準化可互操作的分散式命名層如何直接在DID 層之上運行。 DID 名稱映射到 DID 的方式與 DID 映射到 DID documents 的方式相同。 DID 名稱將是 DID method 的可選功能,因此 DID 名稱空間的管理和經濟性可以由定義關聯 DID method 的同一社群指定。 ### DID Auth 所有區塊鏈身份系統的共同目標是以身份所有者的密碼認證。 各種協議都使用某種類型的密碼質詢/響應,類似於 Steve Gibson 最初提出的 [SQRL 協議](https://en.wikipedia.org/wiki/SQRL)和 W3C 當前正在標準化的 [Web 身份驗證協議](https://en.wikipedia.org/wiki/Web_Authentication_Working_Group)。 在這些協議中,由依賴方發出一次挑戰,由身份所有者的私鑰簽名,然後由依賴方使用身份所有者的公鑰進行驗證。 SQRL 和 Web 身份驗證使用無法從外部驗證的成對公共密鑰,而 DID 將啟用針對 DID method 標識的區塊鏈的公共密鑰的驗證。 DID Auth 規範將使該密碼質詢/響應身份驗證協議標準化,因此它可以與支持它的任何 DID 一起使用。 然後,DID Auth 端點將成為標準 DID 身份服務之一,而不是可以通過 DID documents 發現的服務。 ### DID 和隱私設計 隱私是任何身份管理解決方案的重要組成部分; 對於使用不可變公共區塊鏈的全球身份系統而言,這一點尤其重要。 值得慶幸的是,DID 體系結構可以在最低級別的基礎結構級別上納入“按計劃設計的隱私”功能,因此,如果採用以下最佳做法進行部署,則它會成為功能強大的新的隱私保護技術: 1. 成對唯一 DID。 儘管 DID 可以用作眾所周知的公共 identifier,但它們也可以用作基於每個關係發布的私有 identifier。 因此,與其擁有一個唯一的 DID(例如手機號碼或國家 ID 號碼)的人不同,她可以擁有數百個成對唯一的 DID,未經她的同意就無法關聯,但仍然可以像通訊錄一樣容易地進行管理。 2. 鏈下的私有資料。 在公共區塊鏈上存儲任何類型的 PII,即使是加密或 hash 也很危險,原因有兩個:1)與多方共享數據時,加密或hash 是全局關聯點; 2)如果最終加密 如果數據損壞(例如量子計算),則將永遠可以在不可變的公共分類帳上訪問數據。 因此,最佳實踐是離線存儲所有私有數據,並僅通過加密的私有對等連接進行交換。 3. 選擇性揭露。 DID 使得分散式 PKI(DPKI)成為可能,這使個人可以通過兩種方式更好地控制其個人數據。 首先,它使它可以使用加密的數字憑據進行共享(請參見下文)。 其次,這些憑據可以使用零知識證明密碼術來最小化數據,例如,您可以披露自己已經超過一定年齡,而無需透露確切的生日。 ## DIDs 和 Verifiable Claims DID 只是分散式身份基礎結構的基礎層。 下一層 -可以釋放大部分價值- 是 Verifiable Claims。 這是數位簽名的電子證書的技術術語,其符合 [ W3C Verifiable Claims Working Group](https://www.w3.org/2017/vc/charter.html)正在開發的互操作性標準。 有關完整的介紹,請參見[ Verifiable Claims Primer](https://github.com/WebOfTrustInfo/rebooting-the-web-of-trust-fall2017/blob/master/topics-and-advance-readings/verifiable-claims-primer.md)。 下圖(來自Manu Sporny)說明了 Verifiable Claims 生態系統中的三個主要角色:發行人對 claims 進行簽名並將其交給持有人(身份所有者),持有人(身份所有者)將其提交給驗證者以驗證簽名以授予對資源的訪問權限。 ![](https://i.imgur.com/9esar8C.png) 請注意,在所有這三種情況下,各方都與 DID 層進行交互,以將 DID註冊為發行者或持有者的永久 identifier,並解析這些 DID 以獲取驗證發行者或持有者的簽名所需的公鑰。 由於任何發行人都可以向可能向任何驗證者提出 claims 的任何持有人提供債權,因此,這導致形成了一組豐富且互鎖的信任關係,這些關係不需要符合任何預先建立的層次結構 - 信任網絡。 ## 附錄A:DID 社群資源 - [W3C Verifiable Claims Working Group mailing list](https://www.w3.org/community/credentials/) - [W3C Credentials Community Group](https://w3c-ccg.github.io/) - [DID specification issues list](https://github.com/w3c-ccg/did-spec/issues/) - [Rebooting the Web of Trust event (held every six months)](http://www.weboftrust.info/) - [Internet Identity Workshop event (held every six months)](http://www.internetidentityworkshop.com/) ###### tags: `DID`