2024年5月21日火曜日

コンテンツの真正性検証に関する取り組み

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

先日のInternet Identity Workshop(IIW)でも何個かセッションがあったのですが、生成AIなどの普及を踏まえてコンテンツの真正性(Content Authenticity)に関する関心が高まっているようです。

生成AIで生成AIのイメージを生成させた絵

関連する取り組みとしては、こんなものがあります。

  • CAI(Content Authenticity Initiative)
    • https://contentauthenticity.org/
  • C2PA(Coalition for Content Provenance and Authenticity)
    • https://c2pa.org/
    • CAIのEffortも統合して活動していますね

また、日本でもOriginator Profile技術研究組合が活発に活動している領域です。


最近面白いなぁ、と思ったのはTikTokがCAIとC2PAに参加したって言うニュースですかね。

https://contentauthenticity.org/blog/tiktok-joins-content-authenticity-efforts


この辺りもデジタルアイデンティティと密接に結びつく分野なので要ウォッチです。


2024年5月20日月曜日

response_mode、”form_post"の実装

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

EntraをはじめとするMicrosoftのIDスタックを使って開発をしていると必ずといっていいほど出てくるのがreponse_mode=form_postの壁です。特に非Microsoftのライブラリを使ってリライングパーティを開発する場合や、MicrosoftのIDスタックをリライングパーティとして非MicrosoftのIDaaSを構築する場合にはこのパラメータへの対応の有無で悩むことになります。

ということでresponse_modeって何?と言う話と自前でIdPを構築する際にform_postを実装する場合はどんな実装になるのか?を解説してみます。

response_modeとは?
OpenID Connect 1.0の仕様にはこのように定義されています。
OPTIONAL. Informs the Authorization Server of the mechanism to be used for returning parameters from the Authorization Endpoint. This use of this parameter is NOT RECOMMENDED when the Response Mode that would be requested is the default mode specified for the Response Type.

まぁ、元々はOAuth2.0のレスポンスの定義なので、こちらの仕様をみる方が適切といえそうです。

https://openid.net/specs/oauth-v2-multiple-response-types-1_0.html#ResponseModes

OPTIONAL. Informs the Authorization Server of the mechanism to be used for returning Authorization Response parameters from the Authorization Endpoint. This use of this parameter is NOT RECOMMENDED with a value that specifies the same Response Mode as the default Response Mode for the Response Type used. 

このOAuth2.0の仕様が発行されたのが2014年なのでその時点ではqueryとfragmentの2種類だけが本文には記載されており、追加モードとして今回の主役であるform_postの定義への参照が記載されています。


と、ここでちょっと待て、、と。

上記を見るとresponse_typeのデフォルトのresponse_modeの値を取る場合以外はこのパラメータを使うことは推奨しない、と明確に書いてありますね。

ということは、Azure AD B2Cが外部IdPと連携する際にresponse_typeの値に関わらずresponse_modeを必ず指定するのは推奨外の動作ってことですよね。。

また、先日書いたEntra IDの外部認証プロバイダ連携の場合はresponse_type=id_tokenでリクエストがされ、かつ外部認証プロバイダからはform_postでレスポンスが返されることを期待するにも関わらずresponse_modeが指定されないのはどうなんだ、、、という話です。(というか世の中にあるIdP製品やサービスでresponse_type=id_tokenだけをリクエストされてform_postでレスポンスするものは存在しないと思います)

この辺はMicrosoftさんちゃんと仕様を見ようよ・・・って思いますね。。

ちなみにresponse_type=id_tokenの場合のデフォルトのresponse_modeはfragmentです。(こちらに定義されています)

https://openid.net/specs/oauth-v2-multiple-response-types-1_0.html#id_token

The default Response Mode for this Response Type is the fragment encoding and the query encoding MUST NOT be used.


form_postとは?

