2024年3月31日日曜日

OpenID Providerを作る)そろそろログイン機構の実装を始める

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

最近Updateできていなかった自作OpenID Providerについて、そろそろログイン機構の実装戦略について考えてみたいと思います。

その前にこれまでのおさらいです。

その前にこれまでのおさらいです。


今回、最低限実装したい機構としては、

  1. CSRF対策を行う
  2. Passkeyで認証する
  3. セッション管理(認証セッションがなければ認証を求める)を行う
  4. 認証が終わったら元のURLへ戻す

くらいかな、と思います。


となると、骨組みとしてはこんな感じかと。(node.js + Express前提です)

  • 認証ミドルウェアの実装
    • 認証セッション確認
    • 認証セッションがあればnext()で呼び出し元へ
    • 認証セッションがなければ、
      • セッションに呼び出し元のURLを保存
      • セッションと紐づけた状態でCSRFチェックのトークン発行
      • ログイン画面へリダイレクト(CSRFトークンを埋め込む)※今回、認証方式はPasskeyのみを考えており、Passkeyの場合はChallengeの生成も行うので兼用しても良いのかも。この辺はritou先生がコメントしてくれるでしょう
  • ログイン画面の実装
    • 認証ミドルウェアから呼び出される
    • ログイン画面のレンダリング
    • PasskeyのブラウザAPIの実装
    • ブラウザAPI実行結果をPOSTする
  • ログイン結果検証APIの実装
    • ブラウザAPIの実行結果の検証(CSRF対策としてのChallengeの検証も含む)
    • 検証に成功したら認証セッション生成
    • セッションに保存してある呼び出し元のURLへ処理を戻す

ぼちぼち実装始めてますので、まとまったら投稿していきたいと思います。

では。

2024年3月30日土曜日

自己主権型IDとフェデレーション型IDに関する議論

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

今日はちょっと前の記事ですが、SSIとFederationについてHeather Flanaganさんが考えを書いているので紹介しようと思います。IDProや古くはKantaraやREFEDSなどで活動されている方ですね。しかしSSIがいいのかFederationがいいのかっていうのは色々なところで色々な人たちが議論をしていますが、明快な答えってないですよね。まぁそれもそのはず「時と場合による」話でしかないのと、一番大きいのが技術の話をしているのか思想の話をしているのか、みなさんMixしているのでクリアな議論にならないっていうのがあるからですね。

ということでちょっと見ていきましょう。
Federated Identity and SSI – YMMV

ご本人もYMMV(your mileage may vary)って書かれているように、「どう受け取るかはみなさん次第」ということです。

また冒頭にも記載されていますが、そんなに世の中単純じゃないので全てにフィットするものなんてないよね、ということを書かれています。
There is no “one size fits all,” though passionate proponents of various technologies may beg to differ. Alas, the world is not that simple:
そして、こうとも書かれています。
誰もが SSI という用語を好むわけではないことを認識しましょう。デジタルウォレットテクノロジーがこのカテゴリーに該当するかどうかは不明です。そうだと言う人もいれば、そうでない人もいます。 SSI の初期の支持者たちがほぼブロックチェーン技術だけに焦点を当てていたことに、すぐに嫌悪感を抱く人もいます。
すみません。技術としてブロックチェーンの良し悪しを述べるつもりはありませんが、私もSSIアレルギーっぽくなってしまってきているのはこの点なのかもしれません。

そして、色々な切り口でSSIとFederated Identityを比較していっています。

Dicsovery

まずはDiscoveryです。
どちらのモデルでも、個人がどの資格情報を使用するかを選択できる必要があります。これは、Federated Identity 内で、リストから ID プロバイダー (IdP) を選択するか、その ID をダイアログ ボックスに入力できることを意味します。 SSI モデルでは、これは、ローカルに保存された資格情報のリストから選択できること、または適切な資格情報を保存するために使用される適切なコンテナ (別名デジタル ウォレット) を選択できることを意味します。
FederatedモデルではいわゆるNASCAR問題を引き起こす原因でもあるのがこのDiscovery問題ですね。先日ポストしたWebfingerによるDiscoveryや学術機関で使っているDiscovery Service(DS)なんかはこの課題に対応するためのソリューションとして考えられましたが、まだ完全に解決しているとは言えない状態です。


共有される情報の制御

次に触れられているのがIdPとRPの間で共有される情報の制御に関する相違点です。
When talking about federated identity models, protocols like the Security Assertion Markup Language (SAML), OAuth, and OpenID Connect are what describe (and constrain) everything including the claims, the assertions used, the structure of the attributes shared, the way identity provider discovery is handled, and more. A great deal of control is given to both the RP and the IdP, and there is a coarse level of control for the individual (generally in the form of “you can either choose to log in or not, but you aren’t guaranteed control over what information is shared as a result”).

とあるようにやり取りされる情報の内容や構造についての制御の大半はIdPとRPが行うことになり、ユーザが制御できるのは「ログインするのか、しないのか?」程度になってしまいます。

その点、SSIのモデルではユーザによる選択(特にSD-JWTやmDLなどの選択的開示)が中心となっています。

(個人的な意見)これはどうなんだろうなぁ・・・。Federatedだからユーザに選択権がないっていうのは既存のIdPの実装の問題なんじゃないかな?とも思います。本来は属性の選択的開示をするように属性提供同意画面でオプトアウトできるようになっているべきだし、先ほどのNASCAR問題はあるものの使うクレデンシャル(あえてクレデンシャルと言いますが使うIdPのこと)も自分で選ぶことができるようにDiscoveryの設計をするのがRP側の仕事だったのでは?とも思います。これはSSIだったとしてもVerifierが何を求めるのか、Issuerが何を発行するのか、Walletがその情報をどう扱うのか、、など本当にユーザに制御権ってあるんでしょうかねぇ。。とは言え、Federatedモデルではそのあたりの実装有無をIdPやRPが握ってしまっているのは事実ではあります。

横道にそれました。

クロスデバイスのサポート

もう一つのSSIの特徴としてパスワードからの脱却の文脈を含めクロスデバイスの話が出てきます。

(たとえば) 複数のデバイスにパスワードを記憶したりコピーしたりする必要があるのではなく、1 台のモバイル デバイスに保存されている資格情報を、デスクトップやタブレットなどの別のデバイスの認証または認可プロセスで使用できます。

CIBAとかDevice Code Flowがあるじゃないか、とかパスキーでよくない?という話もありそうですが、まぁ確かに特徴の一つではあります。

一方で課題も

これ、本当に大切な問題だと思います。UXとプライバシー。

UX の課題は非常に重大です。 SSI モデルを前進させるために開発中のテクノロジーは、単なる ID をサポートするものではありません。また、支払いシステム、交通チケット、図書館カード、保険カード、ホテルのキー、車のキーなど、リストはさらに続きます。このモデルを、これらすべてのカードを物理的な財布に入れているのと似ていると比較することはできますが、カードが多すぎて、必要なときに適切なカードを見つけることができないという点が生じます

先ほどのNASCAR問題にも通じますが、これまでIdP側で発生していた問題が手元(Wallet)に移動してきただけです。

プライバシーの問題も重大です。

