#tetcoin #blockchain #framework #crypto

noble-did

DID 库提供了 DIDs 管理功能。

显示软件包…

1 个不稳定版本

0.1.0 2022年4月23日

#15#tetcore

无许可证

11KB

Tetcore DID Noble

DID 库提供了 DIDs 管理功能。它使用一个通用的身份注册处,其中所有所需数据都与地址相关联。它使创建可携带、持久、隐私保护和个人身份成为可能。

注意:此库旨在演示目的,未经审计,不适合生产使用。

自主身份

去中心化身份或自主身份是一种新方法,其中除了你之外,没有人拥有或控制你的数字身份状态。

自主身份的一些继承优势包括

  • 无缝身份验证
  • 非托管登录解决方案
  • 对关键基础设施的更强保护
  • 保护物联网

DID

去中心化标识符(DIDs)是一种新的标识符,用于提供可验证的去中心化数字身份。这些新标识符旨在使 DID 的控制者能够证明对它的控制,并且可以独立于任何 集中式注册、身份提供者或证书颁发机构 实现。DIDs 是 URL,它们将 DID 主语与 DID 文档相关联,允许与该主语进行可信交互。DID 文档是简单的文档,描述了如何使用该特定 DID。每个 DID 文档都可以表达加密材料、验证方法或服务端点,这提供了一套机制,使 DID 控制者能够证明对 DID 的控制。服务端点使与 DID 主体的可信交互成为可能。 - DID - W3C 社区贡献者

测试

执行模块测试

cargo test -p pallet-did

关于此库

此注册处允许将各种目的的签名委托给外部管理的密钥对。这允许账户或智能合约在链上以及链下或支付通道中通过临时或永久的委托人表示。

身份标识符

无论账户是否为密钥对或智能合约,任何账户都视为账户标识符。身份无需注册。

身份所有权

每个身份都有一个地址,该地址维护对其的最终控制权。默认情况下,每个身份由其自身控制。只有一个身份所有者。更高级的所有权模型可以通过多签名账户管理。

查找身份所有权

通过调用 identity_owner(identity: &T::AccountId) 函数来验证身份的所有权。该函数返回当前身份所有者的地址。

更改身份所有权

账户所有者可以通过调用可调用的 change_owner(origin, identity: T::AccountId, new_owner: T::AccountId) 函数来随时替换自己。

委托人

委托人是地址,在特定时间内被委托代表身份执行功能。

有效性

委托人将过期。过期时间由应用程序特定,并取决于身份所有者的安全要求。有效性通过从添加委托人的时间开始计算区块数来设置。

查找委托人

您可以使用 valid_delegate(identity: &T::AccountId, delegate_type: &Vec<u8>, delegate: &T::AccountId) 函数检查地址是否是某个身份的委托人。它取决于该地址是否是给定类型的有效委托人。

添加委托人

身份可以分配多个委托人来管理代表他们进行特定目的的签名。账户所有者可以调用 add_delegate(origin, identity: T::AccountId, delegate: T::AccountId, delegate_type: Vec<u8>, valid_for: T::BlockNumber) 函数。

撤销委托人

可以通过调用 revoke_delegate(origin, identity: T::AccountId, delegate_type: Vec<u8>, delegate: T::AccountId) 函数手动撤销委托人。

添加属性

这些属性使用 add_attribute(origin, identity: T::AccountId, name: Vec<u8>, value: Vec<u8>, valid_for: T::BlockNumber) 函数设置。

撤销属性

这些属性使用 revoke_attribute(origin, identity: T::AccountId, name: Vec<u8>) 函数来撤销。

链下属性

一个身份可能需要发布一些仅用于链下但仍然需要使用区块链的安全优势的信息。这可以通过使用 AttributeTransaction 结构对链下交易进行签名,并通过执行 execute(origin, transaction: AttributeTransaction<T::Signature, T::AccountId>) 函数来在链上更新它。

DID 文档

DID 文档是一组数据,用于描述 DID 的主题,包括 DID 主题可以使用以进行身份验证和证明其与 DID 关联的机制,例如公钥和匿名生物识别。DID 文档还可能包含其他描述主题的属性或声明。这些文档是基于图的数据结构,通常使用 JSON-LD 表达,但也可以使用其他兼容的图数据格式。 DID - 文档

要创建 DID-文档,需要 DID 解析器 从注册表中获取所有信息并验证凭证。 DID 解析器是 DID 堆栈中的一个独立组件。

不同项目之间兼容性的 DID 文档示例

Substrate