気を取り直してresponse_mode=form_postの話に戻ります。response_modeは認可サーバからの認可レスポンスを返却するための方式を示すパラメータであることはわかりましたが、値にform_postが指定するというのはどう言うことなのか、についてはこちらの追加仕様に記載されています。

https://openid.net/specs/oauth-v2-form-post-response-mode-1_0.html

Abstractにこう記載されています。

This specification defines the Form Post Response Mode. In this mode, Authorization Response parameters are encoded as HTML form values that are auto-submitted in the User Agent, and thus are transmitted via the HTTP POST method to the Client, with the result parameters being encoded in the body using the application/x-www-form-urlencoded format.

まぁ、要するにHTML formにresponse情報を入れてredirect_uriにPOSTしますよ、ってことです。ws-federationやSAMLのHTTP POST Bindingですね。

ここでも話は横にそれますが、今でこそOAuth2.0やOpenID Connectは認可コードをリライングパーティに発行し、リライングパーティは認可サーバのTokenエンドポイントへ投げ込んでaccess_tokenやid_tokenを受け取る、いわゆるresponse_type=codeのコードフローが主流になっていますが、SAMLも当初はHTTP POSTやRedirect BindingではなくArtifact Bindingが主に使われていた時代がありました。当時はフィーチャーフォンのブラウザなど扱えるURL長に制限があったり、フロントに大きなPOSTデータを持ってくると通信量が増えてパフォーマンスに大きく影響が出るなどの問題があり、ArtifactといわれるコードをService Providerへ提供、Service ProviderがIdentity ProviderへSAMLトークンをとりにいく、という流れが必要だったためです。当時と今では事情がことなりますが、認可コードフローとのままですね。なんといってもOpenID Connectは、開発中はOpenID ABC(Artifact Binding and Connect)って名前でしたし、OpenID Connect Coreの定義をしている、OpenID FoundationのAB/ConnectワーキンググループはArtifact Binding Working GroupとConnect Working Groupから組成されており、ABはArtifact Bindingなわけです。


話を戻すと、Entra IDの外部認証プロバイダの際にも書いた通り、id_tokenとstateをformに乗せてPOSTしてあげるためのHTMLをレンダリングするコードを書けば良いってことになります。

node_expressとejsで書くとこんな感じです。

res.render("./form_post.ejs",
{
redirect_uri : req.body.redirect_uri,
id_token: id_token,
state: req.body.state
}
);

レンダリングされるhtmlテンプレートはこんな感じですね。(前回の記事では動きを見るために自動POSTしていませんでしたが、今回はJavaScriptで自動POSTする形にしています)

<html>
<head><title>Submit This Form</title></head>
<body onload="javascript:document.forms[0].submit()">
<form method="POST" action="<%= redirect_uri%>">
<input name="id_token" type="hidden" value="<%= id_token%>">
<input name="state" type="hidden" value="<%= state%>">
</form>
</body>
</html>


なぜform_postにこだわるのか?

しかし、form_postを使っているのって実態としてMicrosoftくらいしかいないんですよね・・・(Sign In with Appleも使ってたかも)

現状、ブラウザを経由してトークンのやり取りをする、つまりArtifactや認可コードを使わないパターンを使いたい大きな理由は先ほど挙げたフィーチャーフォンのブラウザの制限や通信速度・通信量の問題というよりも、エンタープライズなどIdPがファイアウォールの内側にありリライングパーティが外側にあるというケースやWalletがIdPになるケースなど、IdPが外部からのアクセスできない(Walletの場合はエンドポイントを持たない)という問題である場合が多いと思います。

その場合は当然Implicitを使う、つまりフラグメントにトークンを入れてJSでリライングパーティへ渡す、というやり方になるわけですが、これだとリライングパーティのredirect_uriがブラウザ上でJSをハンドリングする機能を実装することが前提になってしまいます。もちろんこれができるケースならば良いのですが、リライングパーティ向けの共通ライブラリを提供しようとすると単純にバックエンドでPOSTを受け取るAPIを作っておく方が楽なんじゃないかと思います。さらに言うと、これまでws-federationやSAMLのSP向けのライブラリを提供してきたベンダであれば少しパラメータを変えれば対応できると言う意味でform_postの方がありがたかった、と言うのが実情だったんだろうなぁ、、と聞いた話から推測しています(あくまで推測です)。まぁ、SameSiteの問題もあったりしますがこの辺は各社対応してきているので現状は大丈夫だと思いますが。


