2023年12月18日月曜日

Worldcoinによる金融包摂とデジタルアイデンティティ

こんにちは、富士榮です。

2023年も終盤に近づいてきたということで、今年もDigital Identity技術勉強会 #iddance Advent Calendar 2023に参加しています。


今回のネタはWorldcoinで話題のWorld IDを探っていきたいと思います。

ということでこんな内容でお届けします。

  • Worldcoinとは
  • World IDの取得と確認
  • Identity ProviderとしてのWorld ID
  • Incognito Actions(おまけ)

なお、お約束ですが本記事ではWorldcoinを含む特定の仮想通貨の購入や投資などを推奨するものではありません。あくまでDigital Identity関連技術の観点からWorldcoin/IDを見ていきたいと思います。


Worldcoinとは

Worldcoinというキーワードを検索するとOpenAIの創業者であるSam Altman氏が共同創業者した仮想通貨のプロジェクトという切り口で紹介されている記事が多くヒットしますが、本家Worldcoinのサイトを見るとこのように記載されています。

Worldcoin is an open-source protocol, supported by a global community of developers, individuals, economists and technologists committed to expanding participation in, and access to, the global economy. The Worldcoin Foundation is the steward, and will support and grow the Worldcoin community until it becomes self-sufficient. Tools for Humanity helped launch Worldcoin, and currently serve as advisors to the Foundation and operators of the World App.(原文)

ワールドコインはオープンソースのプロトコルであり、開発者、個人、経済学者、技術者からなるグローバルコミュニティによって支えられている。Worldcoin財団はスチュワードであり、Worldcoinコミュニティが自立するまでサポートし、成長させる。Tools for Humanityはワールドコインの立ち上げを支援し、現在は財団のアドバイザーとワールドアプリの運営者を務めている。(Deeplで機械翻訳) 

また、同サイトにはWorldcoinに関するホワイトペーパーも公開されており、その中に端的にWorldcoinはこのように解説されています。
Worldcoin was founded with the mission of creating a globally-inclusive identity and financial network, owned by the majority of humanity. If successful, Worldcoin could considerably increase economic opportunity, scale a reliable solution for distinguishing humans from AI online while preserving privacy, enable global democratic processes, and show a potential path to AI-funded UBI.(原文)

Worldcoinは、人類の大多数が所有する、グローバルに包括的なアイデンティティと金融ネットワークを構築することを使命として設立された。成功すれば、ワールドコインは経済機会を大幅に拡大し、プライバシーを守りながらオンライン上で人間とAIを区別するための信頼できるソリューションを拡大し、グローバルな民主的プロセスを可能にし、AIが資金を提供するUBIへの潜在的な道を示すことができる。(Deeplで機械翻訳)

要するに金融包摂の文脈で設立されたデジタルアイデンティティと金融ネットワークで、UBI(ユニバーサル・ベーシック・インカム)を実現することも一つのゴールとして定めている様です。

また、同時にWorldcoinを構成する要素についても以下のように説明が記載されています。

Worldcoin consists of a privacy-preserving digital identity network (World ID) built on proof of personhood and, where laws allow, a digital currency (WLD). Every human is eligible for a share of WLD simply for being human. World ID and WLD are currently complemented by World App, the first frontend to World ID and the Worldcoin Protocol, developed by the contributor team at Tools for Humanity (TFH).(原文)

ワールドコインは、個人であることの証明の上に構築されたプライバシーを保護するデジタルIDネットワーク(ワールドID)と、法律が認めるデジタル通貨(WLD)で構成されている。すべての人間は、人間であるというだけでWLDの分け前を得る資格がある。World IDとWLDは現在、Tools for Humanity (TFH)の貢献者チームによって開発された、World IDとWorldcoinプロトコルの最初のフロントエンドであるWorld Appによって補完されている。(Deeplで機械翻訳) 

なるほど、Worldcoinのサイトのトップに記載されていたWorld ID、WLD、World Appはそれぞれ以下のような関係性だということがわかります。(トップページからリンクされるそれぞれのページの解説文からも補完)

  • World ID:デジタルIDネットワーク
    • A more human passport for the internet. More powerful. More integrations. More human.(原文)
    • インターネットのより人間的なパスポート。よりパワフル。より多くの統合。より人間的に。(Deeplで機械翻訳)
  • WLD:デジタル通貨(Worldcoin Token)
    • A more human token freely, equally, and globally distributed to unique humans.(原文)
    • より人間的なトークンは、自由に、平等に、そしてグローバルに、ユニークな人間に配布される。(Deeplで機械翻訳)
  • World App:フロントエンドアプリケーション
    • More human access to the global economy with identity and finance for all. Privacy‑first. No fees. 24 hour support.(原文)
    • すべての人のためのアイデンティティと金融で、より人間らしいグローバル経済へのアクセスを。プライバシー第一。手数料無料。24時間サポート。(Deeplで機械翻訳)
