W3C VC仕様
W3C Verifiable Credentials Data Model仕様の概要と、VeriCerts Zeroでの実装について説明します。
Verifiable Credentials仕様とは
Verifiable Credentials(VC)は、W3Cが策定した検証可能な資格情報の国際標準仕様です。デジタル証明書の発行・保持・検証のための相互運用可能なフォーマットを定義しています。
- 仕様名: Verifiable Credentials Data Model v2.0
- 策定団体: W3C (World Wide Web Consortium)
- ステータス: W3C Recommendation(勧告)
- 公式URL: https://www.w3.org/TR/vc-data-model-2.0/
VCの基本構造
主要なプロパティ
| プロパティ | 必須 | 説明 |
|---|---|---|
@context | ✅ | JSON-LDコンテキスト |
type | ✅ | 資格情報の種類(VerifiableCredential必須) |
issuer | ✅ | 発行者(DIDまたはオブジェクト) |
credentialSubject | ✅ | 資格情報の主体と主張内容 |
validFrom | - | 有効開始日時 |
validUntil | - | 有効終了日時 |
credentialStatus | - | 失効確認用情報 |
トラストモデル
VCエコシステムには3つの主要な役割があります:
| 役割 | 説明 |
|---|---|
| Issuer(発行者) | VCを発行する組織 |
| Holder(保持者) | VCを保持し、必要に応じて提示する主体 |
| Verifier(検証者) | 提示されたVCを検証する主体 |
Issuer → VC発行 → Holder → VP提示 → VerifierVeriCerts Zeroでの実装
対応VC形式
VeriCerts Zeroでは、以下の2つのVC形式に対応しています:
| 形式 | 標準 | 識別子 | 特徴 |
|---|---|---|---|
| W3C SD-JWT | W3C VCDM 2.0 | vc+sd-jwt | W3Cがアイデンティティ標準化のために策定。セマンティックWebとの連携を重視 |
| IETF SD-JWT | RFC 9396 | dc+sd-jwt | IETFがセキュリティトークン標準化の一環として策定。OAuth/OIDC等との親和性が高い |
両形式ともSD-JWT(Selective Disclosure JWT)を採用しており、選択的開示に対応しています。
Note: IETF(Internet Engineering Task Force)は、HTTP、TCP/IP、TLSなどインターネットの基盤技術を標準化している国際団体です。
対応署名アルゴリズム
| アルゴリズム | 説明 |
|---|---|
| EdDSA (Ed25519) | 推奨。高速で安全な楕円曲線署名 |
| ES256K (secp256k1) | Ethereum等のブロックチェーン連携用 |
VCドキュメントの例
以下はVeriCerts Zeroで生成されるVC(IETF SD-JWT形式)の例です:
{
"iss": "did:web:zero.vericerts.io:org:abc123",
"sub": "did:key:z6MkrHKzgsahxBLyNAbLQyB1pcWNYC9GmywiWPgkrvntAZcj",
"iat": 1704067200,
"exp": 1735689600,
"vct": "urn:vericerts:system:certificate:v1",
"cnf": {
"kid": "did:key:z6MkrHKzgsahxBLyNAbLQyB1pcWNYC9GmywiWPgkrvntAZcj#keys-1"
},
"name": "山田 太郎",
"certificate_type": "資格証明書",
"_sd": ["hash1", "hash2"],
"_sd_alg": "sha-256"
}| フィールド | 説明 |
|---|---|
iss | 発行者のDID |
sub | 保持者のDID |
iat | 発行日時(Unix timestamp) |
exp | 有効期限(Unix timestamp) |
vct | VC Type(資格情報の種類) |
cnf | Key Binding用の公開鍵情報 |
_sd | 選択開示フィールドのハッシュ配列 |
_sd_alg | ハッシュアルゴリズム(sha-256) |
選択的開示(Selective Disclosure)
SD-JWTでは、VCの一部のフィールドのみを開示できます。開示されないフィールドはハッシュ化され、検証者には内容が見えません。
メリット:
- プライバシー保護:必要な情報のみを開示
- 最小限の情報開示:例えば年齢確認の際、学生証やパスポートでは住所など全ての個人情報を見せる必要があったが、VCなら生年月日のみを提示できる
VP(Verifiable Presentation)
Holderが検証者にVCを提示する際は、VP(Verifiable Presentation)を使用します。
VCとVPの違い
| 項目 | VC | VP |
|---|---|---|
| 作成者 | Issuer(発行者) | Holder(保持者) |
| 受取人 | Holder | Verifier(検証者) |
| 有効期間 | 長期(数ヶ月〜数年) | 短期(数分〜数時間) |
| 内容 | 資格情報の主張 | VCを包んで提示用にパッケージ化 |
| 目的 | 資格・属性の証明 | 特定の検証者への安全な提示 |
VPはHolder自身が作成し、検証者に対して「このVCを持っているのは確かに自分」であることを証明します。リプレイ攻撃対策として、特定の検証者・特定の時点でのみ有効となるよう設計されています。
Combined Format
VeriCerts ZeroではRFC 9396準拠のCombined Formatを採用しています:
<SD-JWT>~<disclosure1>~<disclosure2>~...~<Key Binding JWT>| 要素 | 説明 |
|---|---|
| SD-JWT | 署名済みのVC本体(ハッシュ化されたクレームを含む) |
| Disclosures | 開示するフィールドの値(Base64URLエンコード) |
| Key Binding JWT | Holderの認証・リプレイ攻撃対策(オプション) |
失効管理(StatusList2021)
VCは発行後に失効させる必要がある場合があります。例えば、退職した社員の社員証VCや、資格を喪失した場合の資格証明書などです。
VeriCerts Zeroでは、W3Cが策定したStatusList2021を使用してVCの失効状態を管理します。
StatusList2021の仕組み
StatusList2021は、圧縮されたビット配列でVCの状態を効率的に管理します。
StatusList(ビット配列)
┌───┬───┬───┬───┬───┬───┬───┬───┐
│ 0 │ 0 │ 1 │ 0 │ 0 │ 0 │ 1 │ 0 │ ...
└───┴───┴───┴───┴───┴───┴───┴───┘
↑ ↑ ↑
#0 #2(失効) #6(失効)
0 = 有効、1 = 失効または一時停止各VCにインデックス番号が割り当てられ、そのビット位置の値で状態を判定します。
VCでの記述例
"credentialStatus": {
"id": "https://status.vericerts.io/2025/status-list#25",
"type": "StatusList2021Entry",
"statusPurpose": "revocation",
"statusListIndex": 25,
"statusListCredential": "https://status.vericerts.io/2025/status-list"
}| フィールド | 説明 |
|---|---|
statusPurpose | revocation(永久失効)または suspension(一時停止・復帰可能) |
statusListIndex | このVCに割り当てられたインデックス番号 |
statusListCredential | ステータスリストを取得するURL |
StatusList2021のメリット
| 特徴 | 説明 |
|---|---|
| 効率的 | 圧縮ビット配列により、数万件のVCを数KBで管理可能 |
| プライバシー保護 | ステータスリスト全体を取得するため、どのVCを確認したか特定されにくい |
| キャッシュ可能 | ステータスリストをキャッシュして検証を高速化 |
| 標準準拠 | W3C標準仕様に準拠し、相互運用性を確保 |
VCの検証と確認
VeriCerts Zeroで発行されたSD-JWT VCは、外部ツールで検証・確認できます。
SD-JWT VC Verifier
Paradym SD-JWT VC Tools は、SD-JWT VCを検証・デコードできるオンラインツールです。
使い方
- Paradym SD-JWT VC Tools にアクセス
- SD-JWT VC(Combined Format)を入力欄に貼り付け
- デコードされたペイロードとDisclosuresが表示される
確認できる情報
| 情報 | 説明 |
|---|---|
| Header | JWTヘッダー(アルゴリズム、タイプ) |
| Payload | VCの内容(ハッシュ化されたフィールド含む) |
| Disclosures | 開示されたフィールドの詳細 |
| Signature | 署名の検証結果 |
なぜ重要か
- 相互運用性の確認: VeriCerts Zeroで発行したVCが国際標準に準拠していることを確認できます
- デバッグ: VCの内容や選択開示の動作を確認できます
- 信頼性の証明: 第三者のツールでも検証できることは、標準準拠の証拠となります
関連リンク
- DID/VCとは - DID/VCの基本概念
- W3C DID仕様 - DID Core仕様
- W3C VC Data Model 2.0(原文) - 公式仕様書
- SD-JWT仕様(IETF) - SD-JWT仕様