ということで、今回はresponse_modeとform_postの話をしましたが、みなさんが作るIDシステムやアプリケーションのシステム配置や要件によって適切な実装をしていきましょう。








2024年5月19日日曜日

NIST SP800-63B-3の同期可能クレデンシャルに関する追補版を読む(7)

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

NIST SP 800-63B-3の追補版も最後のまとめ部分を残すのみです。

早速ですが本文書でどのように結論づけているのかをみていきましょう

同期可能な認証器は、認証の状況、特に多要素暗号認証子の使用における実質的な技術的変化を示すものである。暗号鍵の複製とクラウド・インフラへの保存を許可することに関連するトレードオフの 評価は、必然的に行われることになる。このことは、明確なリスク(認証鍵に対する企業管理の喪失など)をもたらすが、同時に、 一般市民や企業にとっての主要な脅威ベクトルを排除する、便利でフィッシングに強い認証機能への道筋を提供する。同期可能な認証器は、すべてのユースケースに適しているわけではない。しかし、本補足文書に含まれるガイドラインに沿った方法で導入される場合、AAL2 リスク軽減策との整合性を達成し、フィッシング耐性認証の採用をより広範に促進することができる。

企業等で利用する場合は鍵が制御外のファブリック(iCloudなど)に保存されることによるリスクがありますが、一般ユーザのシナリオではフィッシング耐性のない認証器を使うよりはマシっていうことなんでしょうねぇ。要はユースケースに応じたリスク分析をちゃんとやろうねっていうNISTのガイドラインの根本は変わらないわけで。

この文書は、既存のデジタル・アイデンティティ・ガイドラインに付随するものであり、各省庁 が十分な情報に基づきリスクベースの決定を行い、適切な場合には最新の業界イノベーション を統合するための情報を提供する。

改めて本文書は既存のガイドラインの付随文書であることを強調し、先に書いたとおりちゃんとしたリスク分析に則って対策を考えましょう、ということです。

ということでこれで一通り見てきたわけですが、私的なまとめとしては、

  • 同期と共有は違うぞ
  • 同期を許容する場合はバックエンドの同期ファブリックの信頼性も評価しないとだめ
  • 統制レベルを上げる場合は同期を不許可にするようにMDMなどで制御することも必要
  • ただ、かといってフィッシング耐性がない認証器を許容するよりはマシな場合もある
  • 結局ユースケースごとにリスク評価をしましょうね
  • その意味でこのガイドライン追補版では新たなタイプの認証器の特徴とリスクなどをまとめたのでちゃんと導入するように
ということくらいでしょうか。


2024年5月18日土曜日

NIST SP800-63B-3の同期可能クレデンシャルに関する追補版を読む(6)

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

少し間が開きましたがNIST SP 800-63B-3の追補版の続きです。

今回は同期と共有は違うぞ!という話のうちの共有の部分です。1回目にも書きましたがAppleの共有パスワードグループの話などもありますので、非常に重要な部分だと思います。

サイバーセキュリティ・ガイドラインは、歴史的に、ユーザ間で認証器を共有しないよう警告してきた。このガイダンスにもかかわらず、一部のユーザ・グループやアプリケーションでは、個人がデジタル・アカウントへのアクセスを共有できるようにするために、認証器とパスワードの共有が行われている。

表 3 に示すように、一部の同期可能な認証器の実装は、このようなユーザの行動を受け入れ、 異なるユーザ間で認証キーを共有する方法を確立している。さらに、一部の実装は、一般的なサービスにおいて、パスワード共有に代わる便利で より安全な方法として、同期可能な認証器の共有を積極的に推奨している。 

