Indy架構(gòu)與DID流程
1、架構(gòu)
總架構(gòu)
在水平方向上娩鹉,INDY ARM分為4個(gè)透視圖:
-
項(xiàng)目和發(fā)行:
- Hyperledger Indy-SDK:客戶端交互接口建炫,支持Java典蜕、Python断盛、iOS、NodeJS愉舔、.Net钢猛、Rust
- Hyperledger Indy-Agent(被Hyperledger Aries取代):包括用于區(qū)塊鏈客戶端的共享加密錢包(安全存儲(chǔ)技術(shù)), 以及用于允許這些客戶端之間進(jìn)行賬外交互的通信協(xié)議 轩缤。
- Hyperledger Indy-Crypto:Hyperledger Indy組件的共享加密庫(kù)命迈。
- DIF Universal-Resolver:標(biāo)識(shí)符解析器贩绕,可與任何分散式標(biāo)識(shí)符系統(tǒng)(包括分散式標(biāo)識(shí)符(DID))一起使用。
- Hyper Indy-Node:實(shí)現(xiàn)了基于Plenum BFT共識(shí)協(xié)議的分布式賬本壶愤,以及節(jié)點(diǎn)的功能淑倾。主要包括:處理讀寫(xiě)請(qǐng)求、定義交易類型以及交易分類存儲(chǔ)征椒。
生態(tài)系統(tǒng)(涉及業(yè)務(wù)娇哆、應(yīng)用、技術(shù))
-
DID數(shù)據(jù)模型
-
DID
URL scheme identifier (
did
)-
Identifier for the DID method
(DID method 定義標(biāo)識(shí)符的格式和生成規(guī)則)
DID method-specific identifier
例:
did:sov:8a9F8ZmxuvDqRiqqY29x6dx9oU4qwFTkPbDpWtwGbdUsrCD
Verinym:創(chuàng)建賬本已知的DID陕靠,合法法身份或身份所有者的唯一標(biāo)識(shí)符。
Pseudonym:第二身份脱茉,隱藏真實(shí)身份剪芥。
-
NYM:用于創(chuàng)建Verinym的交易被稱為NYM交易,被用來(lái)創(chuàng)建新的 DIDs琴许,設(shè)置或者調(diào)換驗(yàn)證密鑰(verification key)税肪,設(shè)置和改變角色(roles)。
例:
{ "submitterId": "did:sov:29wksjcn38djfh47ruqrtcd5", "signature": "1qaz2wsx3edc4rfv5tgb6yhn7ujm8iklop==", "reqId": "okn987yhbgFtErDsCXsw", "operation": { "type": "NYM", "did": "did:sov:mnjkl98uipsndg2hdjdjuf7", "document": { "publicKey": [{ "id": "key1" "type": "ED25519SignatureVerification", "publicKeyBase58": "..." }], "authentication": [{ "type": "ED25519SigningAuthentication", "publicKey": "key1" }], "service": [{ "type": "agentService", "serviceEndpoint":"https://www.sovrin.org/agents" }] } } }
-
-
DID文檔模型
DID文檔是對(duì)一個(gè)DID實(shí)體的JSON-LD序列化榜田,包括:
DID標(biāo)識(shí)符益兄、一組加密材料(公鑰)、一組加密協(xié)議箭券、一組服務(wù)端點(diǎn)净捅、時(shí)間戳、JSON-LD簽名辩块。
例:
{ "id": "did:sov:mnjkl98uipsndg2hdjdjuf7", "publicKey": [{ "id": "key1" "type": "ED25519SignatureVerification", "publicKeyBase58": "...", "authorizations": ["all"] }], "authentication": [{ "type": "ED25519SigningAuthentication", "publicKey": "key1" }], "service": [{ "type": "agentService", "serviceEndpoint":"https://www.sovrin.org/agents" }] }
從縱向看蛔六,Indy主要分為業(yè)務(wù)層(Business Layer)、應(yīng)用層(Applications Layer)和技術(shù)層(Technology Layer)废亭。
業(yè)務(wù)層:憑證發(fā)行(Issue)国章、憑證存儲(chǔ)(Local Store)、數(shù)據(jù)請(qǐng)求(Request)豆村、憑證披露(Present)液兽、憑證驗(yàn)證(Verify)、憑證撤銷(Revocate)用戶注冊(cè)登錄等掌动。
應(yīng)用層:提供DID服務(wù)四啰、提供憑證服務(wù)、提供特定業(yè)務(wù)服務(wù)粗恢。( 由Indy-Agent/Aries 和 Indy-SDK 支撐)
-
技術(shù)層
-
Cloud Agent
由Indy-Agent項(xiàng)目拟逮、Indy-SDK項(xiàng)目和DIF Universal-Resolver項(xiàng)目作支撐,主要功能是提供對(duì)Edge Agent的服務(wù)适滓,直接與Ledger層進(jìn)行交互敦迄,將請(qǐng)求結(jié)果返回到應(yīng)用層。
Indy-SDK項(xiàng)目調(diào)用Ledger層的API,實(shí)現(xiàn)直接與區(qū)塊鏈進(jìn)行交互罚屋;
Indy-Agent項(xiàng)目調(diào)用Indy-SDK的錢包API苦囱,提供代理功能組件,并提供憑證注冊(cè)組件(Credential Registry Node Component)實(shí)現(xiàn)憑證的注冊(cè)脾猛;
DIF Universal-Resolver項(xiàng)目提供DID的解析器組件撕彤,直接與Ledger層交互,解析出DID猛拴。
-
Ledger
由 Indy-Node 和 Indy-Plenum 兩個(gè)項(xiàng)目實(shí)現(xiàn)羹铅,主要功能是實(shí)現(xiàn)Indy區(qū)塊鏈的功能。
在Ledger組件中默認(rèn)使用RocksDB和LevelDB進(jìn)行KV存儲(chǔ)愉昆,且使用Merkle Patricia Trie 存儲(chǔ)賬本狀態(tài)职员。每個(gè)節(jié)點(diǎn)均維護(hù)四個(gè)賬本:
Audit Ledger:主要負(fù)責(zé)與其他三個(gè)Ledger同步,為失敗節(jié)點(diǎn)恢復(fù)數(shù)據(jù)跛溉,并對(duì)賬本正確性進(jìn)行審計(jì)焊切;
Pool Ledger:主要維護(hù)池中節(jié)點(diǎn)的信息(Membership);
Domain Ledger:為主要賬本芳室,記錄交易专肪;
Config Ledger:是Pool節(jié)點(diǎn)的配置賬本。
詳細(xì)請(qǐng)參考:https://hyperledger-indy.readthedocs.io/projects/plenum/en/latest/storage.html
-
2堪侯、實(shí)現(xiàn)DID(分布式標(biāo)識(shí)符)流程
Indy-Plenum相關(guān)
錢包類主要數(shù)據(jù)結(jié)構(gòu)如下:
name -> str:id名嚎尤;
ids -> Dict[Identifier, IdData]:DID到IdData的映射,一個(gè)DID一個(gè)IdData伍宦;
idsToSigners -> Dict[Identifier, Signer]:DID到Signer的映射诺苹,一個(gè)DID一個(gè)Signer;
aliasesToIds -> Dict[Alias, Identifier]:Alias到DID的映射雹拄,一個(gè)DID對(duì)應(yīng)多個(gè)Alias收奔。
錢包類主要方法:
Encrypt/Decrypt:均使用 libsodium密碼庫(kù)的python封裝進(jìn)行加解密;
sign/verify:簽名和簽名驗(yàn)證方法都是基于libsodium的sign方法進(jìn)行的滓玖,使用signKey簽名坪哄,使用veryKey+DID進(jìn)行驗(yàn)證;
-
DID Create:
- 指定或產(chǎn)生Seed势篡,32byte翩肌;
- 根據(jù)Ed25519算法產(chǎn)生公私鑰對(duì) MSK,MPK;
- 再將產(chǎn)生的私鑰作為種子Seed禁悠,使用Ed25519念祭,生成新的公鑰VerkeyRaw,新的簽名私鑰signKey碍侦;
- 將verKeyRaw的前16字節(jié)進(jìn)行base58解碼粱坤,成為DID隶糕,后16字節(jié)為verKey。
- signKey站玄、verKey丟失時(shí)枚驻,將可以使用MSK再次重新生成。
Wallet storage:使用 jsonpickle 進(jìn)行JSON序列化和反序列化株旷,保存在本地再登。
Indy-node相關(guān)
? Domain Ledger的交易中的NYM:NYM交易主要實(shí)現(xiàn)創(chuàng)建新DID、對(duì)已存在的DID用戶進(jìn)行角色變更晾剖,DID Document就是對(duì)NYM交易進(jìn)行溯源锉矢,即可得到一份完整的DID Document;
- 角色:
None (common USER) 普通用戶
“0” (TRUSTEE)
“2” (STEWARD) 管理員
“101” (ENDORSER) 背書(shū)人
“201” (NETWORK_MONITOR) 網(wǎng)絡(luò)監(jiān)管者