DCP-AI ↔ W3C DID/VC のブリッジ¶
英語版の参考訳です(26/10/2026 更新)。内容が異なる場合は英語版が優先されます。識別子、コマンド、コードブロックは翻訳せずにそのまま掲載しています。
DCP のアーティファクトと、W3C の分散型識別子(DID)および検証可能なクレデンシャル(VC)との間で変換します。
インストール¶
npm の 2.0.1(2026 年 10 月 26 日)は、main のソースと同じ index.js を持っています。Node.js で動作し(Buffer を使います)、依存関係はありません。
制限(2026 年 10 月 25 日)¶
出力を当てにする前に読んでください。index.js に照らして確認しています。
- 鍵。
rprToDIDDocumentはrpr.keysから鍵を読みます。スキーマに従う V2 の RPR は鍵をbinding_keysに持ちますが、これは読まないため、その DID Document には検証方法がありません。 - エンコーディング。
publicKeyMultibaseはzの後に base64url が続くものです。Multibase ではzは base58btc を意味するため、エンコーディングの表示が誤っており、ほかのツールではデコードのエラーや異なる鍵のバイト列になることがあります。このパッケージのdidDocumentToRPRは、準拠した multibase のデコーダーではなく、対応する base64url のデコーダーを使います。 - 証明なし。 作られる検証可能なクレデンシャルとプレゼンテーションは
proofを持たず、署名されていません。passportToVCはパスポートの選んだフィールドをコピーし、DCP の署名は保持しません。bundleToVPは、渡された署名付きバンドルをdcpBundleに保持し、それは DCP の検証器で別に確認しなければなりません。その確認は、周りの VP のholder、created、コピーされたクレデンシャルのフィールドを認証しません。 - コンテキストの URL。 生成される DID Document は、
@contextにhttps://w3id.org/security/suites/ed2519-2020/v1を挙げますが、これは Ed25519-2020 のスイートの URL の誤記です(index.js)。別の変更で修正されるまで、出力を W3C の DID に準拠した JSON-LD として扱わないでください。 - 名前空間。 このリポジトリは、
did:dcp:とPostQuantumVerificationKey2024を独自の識別子として使います。それらの DID リゾルバーも登録の証拠も提供していないため、外部の DID/VC のツールがそれらを認識すると仮定しないでください。
サポートする DCP の仕様¶
DCP-01 から DCP-09。以下に挙げるフィールドの部分的な対応付けで、上記の制限があります。これらの仕様の完全な実装ではありません。
概要¶
このブリッジは、DCP-AI の身元のレイヤーと W3C の分散型アイデンティティのエコシステムとの相互運用性を実現します。次の双方向の変換をサポートします。
- Responsible Principal Record ↔ DID Document — DCP の人間の身元を、RPR の鍵から導出した検証方法を持つ
did:dcp:メソッドの DID に対応付けます。 - Agent Passport ↔ Verifiable Credential — DCP のエージェントの証明を、能力、責任のモード、管轄を含む W3C の VC として表します。
- Signed Bundle → Verifiable Presentation — 外部の検証者に提示するため、DCP の Citizenship Bundle 全体を W3C の VP として包みます。
関数¶
| 関数 | 方向 | 説明 |
|---|---|---|
rprToDIDDocument(rpr) |
DCP → W3C | Responsible Principal Record を DID Document に変換する |
didDocumentToRPR(didDoc) |
W3C → DCP | DID Document を RPR の骨組みに戻す |
passportToVC(passport, issuerDid) |
DCP → W3C | Agent Passport を Verifiable Credential に変換する |
vcToPassport(vc) |
W3C → DCP | Verifiable Credential をパスポートの骨組みに戻す |
bundleToVP(signedBundle, holderDid) |
DCP → W3C | 署名付きバンドルを Verifiable Presentation として包む |
rightsToServiceEndpoints(rightsDeclaration) |
DCP → W3C | 権利の宣言を DID のサービスエンドポイントに変換する(DCP-08) |
DID メソッド¶
このブリッジは did:dcp: メソッドの名前空間を使います。DID の識別子は、RPR の人間の ID から直接導出されます。
検証方法は、Ed25519(クラシカル)とポスト量子の鍵の種類の両方をサポートします。
使い方¶
// Fragment: myRpr, myPassport and signedBundle come from your application
import { rprToDIDDocument, passportToVC, bundleToVP } from '@dcp-ai/w3c-did';
// Convert an RPR to a DID Document
const didDoc = rprToDIDDocument(myRpr);
// Issue a Verifiable Credential for an agent
const vc = passportToVC(myPassport, 'did:dcp:issuer-id');
// Wrap a full bundle as a Verifiable Presentation
const vp = bundleToVP(signedBundle, 'did:dcp:holder-id');
注記¶
- 骨組みへの変換(W3C → DCP)は部分的な記録を生成し、有効な DCP のアーティファクトになる前に追加の処理(鍵 ID の再計算、署名など)が必要です。
publicKeyMultibaseの値は base64url を base58btc と表示しており、multibase の利用者に対して元の鍵を正しくエンコードしていません(制限を参照)。