言われてますよ、Appleさん。。

企業ユースケースの場合、鍵の共有に関する懸念は、鍵が承認されたデバイスや同期 ファブリックから移動されることを制限するデバイス管理技術を使用することで、効果的に緩和することができる。しかし、公衆向けのユースケースでは、同様の緩和策は現在のところ利用できないため、 リライングパーティは、同期可能な認証プロバイダが採用する共有モデルに依存することになる。公衆向けアプリケーションの所有者は、共有認証器に関連するリスクを認識する必要がある。公衆と対話する場合、機関は、ユーザがどの特定の認証器を使用しているのかについて限られ た可視性しか持たないため、すべての同期可能な認証器が共有の対象となる可能性があることを想定する必要がある。多くの共有モデルには、リスクを最小化する実質的な制御(例えば、共有を許可するためにデバイス間の近接を要求する)があるが、他の実装はそれほど制限的ではない。

やっぱり共有を制御する方法とセットになっていることが必要なんじゃないかと思いますね。この辺りの判断をリライングパーティに全部任せちゃうのは実質不可能だと思いますし。

この新しいクラスの認証者がもたらす共有のリスクは、特別なものではない。実際には、すべての AAL2 認証タイプに適用され、中には同期可能な認証タイプより弱いものもある。AAL2 のどの認証子も、それを共有しようとするユーザによって共有される可能性がある。ユーザは、パスワード、OTP、帯域外認証子、さらにはプッシュ認証イベントを積極的に共有したり、被指名人(正式か否かを問わない)がエンドユーザに代わって認証を行うことを許可したりすることができる。

各省庁は、直面する特定のリスク、脅威、およびユーザビリティの考慮事項に基づいて、アプリ ケーションにどの認証手段を受け入れるかを決定する。同期可能な認証方式は、AAL2 までの実装を求めるアプリケーションの新しいオプションとして提供されるかもしれず、他の認証方式と同様に、この技術のトレードオフは、セキュリティ、プライバシー、公平性、およびユーザビリティに対する期待される結果に基づいて、うまくバランスをとるべきである。

そろそろこのレポートもおしまいです。

というか早くSP800-63-4の次のドラフトが出て欲しいですね。

 

2024年5月17日金曜日

IIWの振り返り by Phil Windley

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

昨日はOpenID TechnightでInternet Identity WorkshopとOpenID Foundation Workshopの振り返りをしましたが、そういえば主催者の一人のPhil Windleyも振り返りのポストをしていたなぁ、と思い紹介したいと思います。

https://www.windley.com/archives/2024/04/internet_identity_workshop_xxxviii_report.shtml

参加者の分布が分析されています。


US (241), followed by Canada (11). Germany, India, and Switzerland rounded out the top five with 9, 8, and 7 attendees respectively. Attendees from India (5), Thailand (3), and Korea (3) showed IIW's diversity with attendees from APAC. And there were 4 attendees from South America this time. Sadly, there were no attendees from Africa again.

やっぱり北米が多いですねぇ。ローケーション的に仕方ありませんが。

なお、ここには記載がありませんが日本からは5〜6名だったと思います。それなりに参加していると思います。

会場の写真も紹介されています。私も左の端の方にこそっと写っています(人の影なので顔は隠れていますが)



毎回ですがDoc SearlsがFlickrにアルバムを作っているので現地の様子が知りたい方はぜひご覧ください。


https://www.flickr.com/photos/docsearls/albums/72177720316609417/








2024年5月16日木曜日

OpenID Technight #21のスライド

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

以前告知した通り、本日はOpenID Technightでしたね。

https://openid.connpass.com/event/316748/





私は4月に開催されたOpenID Foundation WorkshopとInternet Identity Workshopからトピックスをお伝えしたわけですが、時間もあまりなかったので伝えきれなかったところも多々あります。スライドをこちらに置いておきます。よろしければどうぞ。

