見出し画像

DIDs v1.0を読む【Identifier】

はじめに

こんにちは。麻雀領域からピボットしたため、麻雀ポッドキャストを続けるか悩んでいる細谷です。Twitterであるツイートを見つけて背中を押してもらった気持ちになっています。

今回はIdentifier編です。

Identifier

概要

このセクションではDIDsやDID URLsの正式な構文について述べられています。またDID methodsに関する構文との区別をつけるために、本書では"generic"という単語を使っていたりもします。

DID Syntax

全てのDIDは以下のthe DID Syntax ABNF Rulesに準拠しなければなりません。

https://www.w3.org/TR/did-core/#did-syntax

ABNFとはルールを厳密な意味で定義するための文法の一種として捉えておけば良さそうです。以下の記事などで概要が何となく掴めました。

DID URL Syntax

DID URLとは特定のリソースがネットワーク上のどこにあるかを示すものです。従来のhttps://などから始まるURLは単に”情報の置き場所”感が強かったですが、didでは

  • DID subject

  • verification method
    証明されたものを検証するための方法
    (exデジタル署名における証明を検証するために署名を行った送信者が秘密鍵を持っているか確認する)

  • services
    単一、または複数のエンドポイントを使用してDND subjectや関連するエンティティーとのインタラクティブなやり取りを行うもの
    (ex 分散型SNS Damusとかもそう?)

  • DID document

  • その他

https://www.w3.org/TR/did-core/#did-url-syntax

書き方自体はweb2までのURLから大きく変わった感はないですね。
厳密な定義は以下から
path-abempty, query, fragment

Path
generic URLです。DID methodsを規定するものとは区別する必要があります。

did:example:123456/path

Query
クエリです、はい

did:example:123456?versionId=1
did:example:123?versionTime=2021-05-10T17:00:00Z
did:example:123?service=files&relativeRef=/resume.pdf etc...

Fragment
最小単位のリソースを指定するイメージでしょうか。

//A unique verification method in a DID Document//
did:example:123#public-key-0

//A unique service in a DID Document//
did:example:123#agent

//A resource external to a DID Document//
did:example:123?service=agent&relativeRef=/credentials#degree

DID Parameters
queryに指定できるパラメータを紹介しています。

パラメータの一例

Relative DID URLs
ここまでの説明を簡単にまとめるとDID URLは以下の要素によって構成されています。

base URL
scheme(did) + authority(method-name, method-specific-id) 
additional URL
path / query # fragment

以下の例はURLとして”did:example:123456789abcdefghi#key-1”の記載となります。

{
  "@context": [
    "https://www.w3.org/ns/did/v1",
    "https://w3id.org/security/suites/ed25519-2020/v1"
  ]
  "id": "did:example:123456789abcdefghi",
  "verificationMethod": [{
    "id": "did:example:123456789abcdefghi#key-1",
    "type": "Ed25519VerificationKey2020", // external (property value)
    "controller": "did:example:123456789abcdefghi",
    "publicKeyMultibase": "zH3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"
  }, ...],
  "authentication": [
    // a relative DID URL used to reference a verification method above
    "#key-1"
  ]
}

感想

DIDにおけるURLの味方を主に見てきました。大元の概念はそこまで変わっていないなと感じる一方で、DID documentにアクセスする・authorityの存在などが押さえておくと良さそうという感じです。

この記事が気に入ったらサポートをしてみませんか?