ArcBlock Decentralized Identifier 解析

博客鏈接:https://hello2mao.github.io/2019/07/16/ArcBlock-Decentralized-Identifier/

一、背景

1.1 ArcBlock

ArcBlock 是一個去中心化應用開發部署平臺,能降低開發者門檻。ArcBlock 類似 PaaS 平臺,搭建了一個去中心化的區塊鏈應用的開發框架,開發者可藉助上面的工具開發、分享自身開發的功能模塊。開發者使用平臺上的資源都要支付代幣。
ArcBlock 平臺的核心部件和體系包括:

  • 去中心化訪問協議 (雲節點)
  • 開放鏈訪問協議
  • 基石程序和構件(Blocklet Components)
  • 代幣經濟服務體系。

架構如下圖所示:
image

1.2 DID

去中心化身份(DID)可取代電子郵件或用戶名等傳統 ID,無需在第三方服務器維護用戶的數字身份。植根於區塊鏈,DID 充分利用分佈式賬本技術來保護隱私、確保交易安全。
image
萬維網聯盟(W3C)正在主持開發的去中心化標識符(Decentralized Identitfiers,DID)標準正在成爲去中心化身份(DID)技術實現標準,目前有微軟、ArcBlock、uPort、lifeID 等企業或項目提交了各自的 DID 協議方法。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-ohrWDKM8-1575377074991)(https://user-images.githubusercontent.com/8265961/61279983-b35dd380-a7e9-11e9-9ed5-a19e058fad4d.png)]
DIDs 是身份主體相關、與該主體進行可信互動的 URL。DIDs 解析爲 DID 文檔 ——描述如何使用該 DID 的簡單文檔。每個 DID 文檔可能至少包含三部分:證明目的、驗證方法和服務端點。證明目的與驗證方法相結合,以提供證明事物的機制。例如,DID 文檔可以指定特定的驗證方法,例如密碼公鑰或化名生物特徵協議,可以用於驗證爲目的而創建的方法。服務端點支持與 DID 控制器的可信交互。
image
這一可驗證、“自我主權”的數字身份新型標識能夠讓身份數據始終置於終端用戶的控制之下,並且不把個人身份信息存儲在區塊鏈上(僅將簽名的哈希值作爲證據),讓用戶成爲身份的唯一所有者,從而擺脫任何中心化註冊服務、身份提供商或證書頒發機構的控制。爲保護隱私,DID 通常使用零知識證明方法讓聲明信息的披露儘可能的少:比如國外超市酒吧禁止向未成年人賣酒,有了 DID,你只需要提供由相關部門簽名認證的聲明說你已經超過 18 歲,而不需要分享你的出生日期。
image

1.3 ArcBlock DID

ArcBlock 開發了一個符合 W3C 標準的去中心化身份協議(ABT:DID Protocol),這是一個基於 W3C DID 解決方案的開放協議。
作爲參與者,ArcBlock 計劃與其他貢獻者合作,推廣普及 ABT:DID 身份驗證標準。ArcBlock DID 協議已在 W3C DID 方法註冊表中註冊(地址: https://w3c-ccg.github.io/did-method-registry/#the-registry )。
默認情況下,任何與 W3CDID 標準兼容 DID 的提供者均可互操作,這意味着 ArcBlock DID 標準對例如最近宣佈 DID 方案的微軟,或者該領域其他服務方開放可用。

二、特性

  • DApps Workshop,一個展示 DID 應用場景及簡單實用的 Demo,可以構建一些簡單的 POC 場景進行測試。
  • ABT 錢包,即 DID Wallet,用於創建用戶 DID、保管用戶私鑰、使用 DID 登入 DApp。
  • DID 開發包,即 DID SDK,用於生成 DID 等操作。

三、產品試用

3.1 本地搭建 DApps Workshop

npm install -g @arcblock/forge-cli
forge init
forge start
forge workshop start

==> visit http://localhost:8807

登入後界面如下:
image
提供兩個功能:

  • Authentication:創建 DID 及 DID DApp
  • Transactions:發送交易

3.2 創建 DApp

此 DApp 即需要 DID Auth 才能登入的應用。
可選 DID Type:
image
可選 DSA Algorithm:
image
可選 Hash Function:
image
配置 DApp:
image
配置 Claim:
image
創建 DApp 成功:
image

可以看到此 DApp 有如下幾個關鍵信息:

  • Application DID,即 appDid
  • Application Public Key,即 appPk
  • Application Secret Key,即 appSk

其中 appDid 和 appPk 會用來構建一個 Auth URL,用戶通過這個 URL 來認證自己的 DID,經過認證後就可以登入 DApp。此 URL 在 ArcBlock DID 中稱爲 Deep Link,例如:

https://abtwallet.io/i?appPk=z8Ks49bptUsBUTq1bdbs23TVe2swE4BfbVGpHr5Nxasi4&appDid=did:abt:zNKedP579cjMW9gRG7UEBAt1PASmE9nwnSFh&action=requestAuth&url=http%3A%2F%2F169.254.10.127%3A8807%2Fapi%2Fauth%2F

3.3 創建 DID 以及使用 DID

掃碼註冊 DID:
image
在 DApp 上看到新建的 DID,以及提供的 Claim:
image
在 DID Wallet 查看 DID:
image
image
使用 DID 登入 DApp:
image

四、ArcBlock DID 認證協議

4.1 DID Schema

did:abt:z1muQ3xqHQK2uiACHyChikobsiY5kLqtShA
  DID            DID string
 schema

創建一個 ABT DID 需要:

  • DID Type:11 類
  • DSA Algorithm:由私鑰生成公鑰的算法,支持 ED25519 和 SECP256K1
  • Hash function:公鑰 Hash 的算法,支持 6 種
  • 私鑰:隨機生成

由上述 4 個數據,參考比特幣,經過 11 步,生成DID string,然後加上did:abt:,作爲最終的 ABT DID。
詳細的生成過程見:https://arcblock.github.io/abt-did-spec/

4.2 DID Auth 流程

4.2.1 獲取 Deep Link

Deep Link 即用戶認證 DID 的 URL,當然也可以做成二維碼,讓用戶掃碼認證。關鍵是appPkappDid這個兩個參數,前者是 DApp 的公鑰,用於加密用戶 DID,後者是 DApp 的 DID,用於生成用戶的 DID。

4.2.2 Request DID Authentication

使用 DID 認證登入的作用,主要是 DApp 爲了獲取用戶的認證聲明(verifiable claims )。
(1)使用 DApp 的appDid生成用戶的 DID,即userDid
(2)使用 DApp 的appPk加密用戶的 DID
(3)發送此 DID 到 DApp 的 Auth Endpoint
(4)獲取 Auth Response,包含appPkauthInfo,其中authInfo是簽名過的 JWT 對象。
(5)DID Wallet 根據 Auth Response 進行響應,詳見 4.2.3

4.2.3 Response DID Authentication

在 Auth Response 中,DApp 會要求 DID Wallet 提供 Claim,此時 DID Wallet 只需按照格式 POST 內容給 DApp 即可完成 DID Auth,如下:

header:
{
   "alg": "Ed25519",
   "typ": "JWT"
 }
body:
 {
   "userPk": "",
   "userInfo": ""
 }

其中userInfo需要編碼,原文爲:
 {
   "iss": "userDid",
   "iat": "1548713422",
   "nbf": "1548713422",
   "exp": "1548813422",
   "requestedClaims": [
     {
       "type": "profile",
       "fullName": "Alice Bean",
       "mobilePhone": "123456789",
       "mailingAddress": {
         "addressLine1": "456 123th AVE",
         "addressLine2": "Apt 106",
         "city": "Redmond",
         "state": "WA",
         "postalCode": "98052",
         "country": "USA"
       }
     },
     {
       "type": "agreement",
       "uri": "https://document-1.io",
       "hash": {
         "method": "sha256",
         "digest": "The hash result of the document's content"
       },
       "agreed": true,
       "sig": "user's signature against the doc hash plus AGREED."
     },
     {
       "type": "agreement",
       "uri": "ipfs://document-2",
       "hash": {
         "method": "sha3",
         "digest": "The hash result of the document's content"
       },
       "agreed": false
     }
   ]
 }

注意到,上述兩類 claim(profile 和 agreement)都是直接把用戶的隱私信息透露給 DApp 的

4.3 Verifiable Claims

定義了 3 類 claim:

  • profile:例如個人資料
  • agreement:例如某某協議
  • proofOfHolding:第三方簽發的、擁有某 token、資產的權威證明(TBD)

4.4 使用場景

  • 用戶註冊
  • 用戶登入
  • 簽署文件
  • 發佈證書
  • 申請 VISA
  • p2p 信息交換

五、參考

發佈了68 篇原創文章 · 獲贊 40 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章