专栏首页本体研究院本体技术视点 | 如何利用技术手段让“冒名顶替上大学”事件不再发生?

本体技术视点 | 如何利用技术手段让“冒名顶替上大学”事件不再发生?

近日,一则新闻吸引了社会各界的关注:

农家女被冒名顶替上大学追踪:顶替者在街道办上班已十余年

近日,山东冠县一农家女被冒名顶替上大学一事引发关注。目前冒名顶替者已被停职,2020年6月12日,冠县烟庄街道办事处相关工作人员对界面新闻证实,顶替者陈某某在该街道办事处审计所已工作十余年。(转载自界面新闻)

这样的事件让大众深感遗憾与痛心的同时,也从侧面反映出我们所生活的社会环境迫切需要强有力的信任场景来保证这样的事件不再出现。正如我们上一期文章ONT ID 2.0重磅发布:支持统一账户、学分和毕业凭证等实用场景所介绍的那样:

学生在申请奖学金或者工作实习机会时,一般会向奖学金或者工作实习机会的第三方提供学分/毕业情况,让第三方验证是否具备资格。

采用基于 ONT ID 的可验证凭证技术对学生学分或者毕业情况进行认证,可以使得第三方迅速地对学生学分情况进行验证,并以此判断是否满足相应资格。结合选择性披露技术,学生可以在不披露实际分数的情况下可以向第三方证明自己分数达到了第三方规定的条件,让第三方确信自己已经满足资格。

本期我们将详解 ONT ID 规范 v2.0。

摘 要

ONT ID 是本体基于 W3C 去中心化标识规范,使用区块链和密码学技术打造的去中心化身份框架,能快速标识和连接人、财、物、事,具有去中心化、自主管理、隐私保护、安全易用等特点。ONT ID 帮助用户充分保护其身份与数据的隐私和安全,赋予他们全面掌控自己的身份和数据的权利。

ONT ID 规范遵循 W3C DIDs 规范,并在此基础上进行定义扩展和功能扩展。

约定和术语

假定本文读者对 W3C DIDs 规范有一定程度的了解。

