Indy架构与DID流程

Indy架构与DID流程

1、架构

总架构

HBB-Indy-Sovrin_ARM_v0.27.png

在水平方向上,INDY ARM分为4个透视图:

  • 项目和发行:

    • Hyperledger Indy-SDK:客户端交互接口,支持Java、Python、iOS、NodeJS、.Net、Rust
    • Hyperledger Indy-Agent(被Hyperledger Aries取代):包括用于区块链客户端的共享加密钱包(安全存储技术), 以及用于允许这些客户端之间进行账外交互的通信协议 。
    • Hyperledger Indy-Crypto:Hyperledger Indy组件的共享加密库。
    • DIF Universal-Resolver:标识符解析器,可与任何分散式标识符系统(包括分散式标识符(DID))一起使用。
    • Hyper Indy-Node:实现了基于Plenum BFT共识协议的分布式账本,以及节点的功能。主要包括:处理读写请求、定义交易类型以及交易分类存储。
  • 生态系统(涉及业务、应用、技术)

  • DID数据模型

    • DID

      • URL scheme identifier (did)

      • Identifier for the DID method

        (DID method 定义标识符的格式和生成规则)

      • DID method-specific identifier

      例:did:sov:8a9F8ZmxuvDqRiqqY29x6dx9oU4qwFTkPbDpWtwGbdUsrCD

    • Verinym:创建账本已知的DID,合法法身份或身份所有者的唯一标识符。

    • Pseudonym:第二身份,隐藏真实身份。

    • NYM:用于创建Verinym的交易被称为NYM交易,被用来创建新的 DIDs,设置或者调换验证密钥(verification key),设置和改变角色(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文档是对一个DID实体的JSON-LD序列化,包括:

    DID标识符、一组加密材料(公钥)、一组加密协议、一组服务端点、时间戳、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主要分为业务层(Business Layer)、应用层(Applications Layer)和技术层(Technology Layer)。

  • 业务层:凭证发行(Issue)、凭证存储(Local Store)、数据请求(Request)、凭证披露(Present)、凭证验证(Verify)、凭证撤销(Revocate)用户注册登录等。

  • 应用层:提供DID服务、提供凭证服务、提供特定业务服务。( 由Indy-Agent/Aries 和 Indy-SDK 支撑)

  • 技术层

    • Cloud Agent

      由Indy-Agent项目、Indy-SDK项目和DIF Universal-Resolver项目作支撑,主要功能是提供对Edge Agent的服务,直接与Ledger层进行交互,将请求结果返回到应用层。

      Indy-SDK项目调用Ledger层的API,实现直接与区块链进行交互;

      Indy-Agent项目调用Indy-SDK的钱包API,提供代理功能组件,并提供凭证注册组件(Credential Registry Node Component)实现凭证的注册;

      DIF Universal-Resolver项目提供DID的解析器组件,直接与Ledger层交互,解析出DID。

    • Ledger

      由 Indy-Node 和 Indy-Plenum 两个项目实现,主要功能是实现Indy区块链的功能。

      在Ledger组件中默认使用RocksDB和LevelDB进行KV存储,且使用Merkle Patricia Trie 存储账本状态。每个节点均维护四个账本:

      • Audit Ledger:主要负责与其他三个Ledger同步,为失败节点恢复数据,并对账本正确性进行审计;

      • Pool Ledger:主要维护池中节点的信息(Membership);

      • Domain Ledger:为主要账本,记录交易;

      • Config Ledger:是Pool节点的配置账本。

      详细请参考:https://hyperledger-indy.readthedocs.io/projects/plenum/en/latest/storage.html

2、实现DID(分布式标识符)流程

Indy-Plenum相关

钱包类主要数据结构如下:

  • name -> str:id名;

  • ids -> Dict[Identifier, IdData]:DID到IdData的映射,一个DID一个IdData;

  • idsToSigners -> Dict[Identifier, Signer]:DID到Signer的映射,一个DID一个Signer;

  • aliasesToIds -> Dict[Alias, Identifier]:Alias到DID的映射,一个DID对应多个Alias。

钱包类主要方法:

  • Encrypt/Decrypt:均使用 libsodium密码库的python封装进行加解密;

  • sign/verify:签名和签名验证方法都是基于libsodium的sign方法进行的,使用signKey签名,使用veryKey+DID进行验证;

  • DID Create:

    • 指定或产生Seed,32byte;
    • 根据Ed25519算法产生公私钥对 MSK,MPK;
    • 再将产生的私钥作为种子Seed,使用Ed25519,生成新的公钥VerkeyRaw,新的签名私钥signKey;
    • 将verKeyRaw的前16字节进行base58解码,成为DID,后16字节为verKey。
    • signKey、verKey丢失时,将可以使用MSK再次重新生成。
  • Wallet storage:使用 jsonpickle 进行JSON序列化和反序列化,保存在本地。

Indy-node相关

​ Domain Ledger的交易中的NYM:NYM交易主要实现创建新DID、对已存在的DID用户进行角色变更,DID Document就是对NYM交易进行溯源,即可得到一份完整的DID Document;

  • 角色:
    • None (common USER) 普通用户

    • “0” (TRUSTEE)

    • “2” (STEWARD) 管理员

    • “101” (ENDORSER) 背书人

    • “201” (NETWORK_MONITOR) 网络监管者

主要关系

Indy-R.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,657评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,662评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,143评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,732评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,837评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,036评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,126评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,868评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,315评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,641评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,773评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,859评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,584评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,676评论 2 351