プライバシーへの配慮が使いやすさをさらに難しくしています。資格情報はデジタル ウォレットに保存されることが多く、そのウォレットはランダムなリクエストから資格情報を保護します。おそらく、物理的なウォレットが保持するカードと何の関係もないのと同じように、ウォレットは、保持する認証情報と何の関係も持つべきではありません。ここでの複雑さの可能性を最大限に高めるために、さまざまな認証情報を保持するウォレットが複数ある可能性があります。 

これ、本当に難しい問題でWallet提供者は、そのWalletの中にユーザが何を入れるのか?を把握できたらFederated時代のIdPによる行動把握の比較にならないくらいヤバい話になると思います。この辺りは特に政府が提供するWallet、なんて話も出ていますが十分すぎるくらいの透明性を持たせないといけないと思います。

Digital Identity Wallet(DIW)に関するPoC開発・調査について

https://trustedweb.go.jp/public-offering/2023/trusted_web2023_diw

さらに、どこまでユーザに責任を押し付けるのか、という問題もあります。

人々が正しい選択をする可能性は低いと想定し、さまざまな自由や技術革新を制限することで国民を守るパターナリスティックな国民国家に誰もが住みたいわけではない。とはいえ、その行動の影響が明らかかどうかにかかわらず、自分の行動に責任を個人に負わせる完全な自由主義的な環境での生活を誰もが望んでいるわけではありません。

この辺りは先日ポストした「自己主権型アイデンティティは本当か?情報銀行からの学びはあるのか?」にも書きましたが、本当の意味での情報銀行的な役割をWalletプロバイダが追うことになる日も来るのかもしれません。

https://idmlab.eidentity.jp/2024/03/blog-post_11.html


まとめ

結局結論なんて言うものは出ないわけですが、彼女の以下の3つの言葉が重要だっていうことです。

従来のフェデレーション ID モデルと新しい SSI アーキテクチャは相互に排他的ではありません。彼らはさまざまな問題を解決することだけに集中します。 

現在見られるテクノロジーは完全に完成したわけではなく、技術者が望むすべてを解決するにはまだ成長する必要があります。

これらのテクノロジーの開発と展開の指導に確実に貢献するために、ディスカッションに参加することです。 


これからもコントリビューションしていきましょう。

2024年3月29日金曜日

IIWの前日にパーソナルAIとVRMに関するイベントがあります

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

来月、恒例のIIW(Internet Identity Workshop)がマウンテンビューで開催されますが、前日にDoc SearlsのProject VRMがやっている「VRM Day」があります。(こちらも恒例)

※VRM: Vendor Relationship Management。CRM(Customer Relationship Management)がアテンション・エコノミー(関心の経済。ユーザの関心の分析からリコメンデーションなどOne to Oneマーケティングなどで経済活動を促進する)に対してインテンション・エコノミー(意思の経済。ユーザの意思を中心として経済活動。いわゆる自己主権にも綱がる)を標榜するもの。詳しくはDoc Searlsの著書「インテンション・エコノミー」を読むと良いと思います。


今回のテーマは「パーソナルAIとVRM」ということで非常に興味深いですね。

出典)ProjectVRM

いわゆるSiriやAlexaなどのパーソナルエージェントは私たちの代わりにデジタル空間で活動してくれる、というところにまでは至っていませんが、最近日本でも落合陽一さんが万博のパビリオンに出展すると発表した「Mirrored Body」など、デジタル空間上で信頼性を担保した上で自分の代理(コピーロボット的なイメージ?)として自律的に行動してくれる世の中になると世界は変わるのかな?と思わされます。

出典)サステナブルパビリオンのホームページ

落合さんもMirrored Bodyのコンセプトを語る際にVerifiable Credentialsの重要性について触れていた通り、デジタル空間上でのミラーが確かに私のミラーであることを示したり、データの出自を検証可能な形で提示できるようになっていかないといけないんだと思います。


と、ここまで書いておいてアレなんですが、VRM DayとOpenID Foundation Hybrid Workshopが日程かぶってるんですよね・・・。どっちも行きたいのですが。。


2024年3月28日木曜日

Microsoft Identity Manager向けコミュニティ製のPowerShell MAが更新されています

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

このブログを始めたことはMicrosoft Identity Manager(その頃はIdentity Lifecycle Managerでした。その後、Forefront Identity Manager〜Microsoft Identity Managerにリブランドされました。今でいうEntra ID Connectのベースになっているモジュールです)に関する記事をたくさん書いていたのですが、最近はめっきり触ることもなくなってきていました。

ただ、当時このプロダクトのMicrosoft MVPだったこともあり、当時の開発コミュニティの方々とはそれなりに繋がりが残っていたりします。今回のPowerShell MA(Management Agent)も当時のMVP仲間のSoren Granfeldtの作です。


今でこそ公式にPowerShell MAがありますが、当時は存在しておらず、イベント単位で自由にPowerShellのモジュールを呼び出せる彼のツールは衝撃的でした。なにしろそれまではC#で全部ロジックを書かなければならなかったので。。。

なお、ノンサポートですが工夫をすればEntra ID Connectにもこのモジュールは適用できるはずです(何年か前はできていた。最近は不明)。ロジックの自由度が格段に増すので魔改造派の方は試してみてください。

2024年3月27日水曜日

TBDのVerifiable Credentialsの説明資料が面白い

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

みなさん、TBDってご存知ですか?

https://www.tbd.website/

Twitterの共同創業者のジャック・ドーシーが創設したBlockの暗号資産部門からスタートしたプロジェクトでweb5(web2+3でweb5とのこと)を提唱しているチームです。

https://www.itmedia.co.jp/news/articles/2206/13/news071.html


DIDやVCをやっている人たちが一時期集まったチームでもあり、先日周南公立大学のデジタル学生証プロジェクトでも採用されたプラットフォームを提供していることでも話題になりました。

https://www.shunan-u.ac.jp/news/information/20240228-13942/

 

今日は、web5の細かい話をするわけではなく、このチームが書いている初学者向けのVerifiable Credentialsの解説記事が結構面白かったので紹介します。

https://dev.to/tbdevs/the-illustrated-beginners-guide-to-cryptographic-identity-verification-51f0

※実は、web5のイントロなどもしているシリーズ(全3回)の第2回なので、興味があれば第1回から読んでみると良いと思います。(改めて紹介するかもしれませんが、某X社がネタにされていて面白いです)


ではみていきます。最初からアメリカンな感じです。




第1回を読むとわかるのですが、主人公は某SNSの名称変更に伴い自分のユーザ名を奪われてしまったことからプライバシーとデータのポータビリティについて制御ができることの重要性に気がついてしまいます。

アプリの名前を変えるからあなたのユーザ名を変えるよ!との非情な通知

ポップコーンを食べながら彼氏に愚痴る主人公


そして彼らは旅行に行くわけですが、この辺りからVCが出てきます。


そして、なぜか身分証の話題になりますが、彼はスマホに入ってるから大丈夫!と宣言します。

携帯電話にWalletが入っているから大丈夫!TSAにこれを見せると通過できるよ!


でも、彼女は「ふーん」と塩対応です。

彼女は物理パスポートを使うので長蛇の列へ並びます。


でも主人公以外の3人(彼氏+友人カップル)はそんな彼女を置いてデジタル身分証明書が使えるレーンでスイスイと通過します。付き添ってあげるなり待ってあげるなりすればいいのに・・・