なんとなくわかってきました。
要するに金融包摂(世の中には銀行等の金融システムにアクセスできない人たち、要するに銀行口座が持てず社会経済に参加できない人たちが多く存在する。その人たちの経済参加を促進すること。この辺りはThe World Bankのページが参考になります。)を実現するには、人類が区別されることなくアクセスできるアイデンティティ・ネットワークに支えられたユニバーサルなベーシック・インカムを含む金融システムが必要であり、Worldcoinはその理想を実現するためのプロジェクト、という位置付けということです。


World IDの取得と確認

では、早速World IDを取得してみたいと思います。
World IDアカウントを作成するのに必要となるのは、以下のものです。
  • スマートフォン(iOS/Android)にインストールするWorld App
  • SMSの受信できる携帯電話番号(なくてもアカウントは作成できます)
スマホを持っていない人は金融包摂的にどうなるのか?という疑問は抱きつつ、World Appをインストールしセットアップを続けます。

もちろんこの状態でもWorld IDは作成されているのですが、World IDのもう一つの特徴は本当に人(Human)であることをOrbというデバイスを使って確認(物理的にOrbが置いてある場所まで行って対面で確認を行う)を行うことにあります。

まだID確認を行なっていない状態だとアプリの上部にVerify your World IDというリンクが表示されるのでタップすると近所に存在するOrbの場所が表示されますので、場所によっては予約をした上で現地を訪問して存在確認を行います。なお、この際に虹彩登録を行う必要があることから謎のシステムやデバイスに生体情報を提供するのはどうなのか?という議論も存在します。確かに私も渋谷の指定の場所へ行ってOrbでID確認をしてきましたが、かなりカジュアルな感じで登録ができてしまうので、偽Orbを作って生体情報だけを搾取する人たちが出てきても不思議ではありません(Orbを操作してくれる人も、Orbそのものについても登録しようとしている人から見て正当性を確認する手段がない)。この辺りは今後の課題なんだと思います。

なお、ID確認時には法的なアイデンティティ・ドキュメント(免許証などの身分証明書)の提示は求められないので、この辺りは金融包摂のため、という考え方がベースにあるのだと思います。ただ、一人のユーザが複数のWorld IDを取得できないようにするための虹彩情報の突合・重複確認がどこまで本当に実施されているのか?などはよくわかりません。

こんな感じのデバイスが置いてあるのでアプリのQRを読み込ませた後で虹彩登録を行います。登録自体は5分もかからずサクッと終わります。


なお、このID確認を行わないとベーシック・インカムとなるWLDを受け取ったり取引することができません。ちなみにWorld Appをインストールすると定期的(週一回くらい?)にGrantといってベーシック・インカムとしての3〜10程度のWLDが付与されます。現時点で1WLDは日本円で368〜9円程度なので、隔週で1,000円もらえる感じです。実際に利用する際は暗号資産取引所などで日本円へ換金することもできるんじゃないかと思います。(やったことありませんが)※追記:12/18の朝にみたら爆上がりしてました。624円とかになってました。

いずれにしても確認が終わるとVerifiedとして記録がされます。



Identity ProviderとしてのWorld ID

さて、デジタルIDの話なので、あまり仮想通貨の話に行っても仕方がないのでWorld IDの使い方の話をしたいと思います。

非常にざっくりいうと、World IDもOpenID Connectに対応したIdentity Providerとしての機能を持っています。

開発者ポータルへアクセスし、サインアップすると一般のIdentity Providerと同じようにクライアント登録などができる仕組みが提供されています。

ちなみにAuth0(Okta CIC)ではすでにマーケットプレイスにSign in with Worldcoinの機能が提供されていますので、クライアントID/シークレットの登録とRedirectURIを設定すると簡単にWorld IDによるサインインが実装できます。

開発者ポータルでClient ID/Secret/RedirectURIの設定を行います。

こちらはAuth0(Okta CIC)の画面。Social Connectionsとして定義します。

Sign in with Worldcoinを起動するとQRコードが出てくるので、World AppでQRコードを読み込み、サインインします。

World App側でQRコードを読み込むとVerify with World IDの画面が表示される、確認に成功するとサインインされます。


World IDのOpenID Connectの実装に関してはドキュメントが公開されているので、こちらを見ると自作のWebアプリケーションや他のIDaaSへの接続も容易です。(最近World IDのバージョンが2.0に更新され、PKCEのサポートなどが追加されました)

