メインコンテンツまでスキップ

アーキテクチャ概要

VC Knots は、Verifiable Credentials(VC)エコシステムを構築するためのプラガブルなフレームワークです。

VC エコシステムでは、OpenID4VCI / OpenID4VP などの標準プロトコルによる相互運用性が重要である一方、実際のシステム構成は用途や環境によって異なります。

例えば、利用するクラウド環境、ストレージ、鍵管理方式、Credential の発行ルールなどは、導入するシステムごとに異なる要件が存在します。

VC Knots では、このような差異に対応するため、provider として以下の拡張ポイントを提供しています。

  • 鍵生成、Nonce 生成、識別子管理、Credential 発行ポリシーなど、システム固有のビジネスロジックを差し替え可能にします。
  • データストア、KMS など外部インフラへの接続を抽象化し、AWS や Google Cloud などの環境に対応できます。
  • 詳細についてはプラグイン開発 - Custom Provider の作成を参照してください。

これにより、ビジネスロジックとインフラ依存を分離できます。

provider を組み合わせることで Issuer、Wallet、Verifier を効率的に実装できます。 また、リポジトリ内の Samples により利用方法や推奨されるデプロイ構成を確認できます。

全体構成

VC Knots には次のレイヤーが存在します。

レイヤー役割
ApplicationsVC Knots を利用して構築される Issuer、Wallet、Verifier のアプリケーションです。
FeaturesOpenID4VCI / OpenID4VP のプロトコルや Wallet 機能を提供します。
Infrastructure Integrationsデータベースや KMS などの外部サービスとの接続を提供します。
Infrastructureデータベース、ストレージ、鍵管理サービスなど、 Infrastructure Integrations が接続する外部インフラです。

VC Knots はレイヤーのうち Features と Infrastructure Integrations の機能を提供しています。これらは provider を通じて各システムの要件に応じて差し替えや拡張が可能です。

各システムで構築する Infrastructure の上に Applications が構築されます。Applications は Features を利用してビジネスロジックを構築します。Infrastructure Integrations は Features と Infrastructure の間のやりとりを担います

以下の図は対応範囲を示しています。

overview

パッケージ構成

Features

パッケージ言語役割
@trustknots/vcknotsTypeScriptOpenID4VCI / OpenID4VP、Issuer、Verifier、Authorization Server の実装
github.com/trustknots/vcknots/walletGoWallet 機能、DID・鍵管理、Credential の管理

Infrastructure Integrations

パッケージ言語役割
@trustknots/awsTypeScriptDynamoDB、KMS、Secrets Manager など AWS サービスとの連携を提供
@trustknots/google-cloudTypeScriptCloud Firestore、Cloud KMS、Secret Manager など Google Cloud サービスとの連携を提供

Samples

パッケージ言語役割
@trustknots/server-coreTypeScriptサンプルサーバーで共通利用するフレームワークおよび共通コンポーネントを提供
@trustknots/serverTypeScriptシングルテナント構成のサンプルサーバー
@trustknots/multi-serverTypeScriptマルチテナント構成のサンプルサーバー
@trustknots/server-awsTypeScriptサンプルサーバーを AWS(Lambda + CDK)へデプロイするための構成例
@trustknots/server-google-cloudTypeScriptサンプルサーバーを Google Cloud へデプロイするための構成例

Verifiable Credentials ワークフローと VC Knots の役割

VC Knots は OpenID4VCI / OpenID4VP の標準プロトコル処理を Features として提供し、 Applications はこれらの機能を利用して Issuer、Wallet、Verifier を構築します。

以下では、代表的な VC 処理フローにおける各コンポーネントの役割を説明します。

Credential 発行フロー(OpenID4VCI)

Credential 発行(OpenID4VCI)の処理は、次の流れで実行されます。

  1. Wallet は OpenID4VCI の認可・トークン取得を経て、Issuer に Credential Request を送信します。
  2. Issuer は VC Knots に Credential 発行処理を委譲します。
  3. VC Knots は Infrastructure Integrations を利用して、Credential の発行に必要なデータの取得や鍵管理サービスへのアクセスを行います。
  4. VC Knots は取得した情報を基に Verifiable Credential を生成・署名します。
  5. 生成された Verifiable Credential が Wallet に返却されます。

Presentation 検証フロー(OpenID4VP)

Presentation 検証(OpenID4VP)の処理は、次の流れで実行されます。

  1. Verifier は Wallet に Authorization Request を送信し、Verifiable Presentation を要求します。
  2. Wallet は Verifiable Presentation を含む Authorization Response を Verifier に返却します。
  3. Verifier は VC Knots に Presentation の検証処理を委譲します。
  4. VC Knots は Infrastructure Integrations を介して DID Resolver や Trust Registry などの外部サービスへアクセスします。
  5. VC Knots は取得した情報を基に DID の解決、Presentation の署名検証、Credential の妥当性検証を実行します。
  6. 検証結果が Verifier に返却され、Verifier は検証結果に基づいて Presentation を受け入れるかどうかを判断します。