古詩詞大全網 - 個性簽名 - 去中心化DID身份認證的技術解析

去中心化DID身份認證的技術解析

去中心化數字身份(Decentralized Identity,DID)是基於區塊鏈技術建立起來的壹種數字身份系統。它可以保證身份數據真實可信,同時也能保護身份用戶相關的隱私,確保跟個人身份相關的數據歸屬於個人所有。很吻合2021年11月開始實施的《中國個人信息保護法》,有沒有?

V1.0 傳統的身份認證 :用戶在每個網站上都重復註冊賬號,使用賬號+密碼的方式登錄,每個網站各自掌握著用戶的身份信息,如圖1(a)所示。

缺點 :重復註冊賬號,用戶會時常不記得賬號密碼;而且多個網站都有用戶的信息,也導致信息泄露。

V2.0 以單點登錄代表的身份認證 :用戶在壹個網站上註冊的賬號,可以授權登錄到其他網站,比如在支付寶、微信、facebook、google等網站註冊號賬號後,授權登錄到其他網站,如圖1(b)所示。

缺點 :用戶的信息都掌握在幾個大網站內,會有”店大欺客“的成分存在,也容易出現信息泄露的情況,如facebook的用戶信息泄露問題。

V3.0 去中心化的身份認證 :用戶保管自己的身份信息,在必要的時候,以最小化的方式出示給各個網站確認即可,如圖1(c)所示。

算缺點麽? 需要區塊鏈作為底層技術支撐,將區塊鏈作為壹個可信任的第三方,來保證身份信息的完整性和正確性。

DID 文檔是對DID的詳細說明,是壹對壹的關系,可以看作由兩部分組成:DID metadata,以及 DID public key,如圖4(a),其中public key是關鍵,用於數字簽名或加密操作等。

壹般 DID 由用戶自己保存,而將DID document 保存在區塊鏈上(可以DID為 key 做索引),以保證DID document 的正確性。

當用戶在區塊鏈上註冊 DID 時,可以根據智能合約生成DID 及相關的document,並由智能合約負責 DID在鏈上的讀取和更新等。

DID的認證過程涉及四方的交互:證書頒發者,證書持有者(可以擁有壹個app保存多張證書憑據VC),驗證方,以及DID註冊系統(比如區塊鏈)。

證書頒發者是壹個權威機構,比如某大學、公安機關等;持有者會保存權威機構發布的憑據VC(比如從大學拿到的畢業證,公安機關拿到的身份證等);驗證者會對這些憑據的表示(VP),並結合區塊鏈上的信息進行驗證。

DID認證的前提是權威機構、VC持有者、驗證者都已經在區塊鏈上註冊了各自的ID。

VC(Verifiable Credential) : 可驗證的憑據,這相當於大學頒發的畢業證,或是公安機構頒發的身份證等。其格式如圖4(b)所示,包括:

(1) VC metadata,比如發行人、發行日期、聲明(claim)的類型等;

(2) claim: 是壹個或者多個關於主體的說明,比如身份證憑據的聲明包含:姓名、性別、出生日期、民族、住址等;

(3) proof證明:保存了頒發者的數字簽名,用於驗證該VC的正確性及來源等。

有些實現方案中使用app或是錢包存儲VC,持有者自己保管,也可以將VC存在區塊鏈中,作為私密數據保存。

VP(Verifiable Presentation) : 可驗證的憑據表示,或者說是可驗證的憑據的展示方式,有些場景下持有者不便於將VC直接給驗證者看,或者壹次驗證中會涉及多個VC,所以就將壹個或多個VC包裝成VP,其格式如圖4(c):

(1) VP元數據,包含了版本等信息;

(2) VC列表,要對外展示的VC的內容,如果是選擇性披露或者隱私保護的情形,就需要對原始的VC做壹些變動並加上對變動的證明。

(3) proof證明,主要就是持有者對本VP的簽名信息。

VC中的claim五花八門,可能是大學畢業證書、身份證、駕駛證、結婚證等,為了能正確地解析,就需要提前在區塊鏈中註冊其解析方式。

這種事情壹般由Authority來完成,按照業務場景分類,定義不同類型數據結構的Claim結構,並註冊在區塊鏈上,以保證全網通用。

以身份證為例,其完整的VC憑據包括姓名、性別、出生日期、民族、住址、照片等。在買火車票時,可能只需要姓名和身份證號碼;上學報名時,可能僅需要姓名、出生日期等;確認少數民族身份時,必須要明確民族信息。所以很多場景下,不是全部選項都需要,可能只需要其中的壹兩項,可以僅僅披露必須項。

但如何確認披露的這幾項是正確的,沒有被修改過呢?這裏用到了經典的Merkle Tree結構,如圖5所示。比如在只需要披露生日的場景下,就可以借用”生日“的兄弟選項”民族“,以其到樹根的路徑<Hash1, Hash34> + MerkleRoot 來驗證”生日“的正確性。

比如證書到期了,頒發者需要撤銷之前發布的憑據VC,這裏用到了密碼學中的累加器。

在頒發者發布VC時,會給每個VC都設置壹個大素數,並保存所有大素數的RSA累加結果;當需要撤銷某個VC時,就先用該VC的大素數去除Accumulator,並更新Accumulator,之後驗證時,用 VC 對應的大素數去除 Issuer 公開的 Accumulator,如果能整除,則表明是VC是有效的(未被撤銷)。

基於Ethereum,比較知名的DID是uPort。我也曾關註過Hyperledger的DID項目 Hyperledger Indy,但其底層采用了自己的壹套區塊鏈架構,而非Hyperledger Fabric,這估計是基於Fabric 的DID實現的場景較少的原因。微眾銀行FISCO BCOS基於自己的BCOS架構,實現了自己的壹套 WeIdentity .

該章節只簡單講述了DID是什麽,並粗略介紹了其使用原理,還有很多細節未能壹壹道來,如需要更多細節請移步:

在本文中介紹了DID的單壹實現方式,今天看到另外壹篇博客 Demystifying Digital Identity (2/2) 或參考其翻譯 揭開數字身份的神秘面紗2/2 ,建議通過壹組鏈接文檔來實現擴展的DID,以信息圖譜的方式來組織文檔,如主鏈、關聯的多個賬戶、分類的基本信息profile、關聯的外部服務或資源等,如下圖。這樣的DID,就可以對接任何應用程序、服務或用戶,而且是壹個全球可用的、分布式的、可審查的DID。