分散式數字身份DID簡介(一)基本概念

BSN研習社發表於2023-10-26

01

身份

國際電子技術委員會將“身份”定義為“一組與實體關聯的屬性”。這裡的實體不僅僅是人,對於機器或者物體都可以是實體,甚至網路中虛擬的東西也可以是實體並擁有身份。

02

數字身份

隨著網際網路的出現和普及,傳統的身份有了另外一種表現形式,即數字身份。一般認為,數字身份的演進經歷了四個階段,分別是:中心化身份、聯盟身份、以使用者為中心的身份以及自我主權身份。

  • 中心化身份是由單一的權威機構進行管理和控制的,現在網際網路上的大多數身份還是中心化身份。

  • 聯盟身份的出現解決了中心化身份中身份資料零碎混亂的弊端,此種身份是有多個機構或者聯盟進行管理和控制的,使用者的身份資料具備了一定程度的可移植性,例如允許使用者登入某個網站時,可以使用其他網站的賬戶資訊,類似於QQ、微信或者微博的跨平臺登入。

  • 以使用者為中心的身份則將重點集中在去中心化上,透過授權和許可進行身份資料的共享,例如OpenID。

  • 自我主權身份才是真正意義上的去中心化的、完全由個人所擁有和控制的身份。

03

PKI體系

Public Key Infrastructure的縮寫,翻譯過來就是公鑰基礎設施,其主要功能是繫結證書持有者的身份和相關的金鑰對(透過為公鑰及相關的使用者身份資訊簽發數字證書),為使用者提供方便的證書申請、證書作廢、證書獲取、證書狀態查詢的途徑,並利用數字證書及相關的各種服務(證書釋出,黑名單釋出,時間戳服務等)實現通訊中各實體的身份認證、完整性、抗抵賴性和保密性。PKI體系的中心是CA伺服器,CA伺服器必須是安全的,可信任的。主要載體是X509格式的證書檔案。

04

DID

Decentralized IDentity去中心化身份,簡稱DID,相對於傳統的基於PKI的身份體系,基於區塊鏈建立的DID數字身份系統具有保證資料真實可信、保護使用者隱私安全、可移植性強等特徵,其優勢在於:

  • 去中心化:基於區塊鏈,避免了身份資料被單一的中心化權威機構所控制。

  • 身份自主可控:基於DPKI(分散式公鑰基礎設施),每個使用者的身份不是由可信第三方控制,而是由其所有者控制,個人能自主管理自己的身份。

  • 可信的資料交換:身份相關資料錨定在區塊鏈上,認證的過程不需要依賴於提供身份的應用方。

05

DID標識

DID標識是一個特定格式的字串,用來代表一個實體的數字身份,這裡的實體可以是人、機、物。DID標識的格式為:

undefined

字首did:是固定的,表示這個字串是一個did標識字串。

中間的example被稱為DID方法,就是用來表示這個DID標識是用哪一套方案(方法)來進行定義和操作的。這個DID方法我們可以自定義,並且註冊到W3C的網站:

中。

最後面的部分是在該DID方法下的唯 一標識字串。比如我們做了一個DID系統,我們把方法就起名叫cid吧,想把中國公民的身份證資訊都DID化,那麼我的DID標識就是:

did:cid:5111**************5

這裡我們就使用身份證號碼作為cid這個DID方法下的唯 一標識。

06

DID文件

每一個DID標識都會對應一個DID文件(DID Document)。這個文件就是一個JSON字串,裡面一般會包含如下資訊:

DID文件內容

識別符號

DID識別符號本身,也就是DID文件所描述的該DID。由於DID的全域性唯 一特性,因此在DID文件中只能有一個DID。

公鑰

公鑰用於數字簽名及其他加密操作,這些操作是實現身份驗證以及與服務端點建立安全通訊等目的的基礎。如果DID文件中不存在公鑰,則必須假定金鑰已被撤銷或無效,同時必須包含或引用金鑰的撤銷資訊(例如,撤銷列表)。

身份驗證

身份驗證的過程是DID主題透過加密方式來證明它們與DID相關聯的過程。

授權

授權意味著他人代表DID主題執行操作,例如當金鑰丟失的時候,可以授權他人更新DID文件來協助恢復金鑰。

服務端點

除了釋出身份驗證和授權機制之外,DID文件的另一個主要目的是為主題發現服務端點。服務端點可以表示主題希望公告的任何型別的服務,包括用於進一步發現、身份驗證、授權或互動的去中心化身份管理服務。

時間戳

文件建立時間和更新時間。

以上資訊並不是必須有,不過一般我們建議包含。我們來看一個具體的DID文件示例:

