1. 关于


BIF DID(以下简称BID)方法规范符合W3C社区小组当前发布的DID规范中的要求。有关DID和DID方法规范的更多信息,请参阅DID入门DID规范

2. 摘要


为实体和数字对象等提供分布式标识和身份服务,旨在构建一套去中心化的、权利下放的、数据安全、隐私得到保护的并且好用的、灵活的标识符系统,能够为人、企业、设备和数字对象之间建立可信连接和价值交互,实现万物互联、信任万物的愿景。

BID采用去中心化的身份标识协议,具有去中心化、自主管理、隐私保护、安全易用等特点。每⼀个BID都会对应⼀个BID描述对象(BID DDO)。

3. BID 命名空间


标识此DID方法的method name 是: bid

使用此方法的DID必须以前缀 did:bid 开头。根据DID规范,此字符串必须为小写。在前缀之后的DID的剩余部分由特定算法生成。

4. 适用系统


这种DID方法适用于BIF网络,从BIF发布开始正式使用。

5. BID标识符


BID方案由以下ABNF定义:

bif-did = "did:bid:" idstring *(":" subnamespace)
idstring = 12(base58char)
subnamespace = ALPHA *(ALPHA / DIGIT / "_" / "-")

所有BID使用椭圆曲线加密算法随机生成公钥,然后对公钥做哈希值并取前12位加上did:bid组成

举个例子:did:bid:6cc796b8d6e2fbebc9b3cf9e

6. BID DDO规范


BID对应的身份描述对象DDO存储在BIF区块链上,由DDO的控制人写入到区块链,并向所有用户开放读取。

DDO规范包含如下信息:

  • Name:bid标识符昵称,为了提高bid标识符的易用性特别设置,在客户端使用时可用该昵称代替bid标识符

  • publicKey:用户用于身份认证的公钥信息,包括公钥id、公钥类型、公钥对应的BID标识符,授权范围(如果该值为all,最该公钥可对bid文档做任何操作);

  • authentication:用户身份认证列表信息,包含认证类型type,认证时使用的公钥,可信声明ID

  • Attributes:用户填写的个人信息值(例如:{type:age,value:22})

  • isEnable: 该BID是否启用

举个例子:

{
  "@context": "https://w3id.org/future-method/v1",
  "id": "did:bid:DaogpsaKqKMe4nzPy4Aq",
  "name":"shiweijun",
  "publicKey": [{
    "id": "did:bid:DaogpsaKqKMe4nzPy4Aq#keys-1",
    "type": "RsaVerificationKey2018",
    "controller": "did:bid:DaogpsaKqKMe4nzPy4Aq",
    "authorizations": ["all"],
    "bid": " did:bid:DaogpsaKqKMe4nzPy4Aw"
  }, {
    "id": "did:bid:DaogpsaKqKMe4nzPy4Aq#keys-3",
    "type": "Ieee2410VerificationKey2018",
    "controller": "did:bid:DaogpsaKqKMe4nzPy4Aq",
    "bid": " did:bid:DaogpsaKqKMe4nzPy4An"
  }],
  "authentication": [{
    "type": "ED25519SigningAuthentication",
    "publicKey": "did:bid:DaogpsaKqKMe4nzPy4Aq#keys-1",
    "proofId":"c1cb770ac94000d946e583d13ea310"
            }],
  "Attributes":[{
        "type": "age",
        "value":21
   }],
   "isEnable":true,
   "createTime":1561945638,
   "updateTime":1561945638
}

6.1 BID 方法


BIdContract是在BIF区块链平台上BID协议的智能合约实现。借助BIdContract合约,用户可以管理自己的公钥列表、修改自己的个人资料、设置昵称等操作。

设置昵称

用户调用SetBidName方法进行设置和更新bid昵称。只有authorizations=all的公钥才能修改

bool SetBidName(string name);

name:bid昵称,如果name为空,则昵称字段默认为bid标识符

查询

查询身份信息,根据bid或者昵称name查询用户的DID文档信息,返回值为DID文档的json串

byte[] findDDOByBid(string type,string value)

参数:

  • ​ type 传入的值的类型 0:bid ,1:name
  • ​ Value:传入的值

授权

BID支持用户授权控制,即用户可以授权其他bid对当前bid进行控制,例如授权其他bid更新DDO文档等操作。用户调用addBid方法为其他bid授权,只有authorizations=all的公钥才能进行添加

 bool addPublicKey(string type,string bid,string authorizations)

参数:

  • type: 传入的bid产生时所用的加密方法,例如:RSA,ECC
  • bid:传入的BID值

  • authorizations:为改公钥的授予的权限

取消授权

用户调用deleteBid方法取消对其他BID的授权,只有authorizations=all的公钥才能进行取消该授权,获得授权账户不可以自行取消授权

 bool deletePublicKey(string bid)

参数:bid:传入的BID值

添加认证凭证

BID支持用户进行多源身份认证,认证结束后用户可以将可信声明的摘要信息加入DDO文档,便于后续验证和管理。用户调用addProof方法添加可信声明信息,只有authorizations=all的公钥才能进行添加

  bool addProof(string type,string proofId)

参数:

  • type:传入的多源认证的类型,例如:0:基础身份认证(公安认证),1:学历认证,2:护照认证,3:微信认证等
  • proofId:可信声明在链上存储的ID编号

删除认证凭证

用户调用deleteProof方法删除可信声明信息,只有authorizations=all的公钥才能进行添加

bool deleteProof(string proofId)

参数:proofId:可信声明在链上存储的ID编号

添加属性

用户调用addAttr方法添加个人属性信息

bool addAttr(string key,string value)

参数:

  • type: 传入属性的key,例如:age
  • value:传入的属性值

删除属性

用户调用deleteAttr方法删除个人属性信息

 bool deleteAttr(string type)

参数:type: 传入属性的key,例如:age

启用

用户调用enable方法启用该bid,只有authorizations=all的公钥才能进行启用

  bool enable()

禁用

用户调用disable方法禁用该bid,只有authorizations=all的公钥才能进行禁用

  bool disable()

7. 安全与隐私保护

7.1 安全

BID 方法至少考虑以下安全风险:

  • 防止DDOS攻击

​ BID基于BIF区块链系统,天然防止DDOS攻击

  • 防隐私数据窃取攻击

​ 在BID中所有的涉及用户隐私的数据都保存在用户本地,链上以及公开数据只有hash值或者通过其他算法生成的字符串,其他攻击者拿到该数据并不能反推出任何用户隐私数据

  • 共识安全

​ 为了确保区块链节点的稳定性,BIF使用DPOS+IBFT双层共识算法

7.2 隐私保护

​ 为了保护用户隐私数据安全,BID除了将所有涉及隐私数据保存在客户本地客户端外,还在原先公私钥的基础上添加zk-snarks零知识证明算法以及C-L签名算法来加强保护。在各种安全措施保护下,用户隐私数据不会上链以及泄露,上链的部分数据也不会反推出个人信息。