美文网首页
Indy架构与DID流程

Indy架构与DID流程

作者: Dakini_Wind | 来源:发表于2020-09-13 11:21 被阅读0次

    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

    相关文章

      网友评论

          本文标题:Indy架构与DID流程

          本文链接:https://www.haomeiwen.com/subject/zxfwektx.html