本稿でも何度か紹介しているWeb5というウェブアプリケーションの構成を変えることでベンダロックインやプライバシーの問題を改善する構想がありますが、今回はその一角を担うVerifiable Credentials (VC; 検証可能な資格情報)について深掘りしてみました。

VCとして考えられるものはたくさんあり、例えばツイッターのアカウントの所有権や運転免許証、保証書やレシートのようなものもあります。そして、その中には有効期限を待たずして失効しうるものもあります。(免停を受けた、アカウントを削除したなど)

しかし、VCの仕様には失効させる手順や有効性の確認方法は定義されていません。あくまで資格情報自体についての仕様だからです。

というわけで、一般的なPKIやLNDで使われているMacaroonでどのように資格を失効させたり、有効性を確認しているのか調べてみました。

一般的なPKIの場合

インターネットで利用されるTLS (SSL)など、公開鍵暗号を利用して通信する仕組みには多くの場合「信頼できる認証局 (CA)」が存在して、全体がPKI (公開鍵暗号基盤)として成り立っています。このとき、認証局の役割は証明書の内容が正当であることにお墨付きを与えることです。

CAが持つ情報に失効リスト(CRL)というものがあり、例えば証明書が不正に発行されていたことが発覚した場合や証明書に対応する秘密鍵が流出した際に、既存の証明書を失効させたという情報が載ります。通信を開始する際にクライアントはCRLを問い合わせることで、通信相手の証明書が失効していないことを確認します。

ただ、CRLに依存することはそのCAに依存することであるため、PKIの仕組みの単一障害点になりうることは注意すべきかもしれません。

逆にTorなどでは公開鍵・秘密鍵の保有のみをもって相手を認証するためCAは存在しませんが、Torに使用している秘密鍵が流出すればそれを失効させる手段はなく、なりすまされてしまう可能性があります。

MACAROONの場合

MacaroonはGoogleが内部で使用している認証トークンの規格の1つで、それ以外に採用例は少ないのですが、奇しくもLNDでAPIの認証に採用されています。

Macaroonにはプログラマビリティ面でいくつか大きな特徴があり、第三者が発行する別のMacaroonを利用条件として要求する("third-party caveats")ことができること、様々な制約をトークン自体に記述することができることなどがその例です。

つまりアプリケーションでの活用という面では、Web5ではユーザーがあらかじめ取得していたVCの提示を求めることができるところ、Macaroonではユーザーが第三者から取得する別のMacaroonの提示を求めることができます。また、トークン自体に有効期限などを記述できるため、切れていればユーザーは再取得して提示することになるでしょう。

ただし、有効期限が切れる前に失効する可能性のあるものは発行日時を指定し、発行されてから提示されるまでの数秒~数分間で失効していないことを信じるしかありません。つまり資格を失った直後にその資格を利用するような不正を防ぐことは難しそうです。

ちなみに資格情報をある秘密鍵の所有者に紐づけるDID+VCとは異なり、Macaroonは完全にベアラートークン(トークンの保有者に権限を与える)でトークン自体の譲渡が可能なため、利用シーンは異なります。

VCはどうすべきなのか

さて、冒頭で述べたようにVCの仕様には資格情報の記述方法こそあれど、失効や有効性の問い合わせ("状態チェック")についてのプロトコルはスコープ外として規定されていません。VCが失効していないことはどのように確認すれば良いのでしょうか?

実はそこに目をつけて、Credential Status List 2021 (VC-CSL2021)という仕様が別で開発されていることに気が付きました。パフォーマンスやプライバシーの面で懸念が多い機能なため、これらについてユーザーや検証者、発行者の負担を軽減すべくデータ圧縮が簡単な形式を用いて効率的でプライベートな仕組みが提案されています。

概念的には通常のPKIにおけるCRLと似た仕組みなので、デメリットも引き継ぐと考えて問題ないでしょう。追加の欠点としては発行者が大量のVCについて検証に必要なビット列を用意するため、そのビット列に大量のVCの有効性情報が格納されていれば問い合わせ時にある程度のプライバシー効果がありますが、少数のVCしか発行されていない場合は発行者にVCの利用状況がある程度漏れてしまうという問題があります。

(例えばアダルト向けサイトからのVC有効性問い合わせの場合、「この中の誰かがポルノサイトを利用している!」とわかり、その母数が大きくない場合特定されやすくなるという状況です)

VC-CSL2021について詳細は以下のURLからご確認ください。
https://w3c-ccg.github.io/vc-status-list-2021/

まとめ

・検証可能な資格情報(VC)はWeb5の1つの柱
・有効期限を待たずに失効する可能性のあるVCのステータスを問い合わせるプロトコルは未定義で、VC-CSL2021というものが開発されている
・VCの利用時にサービスから発行者に問い合わせが行われるので、ユーザーのプライバシーが保護される仕組みが求められる