{
"@context": "
"id": "did:example:123456789abcdefghi",
"authentication": [{
// 本DID文件對應的DID標識
"id": "did:example:123456789abcdefghi#keys-1",
"type": "RsaVerificationKey2018",
"controller": "did:example:123456789abcdefghi",
//本DID對應的公鑰資訊
"publicKeyPem": "-----BEGIN PUBLIC KEY...END PUBLIC KEY-----\r\n"
}],
"service": [{
// 獲取本DID對應的VC的服務介面
"id":"did:example:123456789abcdefghi#vcs",
"type": "VerifiableCredentialService",
"serviceEndpoint": "
}]
}

個人覺得DID文件中最重要的就是公鑰資訊,這是我們接下來要進行VC和VP驗證的基礎。

我們一般是把DID標識作為Key,把DID文件作為Value儲存到區塊鏈中,利用區塊鏈不可篡改、共享資料訪問的特點,實現接下來在驗證身份時能快速訪問獲取可信資料。

07

可驗證憑證/可驗證宣告

(Verifiable Claims 或 Verifiable Credentials,本文接下去都簡稱VC)是一個 DID 給另一個 DID 的某些屬性做背書而發出的描述性宣告,並附加自己的數字簽名,用以證明這些屬性的真實性,可以認為是一種數字證書。

傳統的PKI數字證書體系需要CA來頒發,而在DID中也是分為頒發者、持有者、驗證者、DID註冊系統(也就是區塊鏈),具體關係如圖:

undefined

  • 頒發者Issuer就是證書的頒發機構,比如身份證就是公安機關作為頒發者。

  • 持有者Holder就是證書的持有人,就是我們這些普通人。

  • 驗證者Verifier就是在我們使用證書時檢視我們證書的人或者機構。比如我們入住酒店,前臺要驗證我們的身份證,那麼酒店前臺就是驗證者。

  • DID註冊系統Verifiable Data Registry就是我們儲存了DID標識和DID文件的地方,透過DID標識可以查詢到對應的DID文件。

當公安機關給我頒發了身份證,在DID中,這個身份證就是VC。一個VC也是一個JSON字串,裡面包含如下資訊:

undefined

  • VC後設資料,主要就是發行人、發行日期、宣告的型別等資訊。

  • 宣告,一個或者多個關於主體的說明。比如身份證作為公安機關頒發給我的VC,在宣告中會包含:姓名、性別、出生日期、民族、住址等資訊。

  • 證明,通常就是頒發者的數字簽名,保證了本VC能夠被驗證,防止VC內容被篡改以及驗證VC的頒發者。

下面是官方給出的一個VC的具體樣例:

{
  // VC內容所遵循的JSON-LD標準
  "@context": [
    "
    "
  ],
  // 本VC的唯 一標識,也就是證書ID
  "id": "
  // VC內容的格式
  "type": ["VerifiableCredential", "AlumniCredential"],
  // 本VC的發行人
  "issuer": "
  // 本VC的發行時間
  "issuanceDate": "2010-01-01T19:73:24Z",
  // VC宣告的具體內容
  "credentialSubject": {
    // 被宣告的人的DID
    "id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
    // 宣告的斷言內容
    "alumniOf": {
      "id": "did:example:c276e12ec21ebfeb1f712ebc6f1",
      "name": [{
        "value": "Example University",
        "lang": "en"
      }, {
        "value": "Exemple d'Université",
        "lang": "fr"
      }]
    }
  },
  // 對本VC的證明
  "proof": {
    // 簽名演算法
    "type": "RsaSignature2018",
    // 簽名建立時間
    "created": "2017-06-18T21:19:10Z",
    // 本證明的目的
    "proofPurpose": "assertionMethod",
    // 驗證本簽名的公鑰的ID
    "verificationMethod": "
    // 數字簽名的內容
    "jws": "eyJhbGciOiJSUzI1NiIsImI2NCI6ZmFsc2UsImNyaXQiOlsiYjY0Il19..TCYt5X
      sITJX1CxPCT8yAV-TVkIEq_PbChOMqsLfRoPsnsgw5WEuts01mq-pQy7UJiN5mgRxD-WUc
      X16dUEMGlv50aqzpqh4Qktb3rk-BuQy72IFLOqV0G_zS245-kronKb78cPN25DGlcTwLtj
      PAYuNzVBAh4vGHSrQyHUdBBPM"
  }
}

因為VC中具有使用者的隱私資訊,所以VC一般儲存在私有的儲存中,比如使用者自己的手機中,或者需要授權的網路地址中。除了前面示例中給出的資料外,我們的VC還可以有失效日期,比如我們的身份證一般10年有效,過期後就需要重新向頒發者申請新的VC。