でも主人公も馬鹿ではないので、CLEARレーンに並んで少しでも早く追いつけるようにしようとします。

しかしそこでも事件が起きます。

「奥様、あなたはランダムな本人確認の対象に選ばれました。」

と言われてしまうのです。

そして彼女がパスポートを係員に渡すと、「ああ、私たちは誕生日が同じなんですね!」とか「出身地は美しい島ですよね〜」とか言われてしまいます。(こんな係員いるのかな?)


そして彼女はVCについて飛行機の中で調べ始めます。



調べた結果VCは「過剰な個人データを明らかにせずに、法定飲酒年齢に達していることを証明する必要があるとします。完全な ID を提示する代わりに、ベンダーに VC を提示することもできます。販売者は資格情報を年齢証明として認識し、引き換えにアルコールを提供します。」などのユースケースが出てくるわけです。


とここでこの記事は終わるわけですが、こんなシチュエーションある?と思いつつもデジタル身分証明書としての使い方、選択的開示によるプロイバシー保護についてなど簡易に説明してくれていて面白かったです。

日本でもこういうシナリオで解説書を書くともうちょっと広がるのかもしれませんね。




2024年3月26日火曜日

OAuth2.0 Security Best Current Practiceを読んでみる(8)

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

ようやくこのシリーズも終わりです。

引き続き攻撃パターンと緩和策です。最後の3つを読んでいきます。


攻撃パターンと緩和策

  • クリックジャック
    • 認可エンドポイントにアクセスした時に表示する画面に透明なiFrameを仕込むなどのクリックジャックの話です
    • 認可エンドポイントはMUSTとしてクリックジャック対策をしなければなりません
    • W3CのContent Security Policy Level2以上を適用すべきです
    • こんな風にする感じですね
    • HTTP/1.1 200 OK
    • Content-Security-Policy: frame-ancestors https://ext.example.org:8000
    • Content-Security-Policy: script-src 'self'
    • X-Frame-Options: ALLOW-FROM https://ext.example.org:8000
  • 認可サーバがフィッシングサイトにリダイレクトする
    • 前も出てきたかもしれませんが、正しくredirect_uriが設定されていたとしても攻撃者によってフィッシングサイトに誘導されてしまう可能性はあります。
    • 例えば、無効なスコープの値を指定することでフィッシングサイトへ誘導するケースや、有効出会っても攻撃者によってコントロールされたclient_id、redirect_uriを使った誘導(同意拒否をしても誘導される。他にもprompt=noneで誘導する)ケースがあげられています
    • 認可サーバでこれらを防ぐためにはprompt=noneのケースをのぞき、必要に応じてユーザ認証を行う必要があります
    • また、リスクに応じて追加のアクションを講じるのも一つの手段です
    • 基本的にredirect_uriが信頼できない状況ではリダイレクトするべきではありませんが、信頼できない場合にユーザがリダイレクトするかしないかの判断をするような実装を行なっても良い(MAY)ということです
  • ブラウザ内の通信フローに対する攻撃
    • 認証応答がリダイレクトではなくpostMessageなどで送信されるケースにおいて悪意のある通信先に対して通信が行われるケースがあります
    • 例えば、送信先の制限が不十分な実装をするケースなどが挙げられています。ワイルドカードで送信先が設定されていますね
    • window.opener.postMessage(
    •   {
    •     code: "ABC",
    •     state: "123"
    •   },
    •   "*" // any website in the opener window can receive the message
    • )
    • 他にも送信先のURIの検証が不十分で攻撃者の設定した値になってしまったり、送信元の検証が不十分なケースも想定されるのでURI検証やCSRF対策はしっかりとしておく必要があります
    • その意味で推奨される実装としては、
      • 明確なクライアントオリジンを示す
      • window.opener.postMessage(
      •   {
      •     code: "ABC",
      •     state: "123"
      •   },
      •   "https://client.example" // use explicit client origin
      • )
      • メッセージのバリデーションを行う
      • window.addEventListener("message", (e) => {
      •   // validate exact authorization server origin
      •   if (e.origin === "https://honest.as.example") {
      •     // process e.data.code and e.data.state
      •   }
      • })
    • といった実装が必要となります

ということで、ようやくこれで最後まで読みました。
実装する暇がなかなか取れませんが、徐々にやっていきたいと思います。

2024年3月25日月曜日

送金ユースケースでのVerifiable Credentialの利用

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

単体のVerifiable Credentialsって基本的に単なる検証可能なデータ構造でしかないので、どうやって使うのか?言い換えると検証可能性があることは世界をどう変えていくのか?ということについて色々な人たちががんが得ているわけです。
最近目にして面白いなぁ、と思ったのがDSGV(ドイツ貯蓄銀行協会)の人がドラフトを書いている送金に関するプロファイルです。
Payment Presentation Profile - draft 0

どんなものなのかAbstractを見てみましょう。

The Payment Presentation Profile defines a set of requirements against existing specifications to enable the interoperable presentation of payment data between a payment initiator, wallets and a bank.

This document is not a specification, but a profile. It outlines existing specifications required for implementations to interoperate among each other. It also clarifies mandatory to implement features for the optionalities mentioned in the referenced specifications.

The profile uses OpenID for Verifiable Presentations as the base protocol for the request and verification of W3C JWT VCs as W3C Verifiable Presentations. A full list of the open standards used in this profile can be found in Overview of the Open Standards Requirements.

ペイメント・プレゼンテーション・プロファイルは、ペイメント・イニシエータ、ウォレット、銀行間でペイメント・データの相互運用可能なプレゼンテーションを可能にするために、既存の仕様に対する一連の要件を定義するものである。

この文書は仕様ではなくプロファイルである。実装同士が相互運用するために必要な既存の仕様の概要を示している。また、参照されている仕様で言及されているオプショナリティのために実装が必須である機能も明確にしている。

このプロファイルは,W3C JWT VCをW3C Verifiable Presentationsとして要求及び検証するための基本プロトコルとして,OpenID for Verifiable Presentations を使用する。このプロファイルで使用されるオープンスタンダードの完全なリストは,Overview of the Open Standards Requirementsで見ることができる。

(Deeplで機械翻訳)


デビットカードみたいな感じですね。

支払い要求があったらWalletが銀行の口座に送金指示をかける、みたいな仕組みっぽいです。


支払い先からWalletへ支払いクレデンシャルの発行を依頼するところがOpenID for Verifiable Presentationsなんですね。ユーザは要求に従いクレデンシャルを銀行に対して提示、銀行がVPとVCの検証をして問題なければ実際に支払いが実行される、という仕組みっぽいです。

なんだか車輪の再発明っぽくもありますし、口座間送金のためのネットワークは結局いるんじゃない?と思いますが、送金の意思確認という意味ではまぁ、、という感じです。

いずれにしても色々と考える人たちがいるのは面白いですね。




2024年3月24日日曜日

Entra IDの条件付きアクセス+パスキー(特定のベンダのキーのみを許可する)

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

先日、Entra IDの条件付きアクセスでパスキーの利用を強制する方法を書きました。

https://idmlab.eidentity.jp/2024/03/entra-id_20.html


今回はさらに一歩進めて、特定のベンダの認証器だけを使えるようにしてみたいと思います。

