2024年6月26日水曜日

W3C Verifiable Credentials Overviewを読む(6)

こんにちは、富士榮です。


続けてW3C Verifiable Credentials Overviewを読んでいきます。

  1. Introduction
  2. Ecosystem Overview
  3. Verifiable Credentials Data Model
  4. Securing Credentials
  5. Bitstring Status List
  6. Additional Publications
今回は3つ目のVerifiable Credentials Data Modelの続きのJSONスキーマの部分です。

3. Checking Structure with JSON Schemas

A significant part of the integrity of a Verifiable Credential comes from the ability to structure its contents so that all three parties — issuer, holder, verifier — may have a consistent mechanism of trust in interpreting the data that they are provided with. One way of doing that is to use [JSON-SCHEMA] to check the structural validity of the Credential. The Verifiable Credentials JSON Schema Specification [VC-JSON-SCHEMA] specification adds standard properties to express the association of a Credential with a JSON Schema.

検証可能なクレデンシャルの整合性の重要な部分は、発行者、保有者、検証者の3者すべてが、提供されたデータを解釈する際に一貫性のある信頼メカニズムを持つことができるように、その内容を構造化できる能力から生じます。その方法のひとつとして、[JSON-SCHEMA]を使用してクレデンシャルの構造的妥当性を確認する方法があります。検証可能な資格情報 JSON スキーマ仕様 [VC-JSON-SCHEMA] 仕様では、資格情報と JSON スキーマとの関連性を表現するための標準プロパティが追加されています。

はい、その通りです。

クレデンシャル(コンテナ)のフォーマットや署名形式、トランスポートプロトコルが一致していたとしてもやり取りされるデータの構造が合っていないと少なくとも機械的に処理ができません。もう一つ言うならデータの意味も、ですね。この辺りを踏まえてスキーマと言うべきでしょう。(現実世界では単なるデータ構造だけを指していて、意味の解釈についてはあまり踏み込めていないところもあり、ここは今後の課題となるでしょう)

例を挙げて考えてみています。

EXAMPLE 3: A Simple Credential with a JSON Schema
{
  "@context": [
    "https://www.w3.org/ns/credentials/v2",
    "https://www.example.org/vocabs/alumni"
  ],
  "id": "https://university.example/Credential123",
  "type": ["VerifiableCredential", "ExampleAlumniCredential"],
  "issuer": "did:example:2g55q912ec3476eba2l9812ecbfe",
  "validFrom": "2010-01-01T00:00:00Z",
  "credentialSubject": {
    "id": "https://www.example.org/persons/pat",
    "name": "Pat",
    "alumniOf": {
      "id": "did:example:c276e12ec21ebfeb1f712ebc6f1",
      "name": "Example University"
    }
  },
  "credentialSchema": {
    "id": "https://university.example/Credential-schema.json",
    "type": "JsonSchema"
  }
}

When dereferenced, the URL https://university.example/Credential-schema.json should return a JSON Schema, for example:

URL https://university.example/Credential-schema.jsonが参照解除されると、JSONスキーマを返す必要があります。例えば、

EXAMPLE 4: JSON Schema for the Simple Credential
{
  "$id": "https://example.com/schemas/email.json",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "ExampleAlumniCredential",
  "description": "Alumni Credential using JsonSchema",
  "type": "object",
  "properties": {
    "credentialSubject": {
      "type": "object",
      "properties": {
        "alumniOf": {
          "type": "string",
          "format": "url"
        }
      },
      "required": [
        "alumniOf"
      ]
    }
  }
}

Using this JSON Schema, a verifier can check whether the Credential is structurally valid or not.

この JSON スキーマを使用することで、検証者はクレデンシャルが構造的に有効であるか否かを確認することができます。

こんな形でスキーマ定義を用いてデータ構造が望んだ通りになっているかどうかを確認することができるってわけですね。

 

For security reasons one may want to go a step further: check/verify the JSON Schema itself to see if, for example, it has been tempered with. This can be done by referring to the JSON Schema indirectly through a separate Verifiable Credential. The reference to such a Verifiable Credential looks very much like Example 3 except for the value of the type:

セキュリティ上の理由から、さらに一歩踏み込んで、JSON スキーマ自体が改ざんされていないかどうかを確認/検証したい場合もあるでしょう。これは、別の検証可能なクレデンシャルを介して間接的に JSON スキーマを参照することで行うことができます。このような検証可能なクレデンシャルへの参照は、type の値を除いて、例 3 とほとんど同じです。 

EXAMPLE 5: A Simple Credential with a JSON Schema Credential
{
  "@context": [
    "https://www.w3.org/ns/credentials/v2",
    "https://www.example.org/vocabs/alumni"
  ],
  "id": "https://university.example/Credential123",
  "type": ["VerifiableCredential", "ExampleAlumniCredential"],
  "issuer": "did:example:2g55q912ec3476eba2l9812ecbfe",
  "validFrom": "2010-01-01T00:00:00Z",
  "credentialSubject": {
    "id": "https://www.example.org/persons/pat",
    "name": "Pat",
    "alumniOf": {
      "id": "did:example:c276e12ec21ebfeb1f712ebc6f1",
      "name": "Example University"
    }
  },
  "credentialSchema": {
    "id": "https://university.example/Credential-schema-credential",
    "type": "JsonSchemaCredential"
  }
}

タイプ属性を使って間接的に他のスキーマ定義を読み込んで検証することもできます。まぁ、この辺りはVerifiable CredentialsというよりもJSON-LDの話ですね。

In this case, when dereferenced, the URL https://university.example/Credential123-schema-credential should return a Verifiable Credential, whose credentialSubject property refers to the required JSON Schema (i.e., https://university.example/Credential-schema.json). See the example in the Verifiable Credentials JSON Schema Specification specification for an example and for further details.

この場合、URL https://university.example/Credential123-schema-credential を参照解除すると、Verifiable Credential が返され、その credentialSubject プロパティが要求される JSON スキーマ(すなわち、https://university.example/Credential-schema.json)を参照します。例と詳細については、Verifiable Credentials JSON Schema Specification 仕様書の例を参照してください。 


まぁ、こんな感じでスキーマの制限を入れるって言うのも相互運用性を保つためには重要なことですね。

次回はSecuring Mechanismについて読んでいきたいと思います。 

 

0 件のコメント: