Skip to content

跨链身份体系

zouxyan edited this page Jan 10, 2025 · 1 revision

跨链身份

介绍

BCDNS为AntChain Bridge提供了身份服务,通过签发各类身份证书,实现区块链域名申请、域名验证、Relayer互认等流程。

BCDNS会为AntChain Bridge提供域名证书、域名空间证书、Relayer证书、PTC证书和信任根证书。

证书结构介绍

证书的类型枚举可以参考代码,证书的基本结构可以参考代码

整体类图如下:

classDiagram
direction LR
class CrossChainCertificateTypeEnum {
<<enumeration>>
  +  BCDNS_TRUST_ROOT_CERTIFICATE
  +  DOMAIN_NAME_CERTIFICATE
  +  RELAYER_CERTIFICATE
  +  PROOF_TRANSFORMATION_COMPONENT_CERTIFICATE
}

class AbstractCrossChainCertificate {
   CrossChainCertificateTypeEnum type
   String version
   String id
   ObjectIdentity issuer
   byte[] credentialSubject
   IssueProof proof
   long expirationDate
   long issuanceDate
}
class IssueProof {
   byte[] rawProof
   byte[] certHash
   String sigAlgo
   String hashAlgo
}

class ObjectIdentity {
  - byte[] rawId
  - ObjectIdentityType type
}
class ObjectIdentityType {
<<enumeration>>
  +  X509_PUBLIC_KEY_INFO
  +  BID
}

ObjectIdentity "1" *--> "type 1" ObjectIdentityType 
AbstractCrossChainCertificate "1" *--> "type 1" CrossChainCertificateTypeEnum 
AbstractCrossChainCertificate "1" *--> "proof 1" IssueProof 
AbstractCrossChainCertificate "1" *--> "issuer 1" ObjectIdentity 
AbstractCrossChainCertificate  -->  IssueProof 
Loading

从上图,可以看到证书的类型,域名和域名空间证书,都作为DOMAIN_NAME_CERTIFICATE类型。

AbstractCrossChainCertificate为证书的主要实现,包含下列字段:

  • type:证书类型;
  • version:证书结构的版本号;
  • id:某一本证书的ID,由BCDNS签发时确定;
  • issuer:签发该证书的主体ID,使用类型ObjectIdentity表示,下文会有所介绍;
  • credentialSubject:持有该证书的主体信息,不同类型证书有不同的主体结构,下文会有所介绍;
  • proof:签发主体对该证书作出的证明,目前支持非对称密钥的签名;
  • expirationDate:该证书的超时的时间戳,以秒为单位。
  • issuanceDate:签发该证书的时间戳,以秒为单位。

主体结构介绍

上文中提到了主体ID类型ObjectIdentity,目前支持两种类型X509_PUBLIC_KEY_INFOBID

  • X509_PUBLIC_KEY_INFO

    类型使用了X.509 Subject Public Key Info作为主体ID,在rawId字段中存放了encoded的X.509 Subject Public Key Info,详细可以参考RFC5280

  • BID

    类型使用了星火链的DID方案。星火标识BID(Blockchain-based Identifier, BID),BID标识是基于W3C DID标准开发的新型分布式标识,任意实体可自主生成星火标识,在rawId字段中存放了encoded的BID。

