📃

DID(分散型ID)とは?概要説明から活用事例まで

2022/11/11に公開

PitPaでエンジニアをしている森田です。
ブロックチェーン技術に興味があり、ご縁あってPitPaと出会い2022年09月からジョインさせていただいてます。

本記事では僕がPitPaの開発プロジェクトで触れる機会の多いDIDについて、備忘録も兼ねてご紹介させていただきます!

DIDとは

DID(Decentralized Identifier)は、グローバルにユニークかつ永続性のあるIDです。
ブロックチェーンなどの暗号技術を用いることにより一切の組織または政府から独立してユーザーが作成、所有、管理できるIDとなります。

既存のIDとDIDの違い

僕たちが普段使用しているこれまでのIDとDIDの最も大きな違いはIDの管理者がいるかどうかとなります。

GoogleアカウントやFacebookアカウントなどはそれぞれ企業が管理していますが、DIDにはそういった管理者がいません。
管理者がいないことのメリットは、管理者に個人のID情報を利用されたり、削除されたりしないことがあります。

操作権限 管理団体によるビジネス利用 永続性
これまでのID 企業などの管理団体も操作可能 される可能性あり 管理団体が無くなると消える
DID 自分のみ される可能性なし ブロックチェーン上に半永久的に存在

例えば、
通常のIDを管理してる団体は、その情報を販売(データビジネス)したり、データ分析をしてマーケティングに利用したりできます。
しかし、DIDは管理団体がいないので、上記のように利用されることはありません。

DIDの構成

DIDは下記のような構成になっております。
did:[method-name]:[method-specific-id]

https://www.w3.org/TR/did-core/ より引用

  • did
    • URIスキームのID
    • http, httpsのようなイメージです
  • DID method
    • DIDを運用する仕組みの種類です
    • PitPaでは、did:webdid:ethrを使用してます
    • その他のDID Methodの種類についてはこちらをご参照ください
  • DID Method-Specific Identifier
    • DID Methodの中の特定のIDです
    • did:example:123456789abcdefghiを指定した場合、exampleという種類のDIDの仕組み中の123456789abcdefghiさんのDIDにアクセスします

DIDドキュメント

DIDドキュメントとは、DIDと紐づいているDIDで示すデータがまとまっているJSON形式のドキュメントです。
普段僕ら使用しているものに例えると、メールアドレスとそれに紐づくGoogleアカウント情報のようなイメージです。

DIDドキュメントの例

{
  "@context": [
    "https://www.w3.org/ns/did/v1",
    "https://w3id.org/security/suites/ed25519-2020/v1"
  ],
  "id": "did:example:123456789abcdefghi",
  "authentication": [{
    "id": "did:example:123456789abcdefghi#keys-1",
    "type": "Ed25519VerificationKey2020",
    "controller": "did:example:123456789abcdefghi",
    "publicKeyMultibase": "zH3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"
  }]
}

DIDドキュメント内のデータは、キーとバリューのペアで構成されます。
また、DIDドキュメント内のデータは、大きく2つの意味で区分されてます。

1つ目は、Properties:プロパティと呼ばれ、DIDと紐づく各種情報を示してます。
id(DIDドキュメントと紐づいているDID)のような必須プロパティの他にauthenticationのような任意のプロパティを含めることができます。
公開鍵、特定のブロックチェーン中の位置を示す情報なども含まれたりします。

上記DIDドキュメントの例だと下記の部分が該当します。

{
  ...
  "id": "did:example:123456789abcdefghi",
  "authentication": [{
    "id": "did:example:123456789abcdefghi#keys-1",
    "type": "Ed25519VerificationKey2020",
    "controller": "did:example:123456789abcdefghi",
    "publicKeyMultibase": "zH3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"
  }],
  ...その他、任意のプロパティ...
}

その他のプロパティを確認したい場合はこちらをご参照ください。