やるべきこととしては認証方法の登録時に認証器のAAGUID(Authenticator Attestation Global Unique Identifier)を合わせて登録することです。このことにより特定の認証器以外は受け付けないように設定を行うことができます。

ちなみにこのAAGUIDですが、えーじさんがBlogに書いていた通り、ボランティアベースでリストが作成されgithubで公開されています。

手動で確認する場合は、このレポジトリのREADMEに書かれているPasskeys Authenticator AAGUID Explorerを使うのが便利だと思います。このリストに記載されているものに加えてFIDOアライアンスのMeta Data Service(MDS)に登録されているものもあるので、両方合わせて表示するにはExplorerの左上にある「Include MDS Authenticators」をクリックすると世の中の認証器はほぼほぼ網羅できると思います。

例えば手元にあったeWBM eFA310 FIDO2 AuthenticatorのAAGUIDは95442b2e-f15e-4def-b270-efb106facb4eということがわかります。


なお、Entra IDに登録済みのセキュリティキーであればアカウントのセキュリティ情報のページからAAGUIDを確認することもできます。


ということで認証方法の絞り込みをしていきましょう。先日のポストの中で認証方法の設定でパスキーのみを設定する方法を記載しましたが、その中で詳細オプションがあることを書きました。この詳細オプションを開くとAAGUIDの許可リストを記載することができるので、許可したい認証器のAAGUIDを先ほどのExplorerやセキュリティ情報のページから取得して登録してあげればOkです。

これで完了です。

未登録のAAGUIDの認証器を使ってログインしようとすると条件付きアクセスポリシーが働き、認証には成功するもののアクセス制限がかかりました。

ということで、認証器の強度評価をして許可リストを作って運用するような環境においてはこの設定を使うことで例えばYubikeyのこのモデルはOKだけど、eWBMのキーはダメ、などの制御を行うことができるようになります。

環境統制レベルが低いパブリックに近い環境で組織内のアプリを使わせたいケースなどにおいてはこのような制御が有効なケースもあると思うので活用してみると良いと思います。

2024年3月23日土曜日

OAuth2.0 Security Best Current Practiceを読んでみる(7)

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

すこし空きましたがこちらも続けていきます。

引き続き攻撃パターンと緩和策です。前回は307リダイレクトまで行きましたので続き13個目/18個のTLSを終端するリバースプロキシから行きたいと思います。


攻撃パターンと緩和策

  • TLSを終端するリバースプロキシ
    • 一般的なWebサーバの構成だとリバースプロキシ(と言うよりもロードバランサーでやることが多いかと)でTLSの終端処理をした上で実際のWebサーバへリクエストをディスパッチすることが多いと思います
    • その際にhttpヘッダーにIPアドレスや証明書とのバインディングの情報などさまざまな情報を付与することがありますが、不正にヘッダを改竄することが攻撃につながる可能性があります(典型的にはX-Forwarded-Forなど)
    • と言うことでちゃんとhttpヘッダのサニタイズをしましょう(MUST)ということです
    • また、リバースプロキシと実際のWebサーバの間のネットワークに攻撃者がアクセスできてしまった場合を仮定して内部ネットワークにおいてもアクセス制御をちゃんとしましょう
  • リフレッシュトークンの保護
    • リフレッシュトークンを使うとアクセストークンが発行できるので、攻撃者にとってはリフレッシュトークンは確かに魅力的な攻撃対象です
    • RFC6749でも転送中や保存中の保護やクライアント認証の実施などの対策を示していますが、ここでは更に高度な保護の方法について考えます
    • クライアントのリスク評価を行った上でリフレッシュトークンの発行の可否を判断する必要があります(MUST)。リフレッシュトークンを発行しない場合は認可コードフローなどでアクセストークンを発行するように構成することができます
    • リフレッシュトークンを発行する際はユーザの同意に基づき、特定のスコープ・リソースサーバへ紐付けられる必要があります(MUST)
    • コンフィデンシャルクライアントの場合はクライアント認証を必須としていますが、パブリッククライアントの場合はmTLS(RFC8705)やDPoP(RFC9449)を使ってリフレッシュトークンとクライアントのインスタンスを紐づける必要があります
    • ローテーションを行って無効にされたリフレッシュトークンも認可サーバは保持しておき、万一不正なクライアントが古いリフレッシュトークンを使おうと試みた場合は古いリフレッシュトークンだけでなく、アクティブなリフレッシュトークンについても無効化するなど予防措置を講じることもできます
    • リフレッシュトークンに紐づくスコープの情報をトークンに埋め込むことで認可サーバは取消対象となるリフレッシュトークンの判別をしやすくなる可能性もあります
    • その場合はデジタル署名を施すなどトークン自体の改竄を防ぐメカニズムも導入する必要があります(MUST)
    • また、パスワード変更やログアウトなどのイベントをトリガーにリフレッシュトークンを無効化することも検討しても良いと思います
    • 通常リフレッシュトークンには有効期限をつけますが、一律で設定しても良いですし、リスクレベルに応じて変更するなどの工夫をしても良いと思います
  • リソースオーナーになりすましたクライアント
    • 認可サーバがclient_credentialsフローをサポートする場合、アクセストークンの発行対象がユーザなのかクライアントなのかを判別することが難しくなるケースがあります
    • 具体的にはクライアント登録を行う際にクライアントIDを任意に決定できる場合、ユーザの識別子(sub)と同じ値をクライアントIDとして登録することで、リソースサーバが当該のアクセストークンがユーザに対して発行されたのかクライアントに対して発行されたのかを混同してしまい、望まぬクライアントがユーザのリソースにアクセスできてしまう可能性があります
    • このことを避けるためにはユーザの識別子とクライアントIDの名前空間を分離して識別可能にしたり、他のプロパティを使ってトークンの発行対象がユーザなのかクライアントなのかを判別できるようにしないといけません

ということで今回はここまでです。
しかし読めば読むほど本当にそんな実装してる認可サーバあるの??って思いますが、こういう形でちゃんと文章として出すことが大切なんだろうなぁ、、と思っています。

2024年3月22日金曜日

IETF 119で発表されたJOSE、COSE、OAuth関連のスペック

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

IETF 119がブリスベンで本日まで開催されています。

実は私はIETFは参加したことがない(昨年の横浜も忙しくて行けなかった・・・)のですが、参加している人たちから色々と情報が流れてきています。

Mike Jonesさんが以下のポストをしています。

Eight Specifications Published in Preparation for IETF 119

https://self-issued.info/?p=2503

ポストによると主にMikeが絡んでいるスペック中心ではありますが、以下のスペックに関するUpdateがあったとのことです。

実装を追いかけている人は必読ですね。

2024年3月21日木曜日

RPは外部IdPをどこまで信頼するべきなのか

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

先日、「外部IdP利用時にRP側"でも"多要素認証を行うべきか」というポストをしました。

結局は”Relying Party”というくらいなのでIdentity Providerに依存する存在にはなるのですが、単に「認証機能を作るのが面倒くさいので外部IdPを使えば運用面・コスト面で楽になるよね」という文脈で語られることも多いのではないかと思います。

前回はacr/amrというツールの観点で少しだけ話をしましたが、本質的にRelying Partyは何をIdentity Providerに”頼って”いるのだろうか・・・ということを考えていく必要があるのではないかと思います。

今日はそんな話です。


Relying Partyとは何なのか?