08

可驗證表達

Verifiable presentation簡稱VP,可驗證表達是VC持有者向驗證者表名自己身份的資料。一般情況下,我們直接出示VC全文即可,但是在某些情況下,出於隱私保護的需要,我們並不需要出示完整的VC內容,只希望選擇性披露某些屬性,或者不披露任何屬性,只需要證明某個斷言即可。

比如一個求職者要進入某寫字樓面試,寫字樓的保安要求登記身份證號碼和姓名,但是我們的VC中還包含了民族、住址等資訊,我們的求職者不希望將自己的住址暴露給保安,所以他提供給保安的VP中應該只選擇性的披露的身份證號碼和姓名,其他資訊都不披露。

再比如我們規定必須年滿18歲才有資格購買香菸,所以一個消費者在購買香菸時必須證明自己已經年滿18歲,但是直接出示身份證給收銀員又會暴露太多隱私資訊,就算選擇性披露生日屬性,也會讓收銀員知道了消費者具體的年齡和生日日期,這種情況下消費者只希望在VP中證明自己大於18歲,其他什麼資訊都不能暴露。

VP的格式為:

undefined

  • VP後設資料,主要包含了版本,本JSON物件的型別等資訊

  • VC列表,要對外展示的VC的內容,如果是選擇性披露或者隱私保護的情形,可能就不包含任何VC。

  • 證明,主要就是持有者對本VP的簽名資訊

下面是官方給出的一個具體的VP的樣例:

{
  "@context": [
    "
    "
  ],
  "type": "VerifiablePresentation",
  // 本VP包含的VC的內容
  "verifiableCredential": [{
    "@context": [
      "
      "
    ],
    "id": "
    "type": ["VerifiableCredential", "AlumniCredential"],
    "issuer": "
    "issuanceDate": "2010-01-01T19:73:24Z",
    "credentialSubject": {
      "id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
      "alumniOf": {
        "id": "did:example:c276e12ec21ebfeb1f712ebc6f1",
        "name": [{
          "value": "Example University",
          "lang": "en"
        }, {
          "value": "Exemple d'Université",
          "lang": "fr"
        }]
      }
    },
    "proof": {
      "type": "RsaSignature2018",
      "created": "2017-06-18T21:19:10Z",
      "proofPurpose": "assertionMethod",
      "verificationMethod": "
      "jws": "eyJhbGciOiJSUzI1NiIsImI2NCI6ZmFsc2UsImNyaXQiOlsiYjY0Il19..TCYt5X
        sITJX1CxPCT8yAV-TVkIEq_PbChOMqsLfRoPsnsgw5WEuts01mq-pQy7UJiN5mgRxD-WUc
        X16dUEMGlv50aqzpqh4Qktb3rk-BuQy72IFLOqV0G_zS245-kronKb78cPN25DGlcTwLtj
        PAYuNzVBAh4vGHSrQyHUdBBPM"
    }
  }],
  // Holder對本VP的簽名資訊
  "proof": {
    "type": "RsaSignature2018",
    "created": "2018-09-14T21:19:10Z",
    "proofPurpose": "authentication",
    "verificationMethod": "did:example:ebfeb1f712ebc6f1c276e12ec21#keys-1",
    // challenge和domain是為了防止重放攻擊而設計的
    "challenge": "1f44d55f-f161-4938-a659-f8026467f126",
    "domain": "4jt78h47fh47",
    "jws": "eyJhbGciOiJSUzI1NiIsImI2NCI6ZmFsc2UsImNyaXQiOlsiYjY0Il19..kTCYt5
      XsITJX1CxPCT8yAV-TVIw5WEuts01mq-pQy7UJiN5mgREEMGlv50aqzpqh4Qq_PbChOMqs
      LfRoPsnsgxD-WUcX16dUOqV0G_zS245-kronKb78cPktb3rk-BuQy72IFLN25DYuNzVBAh
      4vGHSrQyHUGlcTwLtjPAnKb78"
  }
}

以上都是一些基本概念,尤其是DID、DID文件、VC、VP等術語,掌握了這些基本概念後,我們下一篇文章以一個個實際的例子覆盤一次完整的DID使用過程。

版權宣告:本文為CSDN博主「studyzy」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。

原文連結:

https://blog.csdn.net/studyzy/article/details/115266799


文章來源: CSDN博主「studyzy」
文章原標題:《 去中心化數字身份DID簡介——一、基本概念

如有侵權請與我們聯絡刪除。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70012206/viewspace-2991272/,如需轉載,請註明出處,否則將追究法律責任。

相關文章