2つ目は、Representation-specific Entries:任意の表現でのエントリと呼ばれるDIDドキュメントをJSON以外のXMLやYAMLで表現したい場合などに使用します。
DIDドキュメントの例だと下記の部分が該当します。

{
  "@context": [
    "https://www.w3.org/ns/did/v1",
    "https://w3id.org/security/suites/ed25519-2020/v1"
  ],
  ...プロパティ...
}

@contextキー内に使用したいフォーマットを配列で指定します。
指定したフォーマットで変換する方法などについてはこちらをご参照ください

DIDドキュメントの保存場所

DIDドキュメント作成に必要なデータは、Verifiable Data Registryに保存されます。
Verifiable Data Registryは、ブロックチェーン・分散型ファイルシステムなどのP2Pデータベースから、信頼できるデータストレージなどあらゆる種類のものがあります。


https://www.w3.org/TR/did-core/ より引用

どの種類のVerifiable Data RegistryにDIDドキュメント作成に必要なデータを格納するかなどは、DID methodで指定します。
did:ionだとビットコインベースの分散型台帳に、did:ethrだとイーサリアムベースの分散型台帳に格納します。
また、did:webのように信頼できるwebドメイン上にDIDドキュメント作成に必要なデータを格納することもできます。

その他のDID methodと対応するRegistryについて確認したい方は、こちらをご参照ください。

DIDリゾルバ

DIDリゾルバは、DIDに紐づくDIDドキュメントをVerifiable Data Registry(Decentralized Identifier Registry)から取得します。
DIDリゾルバは、DIDを引数に受け取りDIDメソッドに応じたDIDドキュメントを取得する関数であるresolve()を実装します。


https://w3c-ccg.github.io/did-resolution/ より引用

DIDリゾルバの詳しい仕様についてはこちらこちらをご参照ください。

DIDとVC

DIDドキュメントでは、認証・認可をするために使用できる公開鍵などの検証方法(Verification Methods)を持たせることができます。
そのため、皆さんが良く知る公開鍵暗号方式でデジタル署名に関する検証をおこない、DIDに紐づくVCが改ざんされてないことを証明することができます。
Verification Methodsの詳しい仕様についてはこちらをご参照ください。

VC(Verifiable Credentials)は、検証可能な資格情報という意味です。
資格情報の例として、
運転免許証やパスポート、学歴証明書といった公的なものから、職歴証明などの民間団体が発行するものまで様々な資格情報を指します。
VCについて詳しく知りたい方はこちらをご参照ください。

VCをDIDで署名することでそのVCをDIDに紐づく個人が所有していることを証明することができます。

活用事例

PitPaでは、千葉工業大学で学修歴証明書発行の際にdid:webを使用してVCを発行して、did:ethrを使用して各学生のメタマスク上でVC(学修歴証明書)を所有できるようにしました。

また、他社さんの事例になりますが慶應義塾大学の各種個人証明書発行でも活用されております。
こちらは、おそらくビットコインベースのdid:ionが使用されていると思われます。

最後に

本記事では、DID関連で良く出てくる用語がそれぞれどんな役割を持っているのかを中心にまとめさせていただきました。
DID/VC関連の開発をする際に用語を整理したい時などに読み返していただけると幸いです!

PitPaでは web3やメディア事業に興味のあるエンジニアの方とお話できればと考えてます。まだ発表できていないプロジェクトもあるので、ぜひお気軽に代表の石部にご連絡いただけたら幸いです。

▼石部のTwitterアカウントはこちらです。DMでお気軽にご連絡ください!
https://twitter.com/isbtty7

▼【ポッドキャスト公開中!〜PitPaの創業から現在まで〜】
代表の石部より、PitPa創業の話から現在取り組んでいるポッドキャスト事業・Web3事業の現在とこれからについてトークしました。ぜひこちらもご拝聴いただけますと幸いです。
https://open.spotify.com/show/2slv3BafA5c32038qFGYis

参考資料

PitPa Tech Blog

Discussion