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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。