一个DID的例子(did:web)
W3C DID标准 是关于DID的规范,这里DID是指去中心化标识符(英文 Decentralized Identifier)。 这个标准位于自主身份社区中的底层,用来解决在去中心化/自主身份的世界,给人、机构或者物“命名”的基本问题。
一个DID的形式如下:
did:<METHOD>:<ID>
其中,<METHOD>是指用什么方法来解析(resolve)这个标识符,而<ID>的规范由<METHOD>来定义。我这里给一个今天做出来的例子:
did:web:blog.xiaofuxing.name
这个DID,是我刚刚生成的一个did,中间的 :web: 表示我用 DID WEB 方法。DID WEB方法是一个可以从Web2 的世界创建或者链接一个DID的方法,与任何区块链无关。只要你控制或授权控制一个域名下的web服务点 ,就可给自己创造一个类似的DID。在上面的例子中,因为我控制了 blog.xiaofuxing.name的域名,所以我就能创造一个那样的DID。
本文的主要内容是关于技术的,回答了两个问题:
- 如何解析这个DID?
- 如何创建这个DID?
在回答这两个技术问题之前,我得说说非技术的问题,好让非技术读者理解这么做的意义。 解析的目的,在于作为博客读者的你,可以获得关于这个DID的信息,尤其是公钥,为咱们(我和你)可以安全的点对点通信创造了一个可能的安全条件。 当你(DID的通信对端)解析了这个DID的文档后,实际上就知道了我(DID的创建者,或者说控制者)的相关信息,尤其是公钥信息,如果我也知道你的DID并 解析到你的DID文档,那么咱俩就有可能安全通信,而咱俩的通信信息(在理想情况下)不会被任何第3方截获。当然,DID Web并不是一个特别安全的DID方法, 尤其是它的安全性建立在目前的PKI ( DNS/CA/X509/TLS 这些技术)之上的,而自主身份设计的一大目标是替代目前的PKI。因此当目前PKI的弱点被攻击, 例如一个黑客通过域名劫持就很可能让你解析到一个虚假的DID文档,这时候你所理解的“咱俩的通信”就显然是不安全的。不过,作为概念演示和过渡方案, DID Web方法仍然有意义。
解析方法
利用一个 DID web resolver工具,解析即可。例如如下代码
const { Resolver } = require( 'did-resolver' )
const { getResolver } = require( 'web-did-resolver' )
const webResolver = getResolver()
const didResolver = new Resolver({
...webResolver
//...you can flatten multiple resolver methods into the Resolver
})
didResolver.resolve('did:web:blog.xiaofuxing.name').then(doc => console.log(JSON.stringify(doc,null,2)))
创建方法
我参考了 这篇文章 。
第0步,准备一个开发环境:一个linux发行版。
第1步, 安装rust 。
第2步, 安装didkit 。
第3步, 生成公私钥对,命令行
$ ./target/debug/didkit key generate ed25519 > firstkey.jwk
第4步,生成一个 did:key 标识符,命令行
$ ./target/debug/didkit key-to-did --key-path firstkey.jwk
得到输出:
did:key:z6MkuMDR7gtqicfb9eVZWrm2ou7h5bpf8tnn4hu3fYY7bBsB
第5步,解析 did:key 标识符,得到一个 did:key 的文档(did document), 命令行:
$ ./target/debug/didkit did-resolve did:key:z6MkuMDR7gtqicfb9eVZWrm2ou7h5bpf8tnn4hu3fYY7bBsB > keydid.json
第6步,修改为目标的did:web 的文档,命令行:
$ cp keydid.json webdid.json
$ sed -i -e "s/:key:/:web:/g" webdid.json
$ sed -i -e "s/z6MkuMDR7gtqicfb9eVZWrm2ou7h5bpf8tnn4hu3fYY7bBsB/blog.xiaofuxing.name/g" webdid.json
$ sed -i -e "s/#blog.xiaofuxing.name/#firstkey/g" webdid.json
第7步,将得到的 webdid.json 放到博客目录下,使得可以从这个URL: https://blog.xiaofuxing.name/.well-known/did.json 可以下载这个文件。