まず、Relying Partyの定義を見ていきましょう。いつものISO 24760-1:2019のTerminologyを見るとこのように書かれています。

System that relies on other party (identity provider) to provide identity information. Relying party (also known as "service provider") usually relies on identity provider to authenticate the user, and relay the information to the relying party. Relying party has no access to credentials (e.g. passwords), it only knows that the authentication was successful. Identity provider may transfer identity attributes and additional information (such as authorization decisions) to the relying party. Relying party usually has a trust relationship with identity provider.

ID 情報の提供を他者(ID プロバイダ)に依存するシステム。依拠当事者(「サービス・プロバイダ」とも呼ばれる)は通常、ID プロバイダがユー ザを認証し、その情報を依拠当事者に中継することに依存している。依拠当事者はクレデンシャル(パスワードなど)にはアクセスできず、 認証が成功したことだけを知っている。ID プロバイダは、ID 属性と追加情報(認可決定など)を依拠当事者に転送する。依拠当事者は通常、ID プロバイダと信頼関係を持つ。(Deeplで機械翻訳)

これを見ると、

  • ユーザ認証の結果
  • ID属性
  • 追加情報(認可決定など)
といったID情報をIdPからもらって動作するシステムを指すようです。
そして、最後の一文が一番大切な文言です。
依拠当事者は通常、ID プロバイダと信頼関係を持つ。

「信頼関係」が構築されていることが前提ということですね。

信頼関係とは

もちろん単純にクライアント登録、redirect_uriの登録って話ではありません。それは信頼関係が構築された結果であり、それ登録があるから信頼関係がある、という話ではないわけです。(システム構築だけを見ていて、この辺は勘違いされているケースを多々見てきました・・・)

信頼関係を構築する上ではまずはお互いのことを知ることが必要となります。

RPからIdPを見ると、

  • どのようなID情報(属性など)を管理・提供しているのか
  • ID情報がどのような精度・鮮度で登録されているのか(いわゆるIAL)
  • 登録されたID情報は適切に管理されているのか(運用体制など)
  • ユーザ認証はどのような強度で実施されているのか
  • サービスレベル(可用性など)はどのようなレベルなのか
  • どのような技術仕様(プロトコルなど)をサポートしているのか

が気になる点の一例です。

また、同様にIdPからRPを見ても、

  • 提供したID情報を適切に扱われるのか(情報漏洩などへの対策など)
  • どのようなサービスに利用されるのか(反社会的勢力はもちろん、提供したID情報を用いて不適切だったり、責任を負いきれないほどの超重要なシステムに使われていたりしないか、など)
  • どのような技術仕様(プロトコルなど)をサポートしているのか
  • ブランディングを毀損しないかどうか

などが気になります。

信頼「関係」というからには単純に片方向だけでは関係は成立しないわけで、相互に信頼をする必要があります。

また、同様に接続をする断面だけでなく、継続的に信頼し続けるためにはどのくらいのインターバルで何を確認するのか?を確認しておく必要があります。

この辺りを定めたのがトラストフレームワークで、通常は接続するための前提事項や規則などに加えて継続的に誰が何を確認するのか、などの運用についても定義されています。

例えば、国立情報学研究所が定めている学認のフェデレーションに参加する機関に求めるルールが学認技術運用基準として定められています。

https://www.gakunin.jp/document/80

この辺りのトラストフレームワークはOpen Identity Exchange(OIX)が出している「Trust Frameworks for Smart Digital ID」が有名です。

https://openidentityexchange.org/a-guide-to-trust-frameworks-for-smart-digital-id


ソーシャルログインではどうなっているのか

FacebookログインやYahoo! ID連携など広範に使われるソーシャルID基盤ではRPと接続をする都度トラストフレームワークの取り決めをしたり運用の取り決めをするのは不可能に近いので、一般的にRPに開発・接続に関する規約を公開し遵守を求めています。

結果、IdPに非常に優位な状態が出来上がります。。(仕方ありませんが)

例えば、facebookの規約を見てみましょう。

https://www.facebook.com/legal/commercial_terms

4. Limits on Liability: In addition to and without limiting the scope of the “Limits on liability” section in our Terms, you agree that we are not responsible for the actions, services, content, or data of third parties and you release us, our directors, officers, employees, and agents from any claims and damages, known or unknown, arising out of or in any way connected with any claim you have against any such third parties.

4. 責任の制限: 利用規約の「責任の制限」セクションの範囲に加え、またその範囲を制限することなく、利用者は、当社が第三者の行為、サービス、コンテンツ、またはデータに対して責任を負わないことに同意し、利用者がかかる第三者に対して有する請求に起因する、またはかかる請求に何らかの形で関連する、既知または未知のいかなる請求および損害からも、当社、当社の取締役、役員、従業員、および代理人を免除するものとします。

結局何の責任も負いませんよ、と言うことですね。


日本企業はどうでしょうか?Yahoo! JAPANのID連携の規約を見てみましょう。

https://developer.yahoo.co.jp/yconnect/v2/guideline_20220401.html

例えば免責事項の3番目にこのような記載があります。IDに関する属性保証や認証結果に関する保証もないよ、と言うことですね。

利用者が予定している目的への適合性、有用性(有益性)、セキュリティ、権原、非侵害性および正確性等について当社が一切保証しないこと


上記を踏まえてRPはどうするべきなのか

ユースケース次第、としか言えないのですがそれだと思考停止するので、ID保証(IAL)、認証強度(AAL)を含めRP側でもちゃんと考えて対策を打つ必要があるのではないでしょうか?

つまり、何をIdPに頼って、何を頼らないのか、を考えることにもつながるわけですが、上記の通りソーシャルログインについてはほぼ何も保証はされないという前提で考えると、ユーザがRPの提供するサービスへ登録する際のハードルを下げる「離脱防止」という観点での依存を基本ラインとして、IDの保証が必要なサービスであれば追加の属性確認(KYCなど)をRP側でも実装することは考えないといけません。また認証強度が必要なのであれば先日のAuth0の例ではありませんが、RP側でも多要素認証などを個別で実装するなどしないと安全には使えない状態となるはずです。

この辺りは最悪のケース(IdP側のインシデントなど)が発生したとしても、RPが独立性を保った上でサービス提供を継続できるかという観点でサービス設計をしていくことが大切だと思います。



2024年3月20日水曜日

Entra IDの条件付きアクセスでパスキーを使った認証を強制する

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

前回、Entra IDの条件付きアクセスがデバイスコードフローなどの認証フロー単位で適用できるようになった(Preview)という話をしました。

https://idmlab.eidentity.jp/2024/03/entra-id.html


すると、某FacebXXkで某氏よりTeams Roomとかで使えそう、かつWindows Helloを除外した上でYubikeyなどFIDOキーを使った認証を強制できると良さそう、、というコメントをもらったのでやってみました。



やることは、

  • 認証強度の設定を行う
  • 条件付きアクセスに設定した認証強度を紐づける

です。


認証強度の設定

認証強度、というとよくわかりませんが、認証方法をカスタムで設定できるEntra IDのセキュリティ機能です。

認証方法→認証強度のメニューで「新しい認証強度」の追加を行います。この際に、パスキー(FIDO2)を選択します。Windows Hello for Businessや証明書ベース認証などと分けて設定ができるので、Windows Helloなどとは分けて設定ができます。ちなみにここでパスキー(FIDO2)として設定を行うとtransportがusb/nfcに設定されるっぽいのでplatform authenticatorは除外できます。細かいパラメータは先日のポストで書きましたので知りたい方はこちらへどうぞ。