簡単なRelying Partyを書いて実際のid_tokenの中身などを確認していきましょう。細かいコードは省略しますが、結果的にこんなid_tokenが返ってきます。


ポイントはこの辺りです。ドキュメントをみるとhttps://id.worldcoin.org/betaのエレメントはdepricateっぽいですが、verification_levelとしてOrbで確認済みのWorld IDかどうかがわかるような仕組みになっています。

  "https://id.worldcoin.org/beta": {

    "likely_human": "strong",

    "credential_type": "orb"

  },

  "https://id.worldcoin.org/v1": {

    "verification_level": "orb"

  },

ちなみに、Orbで確認を行なっていないWorld IDでもアクセスしてみるとverification_levelがdeviceとなっています。

  "https://id.worldcoin.org/beta": {

    "likely_human": "weak",

    "credential_type": "device"

  },

  "https://id.worldcoin.org/v1": {

    "verification_level": "device"

  },


ところで、Auth0でも簡単なRelying Partyでも実装できたので、ついでにAzure AD B2Cでも実装してみようと思います。Discoveryもサポートしているし、openid-configurationを見るといつもの鬼門のresponse_mode=form_postもサポートしているようなので試してみます。

こんな感じでIDプロバイダーを設定します。

ところが、response_modeをform_postにするとWorld IDのAuthorizationエンドポイントでWorld Appでサインインしたところjsのエラーが出て止まってしまいます。どうもCSPの設定がうまくできていないみたいですね。。。


ということで、response_modeをqueryに変更して再度試してみるとTokenエンドポイントへのアクセスでエラーが出ているようです。
ここは結構ハマったのですが、Postmanなどで順番にアクセスするとちゃんとid_tokenが取得できるので、Azure AD B2CがTokenエンドポイントへアクセスする際に何か変なヘッダがついていたりするんだろうな、、(あるいは逆にUser-Agentがないと返事をしないTokenエンドポイントがいたりするのでそういうケースかも、、)と思いダミーのTokenエンドポイントを作りPostman経由の場合とヘッダを比較。

結果、

expect: '100-continue'

が犯人でした。

PostmanでもexceptヘッダをつけるとWorld IDのTokenエンドポイントがエラーを出しました。どうやらContent-Lengthの事前通知には対応していないようです。

とはいえ、APIクライアントとなるAzure AD B2C側のリクエストをここまで細かいレベルで調整するのはカスタムポリシーを使っても無理っぽいので、現時点では諦めます。(どうしても実装する場合はTokenエンドポイントとの間にゲートウェイモジュールを立ててProxyさせる形になると思います)


Incognito Actions(おまけ)

ここからはおまけですが、World IDにはIncognito Actionsという機能があります。これはユーザがSign in with World IDを含むVerifyをする対象のアプリケーションを簡単に作るための機能です。(例えば、投票などが想定されています)
開発者ポータルからIncognito Actionsメニューから定義体を作っていくことができますが、その際にVerifyの回数の制限などをつけることができます。
例えば、Uniqueだと1つのWorld IDにつき1回しかVerifyができないようなアプリケーションが作れますし、2 Verificationsや3 Verificationsのように2回・3回まで許可する設定やUnlimitedのように制限なしの設定もできます。
本来はIDKitというSDKやAPIを使ってアプリケーションを構築していくことになるのですが、管理者ポータルからテストをするためのKioskモードが用意されているのでこちらから確認していきます。
Enable Kiosk〜Open Kioskでテスト用の画面が開きます。

先ほどのSign in with World IDと同じようにWorld AppでQRコードを読み込みます。今回はUniqueモードを設定したので最初の1回はちゃんとVerifiedとなります。
しかし、再度同じようにKioskを起動して同じWorld IDで確認をするとAlready verifiedとエラーが出ます。
簡単な投票や特典の配布などのアプリを作るのに良さそうですね。



ということで、Worldcoin / World IDを触ってみました。
金融包摂という社会課題への対応をしていくという方向性については共感できるものがありますし、うまく社会に浸透していくことができればベーシック・インカムはおいておいて金融システムからネグレクトされた人々にとっては救いになり得るのかもしれません。
ただ、先に書いた通りOrbの真正性などまだまだ情報の非対称性など粗いところも多く、まだまだポリシーやガバナンス面を含めやるべきことはたくさんあるんじゃないかと思います。Sam Altman氏もOpenAIで得られた知見や利益を、打ち上げ花火だけではなく、うまく実際の社会のために役立てられるといいですね。