Indy架構(gòu)與DID流程

Indy架構(gòu)與DID流程

1、架構(gòu)

總架構(gòu)

HBB-Indy-Sovrin_ARM_v0.27.png

在水平方向上娩鹉,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)管者

主要關(guān)系

Indy-R.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末齿尽,一起剝皮案震驚了整個(gè)濱河市沽损,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌雕什,老刑警劉巖缠俺,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件显晶,死亡現(xiàn)場(chǎng)離奇詭異贷岸,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)磷雇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門偿警,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人唯笙,你說(shuō)我怎么就攤上這事螟蒸。” “怎么了崩掘?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵七嫌,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我苞慢,道長(zhǎng)诵原,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任挽放,我火速辦了婚禮绍赛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘辑畦。我一直安慰自己吗蚌,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布纯出。 她就那樣靜靜地躺著蚯妇,像睡著了一般敷燎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上侮措,一...
    開(kāi)封第一講書(shū)人閱讀 49,784評(píng)論 1 290
  • 那天懈叹,我揣著相機(jī)與錄音,去河邊找鬼分扎。 笑死澄成,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的畏吓。 我是一名探鬼主播墨状,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼菲饼!你這毒婦竟也來(lái)了肾砂?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤宏悦,失蹤者是張志新(化名)和其女友劉穎镐确,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體饼煞,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡源葫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了砖瞧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片息堂。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖块促,靈堂內(nèi)的尸體忽然破棺而出荣堰,到底是詐尸還是另有隱情,我是刑警寧澤竭翠,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布振坚,位于F島的核電站,受9級(jí)特大地震影響斋扰,放射性物質(zhì)發(fā)生泄漏渡八。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一褥实、第九天 我趴在偏房一處隱蔽的房頂上張望呀狼。 院中可真熱鬧,春花似錦损离、人聲如沸哥艇。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)貌踏。三九已至十饥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間祖乳,已是汗流浹背逗堵。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留眷昆,地道東北人蜒秤。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像亚斋,于是被迫代替她去往敵國(guó)和親作媚。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348