また、詳細オプションを設定することでAuthenticator Attestation GUID(AAGUID)を設定することもできるので認証器の種類まで絞り込むこともできます。


条件付きアクセスの設定を行う

前回のポストで紹介したデバイスコードフローをブロックするポリシーをベースにカスタマイズしてみます。

やりたいことは、

  • デバイスコードフローの場合
  • パスキー(FIDO2)での認証を強制する
です。

条件付きアクセスの設定の許可のところでブロックしていたところを「アクセス権の許可」を選択、「認証強度が必要」から先ほど作成した認証強度を選択します。


設定としてはこれでおしまいです。

しばらく設定が馴染むまで待ちましょう。


動作確認

早速動きを見てみましょう。

ざっくりいうと、パスワードで認証するとパスキーでの追加認証が求められ、最初からパスキーで認証するとそのままログインが完了します。

以下の例ではまずはパスワードで認証しています。

するとパスキーでの追加認証が求められます。
認証器を使って認証します。

ログインが完了します。

確かに某氏が言うように割と不特定多数が触れる環境(例えばゲスト用の会議室など)でデバイスコードフローを使う場合にPINのみでログインされてしまう可能性などを鑑みるとこう言う使い方もありかもしれませんね。



2024年3月19日火曜日

Entra IDの新しい条件付きアクセスを試す(デバイスコードフロー編)

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

そういえばEntra IDの条件付きアクセスに新しい条件が追加されましたね。
今回追加されたのは認証フローという条件で、
  • デバイスコードフロー
  • 認証の転送
の2つの条件をサポートしています。


関連するドキュメントはこちらにあります。

デバイスコードフローはともかく「認証の転送」とは??という疑問はもっともですが、簡単にいうとPCブラウザ等でログインを求められる際にQRコードなどでモバイルデバイスを呼び出してモバイルデバイス側で認証する、という構成を想定した条件です。(Outlookとかであるはず)

当該する条件に合致するときにブロックしたり多要素認証を要求したりすることができるのがこの条件付きアクセスという機能なので、きっとそのようなシナリオがどこかであったんだと思います。(ちなみにこの機能を使うにはAzure Active Directory Premium P1が必要です)

ということでポリシーを作ってみます。
今回はデバイスコードフローをブロックするシナリオで試してみましょう。
条件としては、
  • 全てのユーザが
  • デバイスコードフロー用のテストアプリにアクセスしようとした場合
  • 認証フローが「デバイスコードフロー」だったら
  • アクセスをブロックする
というポリシーを作ってみました。
(上記のスクリーンショットのもの)

ということでアクセスしてみます。
デバイスコードフローなので
https://login.microsoftonline.com/{テナントID}/oauth2/v2.0/devicecode
に対してclient_idとscopeをx-www-form-urlencodedでPOSTしてあげるだけですね。

こんな感じでPostmanでリクエストをしてみます。

あとはレスポンスの中にあるverification_uriにアクセスしてuser_codeを入れてあげれば認証完了です。(通常はこのレスポンスをQRコードにして表示してスマホで読み込んだりさせます)
今回はそのままverification_uriを開いてみます。

そしてuser_codeを入れるとログインが求められます。

今回はデバイスコードフローをブロックするのでポリシーが正常に動いていればアクセスがブロックされます。



条件付きアクセスは色々と新しい条件がついていてかなりきめ細かいアクセス制御ができるようになってきています。
アプリケーションの利用シーン(環境など)をベースにいろいろなポリシーを構成してみてください。





2024年3月18日月曜日

外部IdP利用時にRP側"でも"多要素認証を行うべきか

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

今回は多要素認証の話です。
ソーシャルIDなどの外部IdPと連携をする際、外部IdP側がパスキーに対応している場合もあり、基本的にRP側はIdPの認証結果を信じて何もしないという文字通り「Relying」な感じで構成されることが多いと思います。

しかしながら、本当にそれでいいの?とうケースも存在すると思うので、少し深掘りしてみましょう。
中々難しい話だと思いますが、IdP側(例えばGoogle)で認証を強化するか、RP側(例えばECサイト)で認証を強化するか、もしくは両方か、についてユーザ体験の妥当性を含めて考えていかないといけないところです。
IdPもRPもそれぞれ責任範囲が異なるので基本的に自分の責任範囲を守る目的で多要素認証を要求していますが、ユーザから見るとなぜ別々に、、という形に見えてしまうことも事実です。

この問題を根本的なところは先に書いた通り責任範囲の話を理解する必要があるのですが、ツール(技術面)とルール(契約を含め責任論)を合わせてみていかないといけません。この辺りをトラストフレームワークと言われるもので表現をしていくことになります。

まずは技術的な話

まずは簡単な話として、技術の話をしていきましょう。(本来はルールの話をした上で技術の話をするのが良いのですが、読者層を考えるとまずは目に見えるところから入るのが良いと思っています)

本来はIdPがacrやamrで認証手段(例えばパスキーで認証したよ)という情報を渡してあげればRP側はその結果を見て追加でパスキーを要求するべきかどうかの判断をしていくのが良いと思います。ただRPを作ったことがある方はわかると思いますが、
  • IdPによって返すacr/amrが異なる
  • IdPによっては返ってこないこともある
などの事情があるので、特に複数のIdPとのID連携を行う場合は中々面倒臭いことになります。

例えば、GoogleのOpenID Connectのサポート状況を見るとドキュメントを見る限りacr/amrに関する記載はありません。


Entra IDは一応amrの値を返しますが"pwd", "mfa"の2種類しか返せないのでパスキーで認証されても、OTPで認証されても"mfa"になると思います。

Oktaの例は56さんが試してくれていますがEntraよりは少しマシな程度っぽいですね。

ということで外部IdPの認証手段までを厳密かつ標準的に取得して利用するのは現時点では結構ハードルが高そうです。
この辺りは学術認証フェデレーションでは議論が進んでいるのですが、ある程度閉じたコミュニティの中だからできる議論でもあるので、パブリックなIdPだと難しいと思います。


そもそも論として、なぜ外部IdPと連携するのか?

また、そもそも論として各IdPをどこまで信じるのか?というか何のために外部IdPを使うのか?というところに遡ってしまいます。
単に、利便性(プロフィール入力の手間の削減、パスワード登録をさせない)を提供することでドロップ率を下げましょう、という場合もありますし、本気で外部IdPの認証結果に依拠しましょう、という場合もあります。

登録時にプロフィール入力を自動化してドロップ率を下げましょう、という話だけなら認証まで外部に依存する必要は本来ないと思います。パスワード登録をRP側でさせることでドロップ率が〜〜〜という話であればパスキーを使うなりなんなりしてパスワードに依存しない認証手段を用意すれば良いと思います。
(認証まで外部IdPに依存することでログインの都度外部IdPにリダイレクトされるとなると外部IdPが落ちていた場合に発生する機会損失などのリスクもありますし)

認証手段をRPが自前で持つことがリスクという考え方をする方もいるのは事実なので、その場合は外部IdPに頼ってしまうこととのリスクとの天秤で考えるしかないと思います。
(外部IdP側でアカウント侵害が起きたらどうするの?とか)


