
Verifiable Credentials(VC)実装ガイド
W3C 2.0仕様・4つのセキュア化形式・実装ライブラリ
— 1行で答えると
Verifiable Credentials(VC、検証可能な証明書)とは、W3C が標準化した「電子的に署名され、第三者が真正性を検証できる属性証明書」の仕様です。Issuer(発行者)・Holder(保有者)・Verifier(検証者)の3者モデルで運用され、セキュア化形式は JSON-LD/Data Integrity・JWT-VC・SD-JWT VC・COSE-VC などから選択します。VC Data Model 2.0 は2025年5月にW3C勧告として正式標準化されました。
本記事では VC の3者モデル・セキュア化形式の使い分け・主要ライブラリ・実装フローを実装観点で整理します。DID と組み合わせた本人確認・資格証明設計の指針として読んでください。
— 01
VCの3者モデル
VC のすべての設計は Issuer・Holder・Verifier の3者関係から出発します。誰が何を発行し、誰が何を検証するか、最初に役割を明確にすることが重要です。
Issuer(発行者)
VCを発行する主体。大学・自治体・企業・国などが該当する。発行者の秘密鍵でVCに署名し、信頼性を担保する。
例: 大学(学位)/自治体(住民票)/医療機関(処方箋)/企業(在職証明)
Holder(保有者)
VCを受け取り、自身のウォレットで保管・管理する主体。多くの場合エンドユーザー本人。
例: 個人(学生/市民/患者/従業員)
Verifier(検証者)
VCの提示を受けて検証する主体。提示されたVCの署名・有効期限・失効状態を確認し、属性情報を信頼できるか判断する。
例: 採用企業/金融機関/レンタカー/薬局/ECサイト
— 02
4つのセキュア化形式の比較
W3C VC 2.0 では同一データモデルを複数のセキュア化形式で実装できます。それぞれ用途・互換性・実装難易度が異なります。
JSON-LD VC + Data Integrity
application/vc署名: Data Integrity Proofs(DI)
利点
- • セマンティックな意味づけが明確
- • JSON-LDコンテキストで語彙共有しやすい
- • W3C VC 2.0の中心的な表現と親和性が高い
課題
- • JSON-LD処理が重い
- • カノニカル化の実装が複雑
- • 既存JWT基盤とは別設計になりやすい
適する用途: 公的証明・教育証明・相互運用性を重視するエコシステム
JWT-VC (JOSE)
application/vc+jwt署名: JWS(JSON Web Signature)
利点
- • 既存JWT基盤と互換
- • 実装が軽量
- • OAuth/OIDC系の開発者に理解されやすい
課題
- • JWT単体では選択的開示に向かない
- • 提示時に全クレームを開示しやすい
- • セマンティックな語彙連携はJSON-LDより弱い
適する用途: 既存OAuth/OIDC基盤からの移行・社内証明・軽量なPoC
SD-JWT VC
application/vc+sd-jwt署名: SD-JWT(Selective Disclosure JWT)
利点
- • 選択的開示が可能
- • ZK証明ほど重くない
- • モバイルウォレット・高保証ID領域で注目度が高い
課題
- • 仕様・実装エコシステムが比較的新しい
- • 開示単位・メタデータ設計が必要
- • 対応ウォレットとの互換性確認が重要
適する用途: 年齢確認・本人確認・プライバシー重視の属性証明
COSE-VC
application/vc+cose署名: COSE(CBOR Object Signing)
利点
- • バイナリ効率が高い
- • モバイル・組込み環境に向く
- • ISO mdoc / mDL 系の設計と親和性がある
課題
- • CBOR/COSEの実装知識が必要
- • Web APIでの取り回しはJWTより重い
- • 一般的なWeb開発者には学習コストがある
適する用途: モバイル運転免許証(mDL)・IoT端末・高効率なモバイル証明
— 03
主要実装ライブラリ
| ライブラリ | 言語 | ライセンス | 特徴 |
|---|---|---|---|
| Veramo | TypeScript / Node.js | Apache-2.0 | プラグイン構成。複数DIDメソッド・複数VC形式に対応。Webアプリで最も採用例が多い。 |
| Walt.id | Kotlin / JVM | Apache-2.0 | EU eIDAS・EUDIウォレット仕様対応に強い。エンタープライズ向けのIssuer/Verifierインフラ込み。 |
| SpruceID / DIDKit | Rust(FFI: Node/Python/JVM) | Apache-2.0 | モバイル組み込み向け。軽量で WebAssembly 経由のブラウザ動作も可能。 |
| Hyperledger Aries / AnonCreds | Python / Rust | Apache-2.0 | ZK証明ベースの匿名クレデンシャル。エンタープライズ DID(Indy)と組み合わせて利用される。 |
| sd-jwt-js | TypeScript | Apache-2.0 | SD-JWT 仕様の参照実装に近い軽量ライブラリ。OpenID for VC 系の実装で頻用。 |
— 04
実装フロー(5ステップ)
スキーマ設計
VC で表現する属性(クレーム)を JSON Schema、schema.org、独自語彙、または業界標準スキーマに合わせて定義します。資格証明なら「氏名・有効期限・発行機関・資格名」など。OID4VCI のクレデンシャル定義に合わせる設計が将来の相互運用性に効きます。
Issuer 構築
Issuer の識別子(DIDを含む)と署名鍵を設計し、VC 発行 API(OID4VCI推奨)を実装します。発行時に JSON-LD/Data Integrity・JWT-VC・SD-JWT VC・COSE-VC のどれを採用するかを決め、対応するライブラリを選択します。
Holder ウォレット選定
ユーザーが VC を保管・提示するウォレットを決めます。Microsoft Authenticator / Entra Verified ID、Trinsic、Walt.id、自社開発ウォレットなどが選択肢になります。EU市場を視野に入れる場合は、EUDI WalletやOID4VC系プロトコルとの互換性を確認する必要があります。
Verifier 構築
Verifier 側で VC 検証 API(OID4VP推奨)を実装します。署名検証・失効チェック・有効期限確認・Issuer DID 解決の4点が必須機能です。SD-JWT を採用する場合は選択的開示クレームの検証ロジックも追加します。
Revocation / Status 設計
失効・停止などの状態確認の仕組みを設計します。VC 2.0文脈では Bitstring Status List v1.0 が重要な選択肢です。発行者が公開するビット列の特定位置に各VCの状態を対応させ、検証者はVC内のstatus情報をもとに状態を確認します。プライバシー保護・運用負荷・更新頻度のバランスを設計段階で決める必要があります。
Netsujo のサポート
VC実装は、セキュア化形式選定・ライブラリ評価・ウォレット選定・OID4VCI/OID4VP実装の判断ポイントが多いため、設計フェーズで方針を固めることが重要です。DID全体像は DID実装ガイドをご覧ください。
— 05
よくある質問(FAQ)
Q1Verifiable Credentials(VC)とは何ですか?
Verifiable Credentials(VC)とは何ですか?
VC(検証可能な証明書)とは、W3Cが標準化した「電子的に署名され、第三者が真正性を検証できる証明書」の仕様です。学位・資格・在職証明・住民票などの「属性証明」を、紙やPDFではなく改ざん不可能な署名付き電子データとして発行・流通させる仕組みです。VC Data Model 2.0 は2025年5月15日にW3C勧告として正式標準化されました。
Q2VCとDIDの違いは何ですか?
VCとDIDの違いは何ですか?
DIDは「識別子」、VCは「属性証明書」です。たとえばDIDが免許証番号に近い識別子だとすれば、VCはその免許証に書かれた情報(氏名・生年月日・運転種別など)に相当します。ただし、VCのsubject IDが常にDIDである必要はありません。ユースケースによってはDIDを使わず、別の識別子や識別子なしの属性証明として設計することもあります。DIDの詳細は当社の「DID(分散型ID)とは?」記事を参照ください。
Q3JWT-VC / JSON-LD-VC / SD-JWT VC / COSE-VC のどれを選ぶべき?
JWT-VC / JSON-LD-VC / SD-JWT VC / COSE-VC のどれを選ぶべき?
既存のJWT基盤と互換性を重視するならJWT-VC、W3C VC 2.0のセマンティックな表現や語彙連携を重視するならJSON-LD/Data Integrity、選択的開示(最小開示)が必要なケースではSD-JWT VCを選びます。モバイル運転免許証(mDL)や組込み・バイナリ効率を重視する領域ではCOSE-VCも選択肢になります。実務では、対象市場・ウォレット互換性・検証者側の実装負荷で決めるべきです。
Q4選択的開示(Selective Disclosure)とは?
選択的開示(Selective Disclosure)とは?
保有者が自分のVCの一部だけを提示者に開示できる仕組みです。たとえば運転免許証VCを使って酒類購入時の年齢確認をする場合、氏名・住所・免許番号は隠して「20歳以上である事実」のみを提示する、といった使い方ができます。SD-JWT または BBS+ Signatures(ZK)で実装します。
Q5VCの失効(Revocation)はどう実装しますか?
VCの失効(Revocation)はどう実装しますか?
VC 2.0文脈では Bitstring Status List v1.0 が重要な選択肢です。発行者が公開するビット列の特定位置に各VCの状態を対応させ、失効・停止などの状態を検証者が確認できるようにします。検証者はVC内のstatus情報からステータスリストを参照し、該当ビットを確認します。設計時には、更新頻度、キャッシュ、プライバシー、SLAをあわせて決める必要があります。
Q6マイナンバーカードと連携できますか?
マイナンバーカードと連携できますか?
可能です。マイナンバーカードの公的個人認証(JPKI)で本人確認を行い、その結果を VC として発行する設計が現実的です。デジタル庁の「Trusted Web」推進会議でも、公的認証と自己主権型VCを橋渡しする方向性が示されています。
Q7OID4VCI / OID4VPとは何ですか?
OID4VCI / OID4VPとは何ですか?
OpenID for Verifiable Credential Issuance(OID4VCI)はVC発行のプロトコル、OpenID for Verifiable Presentations(OID4VP)はVC提示のプロトコルです。OID4VCI 1.0は2025年9月、OID4VP 1.0は2025年7月にFinal Specificationとして公開されました。どちらもVCの形式を1つに限定するものではなく、SD-JWT VC、ISO mdoc、W3C VCDMなど複数形式を扱える設計です。
Q8EUDIウォレットとは?
EUDIウォレットとは?
欧州デジタルアイデンティティウォレット。EU eIDAS 2.0規則に基づき、EU加盟国が市民・居住者向けにデジタルIDウォレットを提供していく枠組みです。2026年末頃までに各加盟国が少なくとも1つのウォレットを提供することが求められると整理されています。VCやデジタル属性証明の大規模実装事例になる可能性が高く、日本企業がEU向けサービスを提供する場合は、今後の実装仕様・受入義務・対象業種を継続確認すべきです。
Q9PoCに必要な期間と費用は?
PoCに必要な期間と費用は?
最小構成のPoC(Issuer + Verifier + Holder Walletサンプル)であれば、4〜8週間で動作確認まで可能です。Netsujo の PoC設計パッケージ(80万円・4週間)では、想定ユースケースのVCスキーマ定義・セキュア化形式選定・実装ライブラリ評価までを伴走します。詳細は /pricing ページを参照ください。
Q10本番運用の主な課題は?
本番運用の主な課題は?
4つあります。1) ウォレット普及(ユーザーが VC を受け取れる環境がないと普及しない)、2) Issuer の信頼性確認(誰が正当な発行者かを Verifier 側で判断する仕組み)、3) Revocation 運用(失効更新の頻度とSLA)、4) ユーザーの鍵紛失リカバリ。設計段階で全て言語化することが本番化の前提条件です。
この記事が向いている方
DID/VC を活用した本人確認・資格証明の実装を検討中の方
EU eIDAS / EUDI ウォレット対応を視野に入れる事業者の方
マイナンバーカード連携で属性証明サービスを設計したい方
VC実装の構想段階から
VC実装を相談する
セキュア化形式の選定(JSON-LD/Data Integrity / JWT / SD-JWT / COSE)、実装ライブラリの評価、ウォレット選定、OID4VCI/OID4VP実装まで、構想段階の壁打ちで対応します。