本文中使用的关键字:“必须 MUST”,“禁止 MUST NOT”,“要求 REQUIRED”,“应当SHALL”,“应当不 SHALL NOT”,“应该 SHOULD”,“不应该 SHOULD NOT”,“推荐 RECOMMENDED”,“可以 MAY”和“可选的 OPTIONAL”等遵循 IETF RFC 2119 规范的说明和解释。(https://www.ietf.org/rfc/rfc2119

ONT ID:既代表本体使用区块链和密码学技术打造的去中心化身份框架,也代表本体去中心化身份框架中的去中心化身份标识。

SHA256: 密码学哈希算法,属于 SHA-2中的一种,由美国美国国家安全局于2001年发布。

Base58:区块链中常见的一种特殊编码方式,在保持易读性的同时可进行数据压缩和编码校验,在 Bitcoin 中首先采用。

ABNF:扩展的巴科斯范式,包含一组推导规则。

ONT ID 格式

0

1

ONT ID 语法

ONT ID 是一种遵循 IETF RFC 3986 规范的 URI,应该由每个实体自己生成。

ONT ID 的生成遵循 W3C DIDs 规范。

ONT ID 的生成方式采用 ABNF 方式描述如下:

ontid        = "did:ont:" ontid-string
ontid-string = 1* idchar
idchar       = 1-9 / A-H / J-N / P-Z / a-k / m

其中,"did:ont:"表示 ONT ID 是遵循 W3C DIDs 规范并注册在本体区块链上的去中心化标识;idchar包含了 Base58编码字符集的所有字符。

ontid-string 必须遵循如下方法生成:

1. 生成20字节随机数。

2. 附加1字节标签位。在前一步生成的随机数前附加1字节标签位,即 data = VER || h;

3. 计算4字节校验位。对 data 计算两次 SHA256,并取结果前4字节作为校验,即checksum = SHA256(SHA256(data))[0:4];

4. 编码。对上述结果进行 Base58编码,即 ontid-string = Base58(data || checksum)。

上述过程中,|| 表示连接前后两个字节串。VER的推荐取值是23。

一个 ONT ID 示例如下:

did:ont:AderzAExYf7yiuHicVLKmooY51i2Cdzg72

0

2

URL 语法

ONT ID URL 的语法遵循 W3C DIDs 规范中关于 DID URL 的规定。

下面是 ONT ID URL 支持的语法。

ontid-url = "did:ont:"ontid-specific-id
          [ ";" param ] [ "/" path ]
          [ "?" query ] [ "#" fragment ]

更多信息请参考 W3C DIDs 规范中关于 param、path、query 和 fragment 等的规定。

ONT ID 注册和注销

ONT ID 必须在本体区块链上注册之后才能生效,并禁止同一个 ONT ID 重复注册

只有 ONT ID 的所有者或代理人才能将其注销。

某个 ONT ID 被注销后,其关联的一切数据包括密钥、代理人、属性及恢复人等都被删除,仅在本体区块链上保留 ONT ID 标识本身。

已注销的 ONT ID 无法继续使用,也不能再次注册启用。

ONT ID Document

每⼀个 ONT ID 都会对应到⼀个 ONT ID Document。

ONT ID Document是一种以 JSON-LD 形式对 ONT ID 相关信息进行序列化的方法,正如 W3C DIDs 规范中 DID Documents 的定义。

ONT ID Document 的结构如下:

{
  "@context": ["https://www.w3.org/ns/did/v1", "https://ontid.ont.io/did/v2"],
  "id": "did:ont:AderzAExYf7yiuHicVLKmooY51i2Cdzg72",
  "publicKey": [{...}],
  "authentication": [{...}],
  "controller": [{...}],
  "recovery": [{...}],
  "service": [{...}],
  "attribute": [{...}],
  "created": [{...}],
  "updated": [{...}],
  "proof": [{...}]
}

0

1

Context

ONT ID Document 必须包含@context 属性。

@context 其值必须是多个 URI 的有序集合,其中第一个 URI 的值必须为https://www.w3.org/ns/did/v1,第二个URI的值必须为https://ontid.ont.io/did/v2。具体参见W3C DIDs规范中的说明。

示例如下:

{
  "@context": ["https://www.w3.org/ns/did/v1","https://ontid.ont.io/did/v2"]
}

在实际应用过程中,W3C 和本体所提供的 context 里面的术语可能满足不了用户的需求,需要自己定义 context,此时可以使用 embedded context 进行扩展。

例如,需要为某个 ONT ID 新增一项附加属性,并为该属性的 type 值创建对应的 context,并将该 context 发布于所有使用者均可访问的 URI。在ONT ID Document 中将表示为:

{
  "attribute": [
    {
      "@context": {
        "some-type": "uri-of-the-context",
      },
      "id": "did:ont:some-ont-id#some-attribute",
      "type": "some-type",
      "value": "some-value"
    },
  ]
}

0

2

标识关联

ONT ID Document 必须包含 id 属性,以指定该 Document 关联的 ONT ID 标识。

id 的值必须为一个有效的 ONT ID。

{  "id": "did:ont:AderzAExYf7yiuHicVLKmooY51i2Cdzg72"}

0

3

公钥列表

ONT ID Document 可以包含 publicKey 属性,以指定该 ONT ID 关联的一组公钥。

公私钥对可以帮助 ONT ID 完成自主管理,权限分级,身份认证等功能。同一个 ONT ID 可以关联多个不同的公私钥对;同样,同一个公私钥对也可以管理多个不同的 ONT ID。

在注册到本体区块链上时,ONT ID应该绑定所有者的公钥。所有者自己持有对应的私钥,私钥应当妥善保管,防止泄漏。

publicKey 属性关联的每一个公钥对象必须包含的字段为 id,type,controller,encoding。

每个关联的公钥拥有自己的标识,用字段 id 进行指定。每个绑定的公钥按照关联顺序从1开始依次编号。id 的形式为:

did:ont:some-ont-id#keys-{index}

其中{index}即为该公钥的编号。

绑定的公钥可以被废除。已废除的公钥不可被再次启用,但仍占有原编号。

字段 type 的值为该公钥所对应的密码学算法。本体支持多种国际标准密码算法,如 ECDSA签名、EdDSA 签名以及 SM2 签名等。

字段 controller 定义了该公钥所对应私钥的持有者,其值必须为一个有效的 ONT ID,表示该公钥被此 ONT ID 所控制。

encoding 的 key 为该公钥所对应的编码格式,value 为该公钥采用该格式编码的结果。本体所支持的编码格式有 publicKeyPem, publicKeyHex 以及publicKeyBase58等。

一个具体的 Publickey 属性示例如下:

{
  "publicKey": [
    {
      "id": "did:ont:AderzAExYf7yiuHicVLKmooY51i2Cdzg72#keys-1",
      "type": "EcdsaSecp256r1VerificationKey2019",
      "controller": "did:ont:AderzAExYf7yiuHicVLKmooY51i2Cdzg72",
      "publicKeyHex": "02a545599850544b4c0a222d594be5d59cf298f5a3fd90bff1c8caa095205901f2"
    }
  ]
}

0

4

认证方式

ONT ID Document 采用可选的 authentication 属性指定认证方法。

ONT ID 允许用户添加认证属性,表示该 ONT ID 的持有者授权了一组认证方法来进行身份认证。

该部分继承自 W3C DIDs 规范。

一个具体示例如下:

{
  ...
  "authentication": [
    "did:ont:AderzAExYf7yiuHicVLKmooY51i2Cdzg72#keys-1",
    {
      "id": "did:ont:AderzAExYf7yiuHicVLKmooY51i2Cdzg72#keys-2",
      "type": "EEcdsaSecp256r1VerificationKey2019",
      "controller": "did:ont:AderzAExYf7yiuHicVLKmooY51i2Cdzg72",
      "publicKeyBaseHex": "03a835599850544b4c0a222d594be5d59cf298f5a3fd90bff1c8caa064523745f3"
    }
  ],
}

0

5

代为管理

在 ONT ID Document 中,采用可选的 controller 属性指定代理人。

一个 ONT ID 可以被其他 ONT ID 代理控制。如果需要指定代理人,必须在注册 ONT ID 到本体区块链上时指定。

代理人 ONT ID 拥有被代理 ONT ID 的注册、注销权限,并且可以修改 publicKey 和 authentication 属性。

特别地,当 ONT ID Document 中指定 controller 后,可以不指定 authentication。

代理人 ONT ID 必须是自主管理的。

代理人可以是一个 ONT ID,也可以是若干 ONT ID 组成的管理组。管理组能够设置复杂的门限控制逻辑,以满足不同的安全需求。例如,设置包含 n 个 ONT ID 的管理组,并设置该管理组的控制逻辑是最少 m(<=n)个ONT ID 共同签名才能进行操作。该设置以如下形式表示:

{
  "threshold": "m",
  "members": ["ID1", "ID2", ... , "IDn"]
}

进一步地,可以定义递归组合的控制逻辑,即组成员可以是 ONT ID,也可以是嵌套的管理组,如下所示:

{
  "threshold": "m1",
  "members": [
    "ID1",
    {
      "threshold": "m2",
      "members": ["ID2", ...]
    },
    ...
  ]
}

下面是一个具体示例,表示或者是 did:ont:AderzAExYf7yiuHicVLKmooY51i2Cdzg72,或者是 did:ont:AXjJnU1TJViks4KUGQruiXwkKznwVpz7Z9和did:ont:AKwf6DvKFSBxhsmhjGCvJgaxHvCEQmpZZv 一起才能进行代为管理。

"controller:" [
 {    "threshold": 1,    "members": [      "did:ont:AderzAExYf7yiuHicVLKmooY51i2Cdzg72",
     {        "threshold": 2,        "members": ["did:ont:AXjJnU1TJViks4KUGQruiXwkKznwVpz7Z9", "did:ont:AKwf6DvKFSBxhsmhjGCvJgaxHvCEQmpZZv"]
     },
     ...
   ]
 }
],

在操作被代理的 ONT ID 时,代理人 ONT ID 需提供符合控制逻辑的有效数字签名。

代理人可以为被代理 ONT ID 关联公钥,即设定 publickey,同时可以设定 authentication 属性,将其添加自主管理模式。自主管理的 ONT ID 无法添加代理控制人。

0

6

恢复机制

ONT ID Document 采用可选的 recovery 属性指定恢复人。

在 ONT ID 所有者意外丢失其相应密钥的情况下,恢复人可以帮助其重置密钥。恢复人能够为该 ONT ID 添加、废除 authentication 中的公钥,也可以更新恢复人设置。

只有自主管理的 ONT ID 才能设置其它 ONT ID 为其恢复人。

恢复人可以使用组管理的方式,规则同代理人的管理组。恢复人操作时需提供符合控制逻辑的有效数字签名。

下面是一个具体示例,表示ont:AXjJnU1TJViks4KUGQruiXwkKznwVpz7Z9或者did:ont:AKwf6DvKFSBxhsmhjGCvJgaxHvCEQmpZZv之一就进行恢复操作。

"recovery": [
  {
    "threshold": 1,
    "members": ["did:ont:AXjJnU1TJViks4KUGQruiXwkKznwVpz7Z9", "did:ont:AKwf6DvKFSBxhsmhjGCvJgaxHvCEQmpZZv"]
  }
],

0

7

服务信息

ONT ID Document 采用可选的 service 指定服务属性。

ONT ID 允许实体添加服务,用于指示该 ONT ID 相关的某项服务的信息,包括服务类型以及访问入口等。

该部分继承自 W3C DIDs 规范。

一个具体示例如下:

{
  ...
  "service": [
    {
      "id": "did:ont:AderzAExYf7yiuHicVLKmooY51i2Cdzg72#some-service",
      "type": "SomeServiceType",
      "serviceEndpint": "Some URL"
    }
  ]
}

0

8

附加属性

ONT ID Document 包含可选的 attribute 来关联 ONT ID 相关的一组属性。

ONT ID 的所有者或代理人可以为其添加、修改或删除附加属性。

每条属性必须包含 key,value,type 三个字段。其中:

  • key 作为属性的标识,
  • type 指示属性的类型,
  • value 则为属性的内容。

"attribute"中最多可以包含100条属性。

属性的字段有长度限制。其中 key 最长为80字节,type 最长为64字节,value 最长为512K 字节。

如did:ont:AderzAExYf7yiuHicVLKmooY51i2Cdzg72包含一个属性:

key: "some-attribute"
type: "some-type"
value: "some-value"

那么,在其 ONT ID Document 中将表示为

{
  "id": "did:ont:AderzAExYf7yiuHicVLKmooY51i2Cdzg72",
  "attribute" : [
    {
      "key": "some-attribute",
      "type": "some-type",
      "value": "some-value"
    },
  ]
}

附加属性的属性类型及其具体内容不在本规范的范畴内,由应用层自行定义。

一个具体属性示例如下:

{
  "attribute": [
    {
      "key": "age",
      "type": "number",
      "value": 18
    },
  ]
}

0

9

创建时间

ONT ID Document 应该包含 created 属性,以指定创建时间。

该部分继承自 W3C DIDs 规范。

一个具体示例如下:

{
  "created": "2018-06-30T12:00:00Z"
}

1

0

更新时间

ONT ID Document 应该包含 updated 属性,以指定更新时间。

该部分继承自 W3C DIDs 规范。

一个具体示例如下:

{
  "created": "2019-06-30T12:00:00Z"
}

1

1

完整性证明

ONT ID Document 可以包含 proof 属性,以证明该 ONT ID Document 的完整性。

该部分继承自 W3C DIDs 规范。

一个具体示例如下:

{
  "proof": {
    "type": "LinkedDataSignature2015",
    "created": "2020-02-02T02:02:02Z",
    "creator": "did:ont:AderzAExYf7yiuHicVLKmooY51i2Cdzg72#keys-1",
    "signatureValue": "QNB13Y7Q9...1tzjn4w=="
  }
}

目前,ONT ID 暂未实现完整性证明。

附录A

一个简单的ONT ID Document示例如下:

{
  "@context": ["https://www.w3.org/ns/did/v1", "https://ontid.ont.io/did/v2"],
  "id": "did:ont:AderzAExYf7yiuHicVLKmooY51i2Cdzg72",
  "publicKey": [
    {
      "id": "did:ont:AderzAExYf7yiuHicVLKmooY51i2Cdzg72#keys-1",
      "type": "EcdsaSecp256r1VerificationKey2019",
      "controller": "did:ont:AderzAExYf7yiuHicVLKmooY51i2Cdzg72",
      "publicKeyHex": "02a545599850544b4c0a222d594be5d59cf298f5a3fd90bff1c8caa095205901f2"
    }
  ],
    "authentication": [
    "did:ont:AderzAExYf7yiuHicVLKmooY51i2Cdzg72#keys-1"
  ]
}

参考文献

[W3C-DID]

Decentralized Identifiers (DIDs) v1.0. W3C. Mar 2020. Working Draft. URL: https://www.w3.org/TR/did-core/

[RFC2119]

Key words for use in RFCs to Indicate Requirement Levels. S. Bradner. IETF. March 1997. Best Current Practice. URL: https://tools.ietf.org/html/rfc2119

[RFC3986]

Uniform Resource Identifier (URI): Generic Syntax. T. Berners-Lee; R. Fielding; L. Masinter. IETF. JANUARY 2005. Standards Track. URL: https://tools.ietf.org/html/rfc3986

[BASE58]

The Base58 Encoding Scheme. Manu Sporny. IETF. December 2019. Internet-Draft. URL: https://tools.ietf.org/html/draft-msporny-base58

本文分享自微信公众号 - 本体研究院(ontologyresearch),作者:本体君

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-06-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 本体技术视点 | 如何运用数字身份进行转账?

    众所周知,ONT ID 是用户自治的身份,用户通过 ONT ID 可以管理自己的相关身份数据,比如 CFCA 的身份认证信息等。广泛来看,用户拥有的地址和数字资...

    本体Ontology
  • 本体技术视点 | 虚拟机中引用性动态语言对象模型思考

    Ontology 的 NeoVM 虚拟机新增加了 DCALL、HAS_KEY、KEYS 以及 VALUES 等几条新的指令。因此,基于 NeoVM 的引用性动态...

    本体Ontology
  • 本体技术视点 | 使用C++进行Wasm合约开发

    Ontology Wasm 自从上线测试网以来便受到了社区开发人员的极大关注。Ontology Wasm 的上线将使得业务逻辑复杂的 dApp 合约上链成本降低...

    本体Ontology
  • 开源|为什么要使用ns4_gear_idgen ID生成器?

    NS4系列包括4个开源模块,分别是:ns4_frame 分布式服务框架(详情点击查看:开源|ns4_frame分布式服务框架开发指南)、ns4_gear_idg...

    宜信技术学院
  • 分布式ID生成器 | 架构师之路

    一、需求缘起 几乎所有的业务系统,都有生成一个唯一记录标识的需求,例如: 消息标识:message-id 订单标识:order-id 帖子标识:tiezi-id...

    架构师之路
  • 分布式ID生成方法

    优点: (1)简单,使用数据库已有的功能 (2)能够保证唯一性 (3)能够保证递增性 (4)步长固定 缺点: (1)可用性难以保证:数据库常见架构是一主多从+读...

    日薪月亿
  • 分布式ID生成器的解决方案总结

    在互联网的业务系统中,涉及到各种各样的ID,如在支付系统中就会有支付ID、退款ID等。那一般生成ID都有哪些解决方案呢?特别是在复杂的分布式系统业务场景中,我们...

    Java技术栈
  • 大型互联网公司:常用的分布式ID方案总结!

    ID是数据的唯一标识,传统的做法是利用UUID和数据库的自增ID,在互联网企业中,大部分公司使用的都是Mysql,并且因为需要事务支持,所以通常会使用Innod...

    秃顶的Java程序员
  • SAP CRM产品主数据里的七种ID

    3实际上就是PRODUCT_ID了。除了4之外,其他6种ID都能作为alternative ID被查找到。

    Jerry Wang
  • python:爬虫入门

    直接上代码吧: 一、爬取某外卖平台的指定商家菜品信息 from urllib import request import json import random ...

    菩提树下的杨过

扫码关注云+社区

领取腾讯云代金券