というあたりで外部IdPとの責任問題の話になってきたところで今回は終わりです。
ある程度答えは見えていると思いますが、次回以降で主要なIdPがどこまで責任を取ってくれるつもりなのか?について少しずつ調べてメモしていこうと思います。

2024年3月17日日曜日

Auth0の管理画面へのログインにパスキーを使うと少しハマる件

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

そういえばAuth0(Okta CIC)の管理画面へのログインにパスキーなどが使えるので使ってみたいと思います。

ちなみにちょっとだけ癖があります。簡単に書くと、

  • パスキー追加をメニューから実施する場合はplatform認証器は選べない
  • USBキーやOTPなど多要素認証を追加し利用すると「このデバイスでのログインの高速化」を目的としてplatform認証器の登録を促される
  • リカバリはリカバリーコードを利用する
  • どうやらパスキーとしてはUSBなど外部キーを前提に設計されている
  • デバイス登録を目的にplatform認証器登録も使えるが同期される前提はなさそう

という感じです。最初からplatform認証器が登録できればいいのに。ちょっと実装が古いのかな。


さて、始める前に基本的な話を。IDaaSを使ってID基盤を構築するときに忘れてはいけないのはIDaaS自体の認証強化とアクセス制限です。

最低限やっておくべきことは、
  • 管理者アカウントの分離(共有ユーザの排除)
  • 管理権限の適正化
  • 認証強化(多要素認証)
  • ※API実行ユーザも忘れずに!
くらいでしょうか。
特にヘルプデスクやオペレータのアカウントも作る必要もあると思うので適切に権限分離は重要だと思います。
また、日本企業に多いと思いますが、上記に加えてアクセス元の環境の制限(IP制限など)も行いたい、という話も出てくることもあります。(これは働き方改革なのか、ネットワークペリメーター神話がまだまだ生きているだけなのかはケースバイケースです)

ということでAuth0でも管理画面へのログイン時の認証を強化できますのでやっておきましょう。
ちなみに、ご存知の通りAuth0の管理画面へログインするためにはローカルログインに加えてLinkedInやMicrosoft Account、Githubアカウント、Googleアカウントが使えます。
当然、それらのIDシステムもパスキーに対応していたりと認証強化を行うことは可能ですが、今回のテーマはAuth0側でさらに認証強化をする、という話です。

IdP側の認証強化の結果をこのケースおけるRPとなるAuth0の管理画面はどこまで信じることができるのか?と言う話とUI/UXの関係については別途書こうと思いますが、ざっくり言うと外部IdP(ここで言うとGoogleなど)は認証結果に対する責任は取ってくれない、かつどのような認証手段で認証したのかは教えてくれないので、重要な顧客IDを預かるIDaaSは自前でも多要素認証を実装しておくことが重要です。

ログインしてプロファイルページを開くと認証手段の追加ができます。
ちなみに設定が行われいていないテナントでは順次ログイン時に強制的に多要素認証設定を行うように促されるため最近のテナントを持っている方は設定済みかもしれません。

ということで追加してみます。WebAuthn with FIDO Security Keysをクリックしてみましょう。(なお、ポップアップがブロックされているとエラーになりますので、許可してください)

登録画面が出てきますね。初めに書いた通りplatform認証器ではなくUSBセキュリティキーが前提となっています。
登録が終わるとリカバリーコードが発行されるのでコピーしておきます。ちなみにダッシュボードからリカバリーコードは再生成できますので、こちらのスクリーンショットのコードはすでに無効です。

これで登録が完了しました。

一旦ログアウトしてログインし直してみます。USBキーが求められます。

すると、「このデバイスでのログインを高速化」と言われます。

そしてTouch IDが求められます。

USBキーとデバイスの両方が登録された状態になります。

USBキーを使う場面は少なくともSyncされたデバイスでは出番はなさそうです。
どうもplatform認証器はあくまでデバイス登録を目的としたものとして整理されているようですね。

しかし、iCloudで同期されているのかと思いつつiPhoneでダッシュボードにログインしてみるとplatform認証器は使えません。
USBキーが求められるので、仕方なく先ほど登録したUSBキーを使ってログインします。(先ほどYubikey NFCを使ったのでNFCで読み込ませました)

するときました。先ほどMacで登録したのと同じようにログインの高速化。
FaceIDを使ってデバイス登録を求められます。

しかし、すでにデバイス登録をMacでしているのでエラーが出ます。。。


iCloudで同期されているので登録済みって言われてます。

やはりパスキーが同期されている想定はなく、あくまでplatform認証器はデバイス登録に特化して利用、あくまで認証は外部キーを使うという整理になっていそうですね。






2024年3月16日土曜日

Identiverse 2024のアジェンダが公開されています

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

先日はEIC(European Identity & Cloud Conference)のアジェンダが発表された件を書きましたが、今回はEICの前の週にラスベガスで開催されるIdentiverseの件です。
今回は2週連続でイベントなのでラスベガス経由のベルリンの長丁場になりそうです。(そういえば前回のIdentiverseでMicrosoftのAnkur Patelが今で言うEntra Verified IDの発表をしたんだったなぁ、、と遠い目。セッションの後で彼を捕まえてPreviewプログラムに参加させてもらったところからVC人生?が始まっている気がします)

まずはIdentiverseとは?からです。
こちらのポストでも書きましたが、世界四大アイデンティティイベント(4は適当)の一つで、もともとPing IdentityのAndreが始めた旧Cloud Identity Summitと言われていたカンファレンスですね。ラスベガス開催になってからは参加できていませんでしたが、今年は参加しようと思います。

そして、いよいよセッション一覧が公開されました。

セッション数も多いので、気になったものを。

Data Sharing Using Verifiable Credentials in the Agricultural Sector

初日から気になるセッションです。農業とVCをどう繋げたのか是非聴いてみたいセッションですね。

Global Trends & 2024 Strategy: OpenID Foundation Board Insights

OIDFのボードの方々による2024年のグローバルトレンドの話です。これは必聴です。


Enabling a Trusted Ecosystem for the US Pharmacy Supply Chain

薬局かどうかは置いておいてサプライチェーンにおけるトラストの話題は日本でも大切な話なので、こちらは是非聴いてみたいネタです。


Untangling the Tangled Web of Digital Identity Online Presentation

オンラインでのデジタルIDの提示に関する課題をmDLやVC、Walletなどを中心に議論するパネルです。標準化の中心人物が集まって議論するのを生で見ることができるのもこのようなグローバルイベントの醍醐味です。


Digital Identity, the G20, and the SIDI Hub Survey

ちょっとチョイスするセッションのGail率が高い気がしてきましたが、SIDI Hubです。G20に向けて着々と進んでいますね。



Lessons Learned: Nationwide eID Recovery With Remote Identity Proofing

ノルウェイのBankIDの方によるeIDのリカバリーをリモートIdentity Proofingでやった事例の話ですね。日本でもマイナンバーカードのスマホ搭載など国民IDのデジタル化が進むとリカバリの問題はついて回るので先行事例を勉強しておくのは大切だと思います。



Counselors in the Modern Era: Advancing Identity Management

イアンのセッションなので、無条件で参加です。


Securing the Foundations of Verifiable Credential Ecosystems

