見出し画像

Verifiable Credential (VC): 検証可能な証明情報とは?

私たちは、「なめらかなデジタル社会を築く」をミッションに、分散型IDプラットフォーム「UNiD(ユニッド)」を開発・提供しています。

さて、今回は Verifiable Credential (VC) という技術仕様についてご紹介したいと思います。

Verifiable Credential (VC) とは、検証可能な証明情報の技術仕様ことを指します。たとえば、運転免許証は自動車を運転する能力があることを証明するために使用され、大学の学位は教育レベルを証明するために使用され、政府が発行したパスポートは国家間の移動を可能にするなど、クレデンシャル情報は私たちの日常生活の一部となっています。このような種類の証明情報を、暗号的に安全で、プライバシーに配慮し、機械的に検証可能な方法で、ウェブ上で表現するメカニズムのことを Verifiable Credential (VC) といいます。現在、W3C を中心に技術仕様の策定が進んでいます。

さて、この Verifiable Credential(VC)は、「なめらかなデジタル社会を築く」ためにとても重要なメカニズムの一つになります。Verifiable Credentials を理解するために、まず Linked Data の仕組みを理解することが本質的で一番の近道だと考えています。

Linked Dataについて

私たちはウェブサイトや写真やビデオなど、さまざまな種類のデータを活用して生活しています。ウェブの世界ではコンピューターがこれらのデータの意味を理解して、繋げ(Link)、お互いに参照し合うことで、便利なユーザー体験をつくってきました。さて、コンピューターはこれらのデータの意味やつながりをどのように理解しているのでしょうか?

世界にはHTML、JSON、XML、CSV などさまざまなデータをパッケージ化するためのフォーマットがあります。このような共通のフォーマットがあることでデータをうまく取引することができます。では、JSONというデータのフォーマットを利用して、Alice という人を次のように表現してみます {name: Alice, birthday: 1990-01-02, location: Tokyo} 。このままではAliceというデータが、世界とどのような関わりを持つかを表現することができません。次に、Alice が Bob を知っていることを Alice {name: Alice, birthday: 1990-01-02, location: Tokyo, knows: Bob} と Bob {name: Bob, birthday: 1991-02-02, location: London} と表現してみます。これをグラフ構造で表現すると下のようになります。

画像1

このようなデータの構造は、google では knowledge graph , facebook では open graph protocol という名前で実際に活用されています。それぞれ特徴は異なりますが、基礎的なコンセプトとしては、それぞれの node がいくつかの情報を持っており、node 間での繋がりを表現する仕組みになっています。この node の主体を表現する方法として一番身近なのが URL: Uniform Resource Locator です。これはユニバーサルな識別子として特定の主体である Alice や Bob を表現します。Node の主体だけでなく node 間の関係性を表現する knows や parent の意味を表現するために URL のメカニズムを利用できます。

画像2

上図のように Alice という node は "http://people.com/Alice" でグローバルに識別することができます。また Alice knows Bob の knows というプロパティの意味を "http://example.com/knows" を参照することで誰でも理解することができます。このようにデータの意味とつながりを表現するメカニズムが Linked Data の基礎的なコンセプトになります。

JSON-LDとは?

JSON とは、軽量で簡易的なデータ定義言語です。JavaScript だけでなく、さまざまな言語間のデータ交換で利用され特に REST API などで使用されています。JSON はとても便利なフォーマットですが、分散型の世界に持ち込むには少し問題があります。例えば、ウェブサイトAに、 {"name": "Bob", "homepage": "http://example.com"} というデータが、ウェブサイトBに、 {"firstName": "Bob", "website": "http://example.com"} というデータがあるとします。どちらのデータも Bob の名前と Homepage を表現していますが、プロパティが異なっており、そもそも "name" や "firstName" が何を意味しているのかをグローバルに解釈することができません。そこで JSON-LD では以下のようにデータに "@context" を加えることでプロパティの意味を一意に特定します。

{
	"@context": "http://schema.org",
	"@id": "http://people.com/Bob",
	"@type": "Person",
	"name": "Bob",
	"url": "http://example.com"
}

上のデータでは、"name" や "url" というプロパティの意味を https://schema.org/Person で定義しています。この "@context" の仕組みにより、異なるウェブサイトが同じ意味でデータを交換することができるようになり、さきほどの Alice knows Bob のような関係性も一意に表現することができます。コンピューターが理解しやすいように "@type" を設定することや、異なる言語でのデータ表現に "@language" というマークアップ手法を活用することができます。

Linked Data Signature

Linked Data のパワフルな仕様の一つに Linked Data Signature というものがあります。さきほどの Bob に関するデータを正規化し、デジタル署名のアルゴリズムにかけることで、下のようにデジタル署名付きの JSON-LD を出力することができます。

{
	"@context": ["http://schema.org", "https://www.w3.org/2018/credentials/v1"],
	"@id": "did:unid:test:EhsGli39soo...",
	"@type": "Person",
	"name": "Bob",
	"url": "http://example.com",
	"proof": {
		"type": "EcdsaSecp256k1Signature2019",
		"proofPurpose": "authentication",
		"created": "2021-03-222T01:23:25z",
		"verificationMethod": "did:unid:test:Eiddaoi23oiaw...",
		"jws": "eyJhbGeiOiJFUzi7lksjd..."
	}
}

たとえばある大学がデジタル署名付きの卒業証書を Bob に発行します。Bob はこの JSON-LD のデータを持ち運び、企業に提出することができます。企業は、大学の公開鍵を取得し、このデータの正しさを検証することができます。JSON-LD のフォーマットで記述することで、このデジタル署名がいつ・だれに・どの署名アルゴリズムで生成されたのか?を受け取り手が確認することができます。私たちのアイデンティティを表現する公的身分証明書・学歴証明書・メディカルデータ・契約書など、さまざまな証明情報を Linked Data Signature のメカニズムで表現することができます。

Verifiable Credential

この Linked Data Signature のメカニズムと、以前このマガジンでも紹介した分散型ID と DPKI とを組み合わせることで、私たちのアイデンティティに関する証明情報を個人が持ち運び、誰でも暗号学的に検証することができます。この検証可能な証明情報を表現するメカニズムを Verifiable Credentials (VCs) と呼んでいます。このVCのメカニズムが市場に与えるインパクトはとても大きく、これまで人手で行っていたあらゆるデータ検証プロセスを自動化し、より安全でなめらかなユーザー体験を創出することができます。

この VCs のデータのフォーマットや、ライフサイクルの設計については、先行して取り組む企業や組織の間でもばらつきがある状況となっています。証明情報に関する相互互換性をグローバルに担保していくために、W3C や DIF などの標準化コミュニティに参加し、定期的にキーパーソンと交流することがとても大切になります。また VC を発行する主体の信頼を担保するためのフレームワークやガバナンスを構築するために政府機関と議論を深めることも大切になります。

私たちは「なめらかなデジタル社会を築く」をミッションに、分散型IDプラットフォーム「UNiD(ユニッド)」を開発・提供しております。こちらのページから「DEMO REQUEST」を受け付けております。顧客体験のデジタル化に取り組む事業者さまからのリクエストをお待ちしております。

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