https://speakerdeck.com/fujie/openid-foundation-updates








2024年5月15日水曜日

今年もBuildのシーズンがやってきた

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

今年もBuildのシーズンですね。


https://build.microsoft.com/en-US/home

今年もシアトルでの対面とオンラインのハイブリッド開催のようです。しかし昨年もそうだったんですが、今年もセキュリティやアイデンティティ系のセッションは殆どがIn person(対面)のみ、かつレコーディングもされないという悲しい感じです。

ざっくりセキュリティ、アイデンティティで絞り込むとこのくらいのセッションが出てきます。(少ないですね・・・)

codetitletypedatetimedescription
DEM764Combatting fraud with real time identity verificationin person5/233:45 AM - 4:00 AMAnyone can identify a bicycle or count stop lights. How do we know our apps are serving the right users? CAPTCHAs do not work. Introducing Face Check using Microsoft Entra Verified ID: reduce sign-up friction, the risk of fraud and account takeover. Face Check enables apps to perform real time biometric match against identity documents issued by government (e.g. driver's license or passports) or businesses and education institutions.
-On-Demand: Boost your app security with real time biometric authenticain personon-demandIntegrate simple-to-use APIs to upgrade your mobile, web or desktop apps with high-assurance identity verification to reduce friction and risk from account takeover and impersonation.
DEM760Create secure applications in minutes with VS Code and External IDin person5/223:30 AM - 3:45 AMLearn how to use the Microsoft Entra External ID extension for Visual Studio Code to create your first External ID application completely within your IDE. Bootstrap your development with pre-configured sample applications to quickly get you started.
DEM768Create pixel perfect authentication experiences for native mobile appsin person5/244:45 AM - 5:00 AMThe Authentication API and SDK in External ID allow developers to create pixel perfect UX for sign in and sign up experiences in their mobile applications. Join our product experts to explore the APIs and SDKs for Microsoft Entra External ID that give you the control and flexibility to create fully custom and secure login experiences on mobile devices.
-True zero-trust runtime security in AKSonlineon-demandNeuVector is open source, container native and can make your containerized workloads more secure… today! See first hand how to get to true zero-trust runtime security in AKS and other Kubernetes deployments with NeuVector by SUSE. We will take an application through its deployment lifecycle, from Dev/Test to Q/A to Production, and automate the 'fingerprint" of appropriate behaviors in your software stack. Join us for this real-world example of how to not just identify attacks but to actually prevent them.
DEM766Simple and secure app authentication with authentication brokersin person5/236:45 AM - 7:00 AMWe delve into the integration of Web Account Manager (WAM) on Windows through various MSAL libraries such as MSAL.NET, MSAL Python, and MSAL Java. The session will highlight the seamless authentication experiences enabled by WAM, which simplifies account management on Windows devices. We’ll explore how MSAL libraries facilitate public client authentication flows with Microsoft Entra ID, enhancing web, mobile, and desktop applications.
DEMFP867Unleash the power of network APIsin person5/247:45 AM - 8:00 AMLearn how you can leverage the advanced capabilities of telecom operator networks through APIs to enhance your applications. This session will cover GSMA Open Gateway and CAMARA, examples of how mobile operators are working with developers to open up network APIs, and how developers can engage via Microsoft’s platform and services with Azure Programmable Connectivity (APC). We will also showcase a demo mobile app using the network's APIs through APC and show the code on how to develop with it.


個人的に興味があるのは、1行目のCombatting fraud with real time identity verificationと最後の行のUnleash the power of network APIsくらいでしょうか。前者はEntra Verified IDとfacecheckの話です。後者はMicrosoftのイベントでは結構珍しくネットワークキャリアを対象としておりGSMAやCAMARAの話なんかをカバーしているっぽいので聞いてみたいですね。

レコーディングもされませんし配信もされないので聞けませんが・・・(残念)