证书的credentialSubject字段可以按照证书类型反序列化为不同的类型:

  • 域名主体

    classDiagram
    direction LR
    class DomainNameCredentialSubject {
       String version
       DomainNameTypeEnum domainNameType
       CrossChainDomain domainName
       CrossChainDomain parentDomainSpace
       ObjectIdentity applicant
       byte[] subject
    }
    
    class DomainNameTypeEnum {
    <<enumeration>>
      +  DOMAIN_NAME
      +  DOMAIN_NAME_SPACE
    }
    
    DomainNameCredentialSubject "1" *--> "type 1" DomainNameTypeEnum 
    
    Loading

    上图介绍了域名主体包含的字段:

    • version:该主体类型的版本号;
    • domainNameType:当前主体表达的类型,是域名的宣称还是域名空间的宣称;
    • domainName:域名或者域名空间的值;
    • parentDomainSpace:签发BCDNS的域名空间,规定根BCDNS的域名空间为空字符串,可见代码ROOT_DOMAIN_SPACE;l
    • applicant:主体ID;
    • subject:序列化的主体身份,根据主体ID类型,如果主体ID是X509_PUBLIC_KEY_INFO,则为空,如果是BID类型,则为BID文档(BID Document)内容,subject的主要作用是保存主体的公钥内容,BID文档的使用较为简单,主要是使用publicKey字段;
  • 域名空间主体

    域名空间和域名的主体结构相同,只有domainNameType不同,为DOMAIN_NAME_SPACE

    域名空间应当以点“.”开头,后接空间名字,比如‘’.web3“,如果是域名,则不应该以点开头。域名和域名空间的长度都不应该超过128字节,且建议使用小写英文字母表示,比如antchain.web3

  • Relayer主体

    classDiagram
    direction BT
    class RelayerCredentialSubject {
       String version
       String name
       ObjectIdentity applicant
       byte[] subjectInfo
    }
    
    Loading

    上图介绍了Relayer主体包含的字段:

    • version:该主体类型的版本号;
    • name:Relayer的名称,这里可以随意填写;
    • applicant:主体ID;
    • subject:序列化的主体身份;

    Relayer的运行需要依赖Relayer证书,详情请参考AntChain Bridge Relayer

  • PTC证书

    classDiagram
    direction LR
    class PTCCredentialSubject {
       String version
    	 String name
    	 PTCTypeEnum type
       ObjectIdentity applicant
       byte[] subjectInfo
    }
    
    class PTCTypeEnum {
    <<enumeration>>
      +  EXTERNAL_VERIFIER
      +  COMMITTEE
      +  RELAY_CHAIN
    }
    
    PTCCredentialSubject "1" *--> "type 1" PTCTypeEnum 
    
    Loading

    证明转换服务(PTC)会为AntChain Bridge 提供异构链跨链消息存在性验证服务,以及提供背书证明,PTC需要向BCDNS申请身份并注册信任根,对每条链都会提供第三方区块链信任锚(TP-BTA),以供跨链中的接收链验证跨链消息证明(TP-Proof)。

    目前计划支持多种类型的PTC,比如PTCTypeEnum中的委员会(COMMITTEE)、区块链(RELAY_CHAIN)、外部服务(EXTERNAL_VERIFIER),区块链类型可以看作常见的中继链跨链方案。

  • 信任根证书

    classDiagram
    direction BT
    class BCDNSTrustRootCredentialSubject {
       String name
    	 ObjectIdentity bcdnsRootOwner
       byte[] bcdnsRootSubjectInfo
    }
    
    Loading

    最后是持有根域名的BCDNS信任根主体,上面字段包含主体的name,以及主体ID和主体信息。

    域名空间证书用于表示某个BCDNS持有该域名空间,该空间不可以是根空间,这些BCDNS为下级BCDNS,而根BCDNS为最高级BCDNS,比如当前的星火链BCDNS,上级BCDNS可以给下级签发域名空间证书,每个BCDNS可以签发自己空间的区块链域名。

序列化介绍

跨链证书的序列化使用了AntChain Bridge 提供的一个TLV序列化工具(使用介绍)。

跨链证书支持保存为PEM格式,证书对象可以通过CrossChainCertificateUtil转化至PEM格式,比如:

-----BEGIN BCDNS TRUST ROOT CERTIFICATE-----
AADZAQAAAAABAAAAMQEABAAAAHRlc3QCAAEAAAAAAwA7AAAAAAA1AAAAAAABAAAA
AQEAKAAAAGRpZDpiaWQ6ZWZiVGh5NXNiRzdQM21GVXAyRVdONW9RR1g2TFVHd2cE
AAgAAAChN2RlAAAAAAUACAAAACFrRWcAAAAABgDQAAAAAADKAAAAAAADAAAAYmlm
AQA7AAAAAAA1AAAAAAABAAAAAQEAKAAAAGRpZDpiaWQ6ZWZiVGh5NXNiRzdQM21G
VXAyRVdONW9RR1g2TFVHd2cCAHoAAAB7InB1YmxpY0tleSI6W3sidHlwZSI6IkVE
MjU1MTkiLCJwdWJsaWNLZXlIZXgiOiJiMDY1NjZhZjY2NWVlNTUwNjM1ZTk4Mzc1
YzdiMzg4NzZhMmNjMzFlM2E5ZDgxODk1N2U0NmEyNGEwZjI1YTc0YTQ0Y2NlIn1d
fQcAiAAAAAAAggAAAAAAAwAAAFNNMwEAIAAAALKKKxzUTalyw2vp96hOJ3TuDsNZ
/pjgltTL+ip2bsRNAgAHAAAARWQyNTUxOQMAQAAAAMsFd4D9Gf3hiIebiq5MFTpw
IV4AUtT9d+Y8gRK/kmNySzlJ32Shw3FNj8Uvy3yjBxjO6vKOWH5Jhu936zMWOgk=
-----END BCDNS TRUST ROOT CERTIFICATE-----