{
   "@context":"https://w3id.org/did/v1",
   "id":"did:substrate:5HDx7jPsiED6n47eNfERrBBRHZb59jVW6UMZZMTSBpikzvhX",
   "publicKeys":[
      {
         "id":"did:substrate:5HDx7jPsiED6n47eNfERrBBRHZb59jVW6UMZZMTSBpikzvhX#owner",
         "owner":"did:substrate:5HDx7jPsiED6n47eNfERrBBRHZb59jVW6UMZZMTSBpikzvhX",
         "type":"Secp256k1VerificationKey2018",
         "publicKeyHex":"e43a60dbfc251a3a835b45b172bcb49243ed56f820ca89a1c746143c1ab9565d",
         "address":"5HDx7jPsiED6n47eNfERrBBRHZb59jVW6UMZZMTSBpikzvhX"
      },
      {
         "id":"did:substrate:5HDx7jPsiED6n47eNfERrBBRHZb59jVW6UMZZMTSBpikzvhX#signingKey#delegate-1",
         "type":"Sr25519VerificationKey2018",
         "publicKeyHex":"dea36bf1a0c198afd259633c2e70b502b19577cc5133760ac569ea6fb4d3b977",
         "address":"5H6d2vR8iqQRANBe7bNegFbEiEJgeCKid4VhS3Pg52VUEqeM"
      },
      {
         "id": "did:substrate:5HDx7jPsiED6n47eNfERrBBRHZb59jVW6UMZZMTSBpikzvhX#delegate-2",
         "type": "RSAVerificationKey2018",
         "owner": "did:substrate:5HDx7jPsiED6n47eNfERrBBRHZb59jVW6UMZZMTSBpikzvhX",
         "publicKeyPem": "-----BEGIN PUBLIC KEY...END PUBLIC KEY-----\r\n",
      }
   ],
   "service": [
      {
         "id": "did:substrate:5HDx7jPsiED6n47eNfERrBBRHZb59jVW6UMZZMTSBpikzvhX#openid",
         "serviceEndpoint":"https://openid.example.com/",
         "type":"OpenIdConnectVersion1.0Service"
      }
   ],
   "authentication":[
      {
         "type":"Secp256k1SignatureAuthentication2018",
         "publicKey":"did:substrate:5HDx7jPsiED6n47eNfERrBBRHZb59jVW6UMZZMTSBpikzvhX#owner",
      }
   ],
   "updated":"2019-06-03T06:41:39.723Z"
}

uPort

{
   "@context":"https://w3id.org/did/v1",
   "id":"did:ethr:0xb9c5714089478a327f09197987f16f9e5d936e8a",
   "publicKey":[
      {
         "id":"did:ethr:0xb9c5714089478a327f09197987f16f9e5d936e8a#owner",
         "type":"Secp256k1VerificationKey2018",
         "owner":"did:ethr:0xb9c5714089478a327f09197987f16f9e5d936e8a",
         "ethereumAddress":"0xb9c5714089478a327f09197987f16f9e5d936e8a"
      }
   ],
   "authentication":[
      {
         "type":"Secp256k1SignatureAuthentication2018",
         "publicKey":"did:ethr:0xb9c5714089478a327f09197987f16f9e5d936e8a#owner"
      }
   ]
}

3Box

{
   "@context":"https://w3id.org/did/v1",
   "id":"did:3:zdpuAt4qH8ur3vHpVrP1xb7rtJuyVUVbRiGatkkVcJZRgAXDf",
   "publicKeys":[
      {
         "id":"did:3:zdpuAt4qH8ur3vHpVrP1xb7rtJuyVUVbRiGatkkVcJZRgAXDf#signingKey",
         "type":"Secp256k1VerificationKey2018",
         "publicKeyHex":"03fdd57adec3d438ea237fe46b33ee1e016eda6b585c3e27ea66686c2ea5358479"
      },
      {
         "id":"did:3:zdpuAt4qH8ur3vHpVrP1xb7rtJuyVUVbRiGatkkVcJZRgAXDf#encryptionKey",
         "type":"Curve25519EncryptionPublicKey",
         "publicKeyBase64":"AtF8hCxh9h1zlExuOZutuw+tRzmk3zVdfA=="
      },
      {
         "id":"did:3:zdpuAt4qH8ur3vHpVrP1xb7rtJuyVUVbRiGatkkVcJZRgAXDf#managementKey",
         "type":"Secp256k1VerificationKey2018",
         "ethereumAddress":"0xb9c5714089478a327f09197987f16f9e5d936e8a"
      }
   ],
   "authentication":[
      {
         "type":"Secp256k1SignatureAuthentication2018",
         "publicKey":"did:3:zdpuAt4qH8ur3vHpVrP1xb7rtJuyVUVbRiGatkkVcJZRgAXDf#signingKey"
      }
   ]
}

免责声明

此 DID 簇仅用于学习和评估目的。此代码未经审计和审查,不适合生产用途。您可能期望存在错误和安全漏洞。请勿将其直接用于实际应用程序。

无运行时依赖