2.BID标识符

BID(Blockchain-based ID)是基于星火·链网区块链基础设施构建的新型分布式标识体系。它符合W3CDID规范,采用密码学、数字身份、区块链、隐私计算等技术,实现标识自注册、自主管理,具有永久性、全球可解析、身份可验证和分散性的特点,主要是面向实体(包括人、物、组织)和数字对象,可用于拥有者证明其对BID的控制权及身份验证功能,而不需要依赖其他外部组织。

2020年,BID已成功写入W3C DID 注册表,同时BID通用解析器驱动程序已完成研发并被DIF通用解析器合并,目前BID标识体系已具备全球解析服务能力。

2.1 什么是BID

星火标识BID是星火·链网的数据载体,也是星火链底层支持的原生地址,同时BID还是分布式身份标识符DID的一个method

BID的组成结构如下:

  • 前缀Prefix

    BID的前缀,为固定字符串“did:bid:”,其中did:bid小写。

  • ACSN(Autonomous Consensus System Number),简称AC号

    小写字母和数字组成的四位代码,星火链主链上的BID没有AC号,子链上的BID在前缀后缀之间增加子链的AC号,用于区分同一私钥控制的同一账户在不同子链上的地址。

    AC号是星火·链网中代表子链合法性的唯一代码,是由骨干节点申请超级节点签发的子链身份代码(简称链码)。链码申请时,骨干节点需要递交子链所属行业、子链名称、slogen、介绍、设备指纹信息、路由地址(包括设备IP、端口)等,超级节点审核通过后向骨干节点签发带有超级节点签名的链码,子链通过AC号生成其BID标识,实现整个链群中的寻址功能。

  • 加密类型

    生成BID原始公私钥对的加密算法类型,用一个小写字母表示,目前支持的加密类型有国际密码算法ED25519Secp256k1和国密算法SM2,具体加密类型和公私钥对加密算法的映射关系如下表:

    加密类型

    公私钥支持算法

    ‘e’

    ED25519

    ‘z’

    SM2

    ‘s’

    Secp256k1

    其他小写字母

    预留待扩展

  • 编码类型

    后缀的编码算法和截取公钥哈希的长度,用一个小写字母表示,目前支持Base58Bech32Base64三种编码算法,截取公钥哈希的长度为22字节。具体编码方式和公钥哈希长度和编码类型的映射关系见下表:

    编码类型

    编码方式

    截取公钥哈希长度

    ‘f’

    Base58

    22

    ‘s’

    Base64

    22

    ‘t’

    Bech32

    22

    其他小写字母

    预留待扩展

    预留待扩展

  • 后缀

    公钥经过哈希算法之后截取, 然后再进行编码后得到的字符串,不同的编码方式生成的后缀长度和格式不同。编码类型为‘t’生成的后缀字母全为小写,其他两种类型生成的字母区分大小写。

    不同类型的编码方式生成的后缀长度不同,以Base58编码方式生成的后缀长度为22-31字节,Base64编码方式生成的后缀长度长度为32字节,Bech32编码方式生成的后缀长度长度为42字节。

    星火链BID地址的包括前缀、AC号、加密类型、编码类型、后缀,最终的长度范围为32-57个字节。

2.2 BID标识生成流程描述

下图是BID标识生成流程图:

144979478-155a548a-59ad-4282-a8de-075da2e28fbb

第一步,生成原始公私钥对

根据加密算法类型生成原始的公私钥对。

第二步,计算原始公钥的哈希

根据第一步生成的原始公私钥对,对原始公钥进行哈希运算,得到一个固定长度的输出摘要(256-bit/32-Byte)。原始公私钥对的生成算法不同,对应的哈希算法也不同,具体如下:

  1. SM2对应的哈希算法是SM3

  2. ED25519或者Secp256k1对应的哈希算法是SHA-256

第三步,生成编码

根据编码类型得到要截取的哈希长度和编码算法类型,截取上一步生成的哈希,然后进行编码生成相应的字节数组。

第四步,添加编码类型

在上一步编码完成之后的字节数组前面添加编码类型,生成新的字节数组。

第五步,添加加密算法类型前缀

在上一步的字节数组前面添加加密类型,生成新的字节数组。

第六步,添加AC号

若生成的是星火链的BID,跳过这一步;若生成的为子链的BID,在上一步的字节数组前面添加相应的AC号 + ‘:’

第七步,添加Prefix前缀

Prefix是个固定字符串值"did:bid:",上一步的结果加上此前缀后即为BID的最终值。

2.3 BID私钥生成流程描述

下图是BID私钥生成流程图:

144979803-b36d00df-b93c-47bd-be7a-2153770fb1a9

第一步,生成原始公私钥对

根据加密算法类型生成原始的公私钥对。此步骤没有具体列出,具体请参见BID标识生成流程描述中的第一步

第二步,添加前缀地址编码类型

在原始私钥前添加地址编码类型前缀,目前支持的地址编码类型请参见2.1 什么是BID正文中介绍的编码类型。

注意:此地址编码类型为BID标识编码类型,非生成私钥的最后一步Base58编码类型,两者并无直接相关关系。

第三步,添加前缀加密类型

上一步生成的结果基础上添加前缀加密类型,目前支持的加密编码类型请参见2.1 什么是BID正文中介绍的加密类型。

第四步,添加前缀Prefix

第三步的结果之上再次添加前缀PrefixPrefix是三个字节0x180x9E0X99,此固定字符串在Base58编码后生成固定字符串(pri),目的是为了方便用户观察和使用。

第五步,Base58编码

经过前四个步骤后,得到一个新的字符数组。对这个字符数组进行Base58编码后即得到最终的私钥。

2.4 BID公钥生成流程描述

下图是BID公钥生成流程图:

144980084-d4108946-df53-41e8-a6d4-43e01bb656ae

第一步,生成原始公私钥对

根据加密算法类型生成原始的公私钥对。此步骤没有具体列出,具体请参见BID标识生成流程描述中的第一步

第二步,添加前缀地址编码类型

在原始公钥前添加地址编码类型前缀,目前支持的地址编码类型请参见2.1 什么是BID正文中介绍的编码类型。

注意:此地址编码类型为BID标识编码类型,非生成私钥的最后一步Base16编码类型,两者并无直接相关关系。

第三步,添加前缀加密类型

上一步生成的结果基础上添加前缀加密类型,目前支持的加密编码类型请参见2.1 什么是BID正文中介绍的加密类型。

第四步,添加前缀Prefix

第三步的结果之上再次添加前缀PrefixPrefix是一个字节,值为0xb0,目的是为了方便用户观察和使用。

第五步,Base16编码

经过前四个步骤后,得到一个新的字符数组。对这个字符数组进行Base16编码后即得到最终的公钥。