先日紹介したOID4VCxのFormal Security AnalysisをやっていたDanielのセッションです。今後社会実装をしていく上では必須になると思います。






その他もたくさん面白そうなセッションがありますが、全体感としてEICに比べてCIAMやパスキーのセッションがバランスよく配置されているな〜という感想です。先端事例も良いですが今目の前にあるビジネスもバランスよく、という感じなんでしょうね。




2024年3月15日金曜日

SIDI Hubの2024の戦略が発表されました

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

先日のOpenID Summit Tokyoやその前日に開催されたOpenID Foundation Hybrid WorkshopでOIDF Executive DirectoryのGail Hodgesのキーノートで触れられたSIDI Hub(Sustainable & Interoperable Digital Identity Hub)の今後のプランと今年のアクションアイテムが公開され、2024/3/31までフィードバックを募集しています。


SIDI HubのWebページのトップからダウンロードできるようになっています。


ちょっと中身をみていきましょう。

SIDI Hubが解決を目指す課題とは?


SIDI Hubの名前の通り、デジタルアイデンティティって全然相互運用できないよね、ということを最大の課題として設定しています。

以下、Deeplでの機械翻訳です。

人と企業は国境を越える。将来、人々は、通貨交換を期待するのと同様に、国境を越えて日常生活でデジタル・ アイデンティティを使用したいと思うようになるだろう。残念ながら、多くの問題が国境を越えた相互運用性の障害となっている:

  • 数十のデジタル・アイデンティティ・エコシステムがその管轄区域内でサイロ化されている。
  • OECD のデジタル ID 勧告には、国境を越えた利用を可能にすることが盛り込まれているが、 38 カ国の加盟国がどのように実現できるかについての技術的または政策的なロードマップはない。
  • どの国、地域、標準化団体、非営利団体、民間団体、多国間に も国境を越えた相互運用性を実現する権限がない。
  • 単一の標準が「すべてを支配」する可能性は低いため、技術スタック間のデジタル ID 相互運用性は技術的には可能であるが、達成および維持は非常に困難である。 
  • 悪質な行為者が脆弱なインフラ(AIディープフェイク、サイバー犯罪、COVID-19)を利用するため、不作為による機会費用が発生し、人々やビジネスは高いレベルの摩擦に直面する。
  • ポリシーを解釈し、製品や実装で簡単に実施する仕組みがなければ、ビジネス・コンプライアンス・コストは増大し続ける。
  • デジタル・アイデンティティが果たすであろう重大な役割を理解している人は、アイデンティティ・コミュニティ以外にはほとんどいないため、明確で透明性の高いコミュニケーションが重要である(誤った情報を避けることも同様)。

ということでSIDI Hubの目的は?

クロスボーダーで使えるデジタルアイデンティティを実現するために必要なものを定義しましょう、ということです。

なぜSIDI Hubがこんなことをやるの?


なぜなら、SIDI Hubは、

(1) デジタル ID インフラ、標準、および政策に責任を持つ (2) SIDI ハブに価値を見出す、グローバルなエコシステム全体 からの利害関係者のコミュニティ 

ワークストリームおよびワークショップにおける SIDI ハブの参加者は、共有されたロードマップ、 解決すべきギャップ、および改善策を含む、国境を越えた相互運用性の「良い姿」を具体 化するのに役立つ。

我々は、この課題に対する共通のコミットメント、国内主権と国内法および国際法の尊重、参加組織の活動の尊重、そして共通の文化(コンセンサス、包括的、透明性、健全な議論など)を持っている。 

SIDIの協力は、組織がその使命に照らしてインパクトをもたらすための「泳ぐ車線」を明確にする助けにもなる。

であり、逆にいうと、
法人
統治機関 
標準化団体
オープンソースコードプロバイダ
市民権団体
NGO 
多国間組織
コンサルティング団体
ベンダー

ではなく、 

SIDI Hubは、政府やその他のエコシステム参加者が何をしなければならないかを指示することはできません。
ということです。

他国間連携をする際のアプローチは非常に難しいですね。どうしても政治色や経済安全保障などの視点が入ってきてしまうので、国際標準化機関でやってしまうと国力が小さい国々の意見などが反映されにくくなったりする、というのも背景なのかもしれません。(かといってこのアプローチが成功するとも限りませんが)

何をして、何をしないのか?

やること:
  • ギャップ分析
  • SIDI Hunの目的に向かって推進するための活動
    • チャンピオンユースケースの選定
    • 標準化団体へのアプローチ
      • 各団体が策定している標準への働きかけ
    • デプロイメント
      • オープンな相互運用性試験の実施の働きかけ
      • 条件を満たすオープンソースにフォーカスを当てる
    • ポリシー
      • トラストフレームワーク間のマッピングを行う
    • オペレーション
      • 会合の開催
      • フィードバックの反映
      • 他の動きとの整合性をとる

やらないこと:

  • 以下のような口出しはしない、ということです
    • 政府に対してどのような法律を策定しなければならないか
    • 非営利団体がどのような決定を下さなければならないか
    • 標準化団体がどのように仕様を変更しなければならないか

誰が参加するの?

色々な方達が関わっていますね。
  • 国連やワールドバンクのような多国間組織
  • EUや個々の国々の政府機関
  • 非営利団体
  • 標準化団体
  • 学術機関
そしてそれを下支えするための企業や市民団体、メディア、エキスパートたちももちろん参加者となります。
実際昨年の11月にパリで開催されたイベントにはOpenID Foundationはもちろん、日本政府からも参加しています。他にもおなじみの団体がありますね。

結局何をやるの?

先に触れたパリの会合の参加者からSIDI Hubを実現するためには何をすべきなのか?を募ったところ、以下に集約されたとのこと。

  • チャンピオンユースケースを定義する
  • デジタルアイデンティティの最低限の要求事項をまとめる
  • トラストフレームワークのマッピングを行う
  • 成功の指標を定義する
  • SIDIのガバナンスを定義する
どれも重要ですね。
想像するに、例えばトラストフレームワークのマッピングができると、日本における犯罪収益移転防止法の元で運営されている事業者で本人確認されたデジタルアイデンティティは国外でも確認済みとして通用するかどうか?という視点は非常に大事だと思います。逆にここでちゃんとマッピングをしておかないと他国において日本の本人確認は役に立たない、といった事態になってしまうのかもしれません。

ということで、先ほど触れた様々な参加組織から上記のトピックスに対応するためのワーキンググループを組成しましょう、という提案がなされています。


みたような人たちがCo-Chairとして手を挙げています。


今後どのような活動をするの?

各個別の活動は置いておいて、全体としてのロードマップが示されています。

一番大きいのは次のリオデジャネイロでのG20に向けたインプットをどう作っていくか、というところでしょうね。


色々とイベントの企画も進みつつあります。
Q4(10月)には東京かシンガポールでもイベントの開催が計画されています。
楽しみですね!


こういう国際連携モノは時間もかかるしコンセンサスを取ることも難しいと思います。さらにいうと最終的に各国が社会実装するかどうかが肝になると思いますが、そのあたりはSIDI Hubでは口出しをしない体裁になっているあたりも不安要素ではあります。
とはいえ、ちゃんと解かないといけない課題ではあるので日本からもこのような取り組みにちゃんと向き合うようにできると良いのではないでしょうか?