博客鏈接:https://hello2mao.github.io/2019/07/16/ArcBlock-Decentralized-Identifier/
一、背景
1.1 ArcBlock
ArcBlock 是一個去中心化應用開發部署平臺,能降低開發者門檻。ArcBlock 類似 PaaS 平臺,搭建了一個去中心化的區塊鏈應用的開發框架,開發者可藉助上面的工具開發、分享自身開發的功能模塊。開發者使用平臺上的資源都要支付代幣。
ArcBlock 平臺的核心部件和體系包括:
- 去中心化訪問協議 (雲節點)
- 開放鏈訪問協議
- 基石程序和構件(Blocklet Components)
- 代幣經濟服務體系。
架構如下圖所示:
1.2 DID
去中心化身份(DID)可取代電子郵件或用戶名等傳統 ID,無需在第三方服務器維護用戶的數字身份。植根於區塊鏈,DID 充分利用分佈式賬本技術來保護隱私、確保交易安全。
萬維網聯盟(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 控制器的可信交互。
這一可驗證、“自我主權”的數字身份新型標識能夠讓身份數據始終置於終端用戶的控制之下,並且不把個人身份信息存儲在區塊鏈上(僅將簽名的哈希值作爲證據),讓用戶成爲身份的唯一所有者,從而擺脫任何中心化註冊服務、身份提供商或證書頒發機構的控制。爲保護隱私,DID 通常使用零知識證明方法讓聲明信息的披露儘可能的少:比如國外超市酒吧禁止向未成年人賣酒,有了 DID,你只需要提供由相關部門簽名認證的聲明說你已經超過 18 歲,而不需要分享你的出生日期。
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
登入後界面如下:
提供兩個功能:
- Authentication:創建 DID 及 DID DApp
- Transactions:發送交易
3.2 創建 DApp
此 DApp 即需要 DID Auth 才能登入的應用。
可選 DID Type:
可選 DSA Algorithm:
可選 Hash Function:
配置 DApp:
配置 Claim:
創建 DApp 成功:
可以看到此 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:
在 DApp 上看到新建的 DID,以及提供的 Claim:
在 DID Wallet 查看 DID:
使用 DID 登入 DApp:
四、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,當然也可以做成二維碼,讓用戶掃碼認證。關鍵是appPk
和appDid
這個兩個參數,前者是 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,包含appPk
和authInfo
,其中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 信息交換