このページは自動翻訳されています。英語の原文は こちら.
isUserVerifyingPlatformAuthenticatorAvailable()がfalseを返し、検出ロジックの更新が必要になりました。パスキーを実装してはいけません。
少なくとも、どんな犠牲を払ってでも実装すべきではありませんし、適切に行うリソースがないならなおさらです。
エンタープライズPasskeyホワイトペーパー. パスキープログラム向けの実践ガイド、展開パターン、KPI。
確かに、パスキーはこの10年間で消費者向け認証に起こった最高の出来事です。フィッシングを撲滅し、UXを劇的に向上させることができます。しかし、パスキーの実装を誤ると、多くの損害をもたらす可能性もあります。
WebAuthnサーバーの実装自体はそれほど複雑ではありません。本当の課題は、その周辺のすべてにあります。パスキーを大規模かつ効率的に運用するには、事前の計画が必要です。パスキーの展開を開始した後に初めて表面化する運用の現実、つまり「Day 2(運用フェーズ)」のすべての問題について考える必要があります。
この記事では、パスキープロジェクトを継続的に失敗させる5つの「Day 2」問題について解説します。これらをすべて解決できない場合、パスキーを導入する準備はできていません。解決できるなら、パスワードが提供できるものをはるかに超える、より安全で使いやすい認証を構築できるでしょう。
エンジニアリングにおいて、「Day 1」は構築してリリースする時です。「Day 2」は、リリースしたものを運用、保守、拡張する時です。パスキーの場合、Day 1はシンプルです:
ほとんどのチームは、数日から数週間で基本的なパスキー実装を稼働させることができます。
Day 2こそが、プロジェクトが失敗する場所です。実際のデバイス、実際のエッジケースを持つ実際のユーザーが、あなたのパスキーシステムと対話する瞬間です。MacBookで完璧に動作した見栄えの良いデモが、企業のプロキシの背後にあるChromeを実行しているWindowsラップトップで壊れることに気づく時です。サポートチームが「もうログインできない」というチケットで溢れかえる時です。
動作するパスキーのデモと、本番環境レベルのパスキー展開との間には、とてつもないギャップがあります。これまでにも、技術的な実装の落とし穴や、パスキープロジェクトが失敗する戦略的な理由について取り上げてきました。この記事では、本番稼働後に運用の観点から何が起こるかに特化して焦点を当てます。
以下が、今回取り上げる5つのDay 2問題です:
リカバリー(復旧)とフォールバックを適切に設計しないと、ユーザーを大規模に締め出すか、排除したかったはずのフィッシングに弱いフローを静かに再導入することになります。
ユーザーがiPhoneでパスキーを登録し、その後そのiPhoneを紛失したとします。通常、これらのリカバリーケースの大部分は現在、クレデンシャルマネージャー(iPhoneの場合は主にiCloudキーチェーン)によって処理されています。ユーザーがAppleアカウントにアクセスできる限り、新しいデバイスでログインするために同期されたパスキーを利用できます。しかし、そのクラウドアカウントにアクセスできなくなった場合はどうなるでしょうか?ここで、通常のリカバリーパスが機能します。
ユーザーがログインしようとしているデバイスに秘密鍵がまだあると仮定して、WebAuthnのログインセレモニーを開始するとします。これにより、OS/ブラウザのモーダルが表示され、「別のデバイスでパスキーを使用してログインしてください」とユーザーに求めます。実質的に、ユーザーは自分のアカウントから締め出されます。パスキーが保存されている他のデバイスはありません。ユーザーは非常に混乱します。これを何千人ものユーザーで掛け合わせると、サポートの危機に陥ります。
よくある対応は、フォールバックとしてメールベースのアカウントリセットを追加することです。しかし、これではパスキーの目的が台無しになります。フィッシング可能なリカバリーチャネルを再導入してしまったからです。ユーザーのメールを侵害できる攻撃者は、あなたのフィッシング耐性のあるパスキー実装を完全に迂回できるようになります。
私たちの意見では、正しいアプローチは階層化されたリカバリーです:
一般的に、コストと摩擦の観点から、アカウントリカバリーのどの層を正当化できるかを決定する必要があります。例えば、小売 / Eコマース分野では、最初の2つの層だけを提供し、財務的な理由からフィッシングリスクを受け入れるかもしれません。セキュリティがより重要な他の業界では、層3と層4まで進みます。
各層は複雑さを増します。ユースケースでどの層が必要かを決定し、それらを構築し、すべてのデバイスの組み合わせでテストし、その使用状況を監視する必要があります。これは、初期のWebAuthn統合よりもはるかに多くの作業を伴います。
ほとんどのチームは、リカバリーを過度に単純化する(パスワードやSMS OTPへのフォールバック)か、過度に複雑化する(すべてのリカバリーにハードウェアセキュリティキーを要求するなど)かのどちらかです。適切なバランスは、脅威モデル、ユーザーベース、および規制要件に依存します。これを間違えると、セキュリティ態勢を損なうか、ユーザーがフローを放棄するほどの摩擦を生み出すことになります。
Igor Gjorgjioski
Head of Digital Channels & Platform Enablement, VicRoads
We hit 80% mobile passkey activation across 5M+ users without replacing our IDP.
See how VicRoads scaled passkeys to 5M+ users — alongside their existing IDP.
Read the case studyユーザーはクリーンなAppleのみの世界に住んでいるわけではありません。デバイスを切り替え、WindowsとiOSを混在させ、異なるブラウザを使用し、企業が管理する環境で作業します。事前に計画していなければ、そこでパスキーのフローが壊れます。
パスキーのエコシステムは、3つの主要プラットフォーム(Apple、Google、Microsoft)、複数のブラウザ(Chrome、Safari、Firefox、Edge)、数十のパスキープロバイダー / クレデンシャルマネージャー(1Password、Bitwarden、Dashlaneなど)、そして無数のOS/ブラウザ/デバイスの組み合わせにまたがっています。各組み合わせの動作はわずかに異なる場合があります。例えば:
ユーザーがiPhoneでパスキーを作成したが、Windowsラップトップでログインしたい場合、クロスデバイス認証(通常はQRコードとBluetooth経由)を使用できます。このフローは機能しますが、壊れやすいものです:
私たちは何千ものデバイスの組み合わせで、これらのエッジケースを直接見てきました。パスキーを自社で構築する場合、これらすべてをテストして処理する必要があります。それができなければ、ユーザーはサポートチームが説明できないエラーに直面することになります。
同じデバイス上でさえ、異なるブラウザは異なる動作をします。macOSのChromeは、macOSのSafariとは異なるパスキーのモーダルを表示します。Firefoxには独自の動作があります。Client HintsとUser Agentの検出は、適切なユーザーに適切なフローを提供するために不可欠になりますが、すべての組み合わせにわたってそれらを正しく解析することは、終わりのないメンテナンスの負担になります。
Webアプリにとって、パスキーのテストとQAはすでに課題です(詳細は「課題 5:プラットフォームの変更がパスキーを密かに破壊する」で取り上げます)。しかし、製品にネイティブのiOSおよびAndroidアプリもある場合、Web専用のチームが直面することのないアーキテクチャ上の決定とプラットフォーム固有の動作により、複雑さは倍増します。
最初の決定は、パスキーをネイティブに実装するか、WebView経由で実装するかです。各アプローチにはトレードオフがあります:
| 側面 | ネイティブ実装 | WebView実装 |
|---|---|---|
| UXの品質 | クラス最高、プラットフォームネイティブな操作感 | WebViewの種類に依存 |
| メンテナンス | iOSとAndroidで別々のコードベース | 共有のWebロジック |
| プラットフォーム要件 | Apple/Google SDKの変更に従う必要がある | WebViewのパスキーサポートの問題を処理する必要がある |
| 複雑さ | 高(プラットフォーム固有のAPI) | 中(ただしWebViewの種類が重要) |
iOSだけでも、WKWebView、SFSafariViewController、SFAuthenticationSession、ASWebAuthenticationSessionから選択でき、それぞれパスキーサポートの特性が異なります。Androidでは、Chrome Custom Tabsは標準のWebViewとは動作が異なります。これらはWeb専用チームが決して下す必要のない決定であり、それぞれの選択が独自のメンテナンス領域を生み出します。
アーキテクチャ上の決定を超えて、iOSとAndroidはOSレベルでパスキーを異なる方法で処理します:
NotAllowedErrorとして表面化しますが、iOSではSimpleAuthenticationServices.AuthorizationErrorとして、AndroidのCredential
ManagerではUser cancelled the operationとして表面化します。Webアプリとネイティブアプリの両方を運用している場合、QAの労力は2倍になるだけでなく、3倍になります。Web、iOS、Androidはそれぞれ独立したエンドツーエンドのテストと監視を必要とする別個のパスキー環境として機能します。修正を即座にデプロイできるWebとは異なり、ネイティブアプリの修正はアプリストアの審査サイクルによってブロックされます。
「パスキー対応」は「パスキーが使われている」ことを意味しません。展開戦略と測定がなければ、普及率は期待外れに終わり、プロジェクトは内部で失敗というレッテルを貼られることになります。
ユーザーがパスキーに切り替えなければ、プロジェクトはすでに失敗しているということを、パスキー実装が失敗する理由に関する記事で詳しく取り上げました。パスワードが支配的なままであり、SMS OTPのコストは高いままで、フィッシングリスクは継続し、組織は多大なエンジニアリング投資に対する見返りを得られません。
パスキー導入のビジネスケースは強力ですが、それは導入が実際に起こった場合に限られます。素晴らしい技術的実装でパスキーをリリースしたものの、ロールアウトと普及戦略について誰も考えていなかったために、普及率が5%未満に終わった企業を見てきました。
パスキーの普及を促進することは、以下を必要とするプロダクトの課題です:
大規模なパスキー展開での私たちの経験に基づくと、企業が目指すべき水準は以下の通りです:
| 指標 | 弱い | 許容範囲 | 強い |
|---|---|---|---|
| パスキー作成率(対象ユーザーのうち) | 10%未満 | 10〜60% | 60%超 |
| パスキーログイン率(全ログインのうち) | 5%未満 | 5〜40% | 40%超 |
3か月経過後に普及率の数値が「弱い」列のようになっている場合、プロジェクトはトラブルに陥っています。これを測定する分析(アナリティクス)がなければ、それに気づくことすらできません。
OSやブラウザのアップデートにより、プロンプト、自動入力の動作、フォールバックフローが変更されます。継続的な監視がなければ、警告なしにリグレッション(退行バグ)やサポートチケットが発生することになります。
私たちは最近、本番環境で発生したWebAuthnエラーの包括的な概要を公開しました。
(サーバーが検証する単なる文字列である)パスワードとは異なり、パスキーはオペレーティングシステム、ブラウザ、クレデンシャルマネージャーとの深い統合に依存しています。Appleが新しいiOSバージョンをリリースすると、パスキーの作成プロンプトが違って見えるかもしれません。Chromeが自動入力のロジックを更新すると、ログインフローが壊れるかもしれません。パスワードマネージャーが新バージョンをリリースすると、予想外の方法でパスキーのリクエストをインターセプトし始めるかもしれません。
最近の例の1つはiOS 26.2のバグで、Safari以外のすべてのブラウザ(Chrome、Edge、Firefox)でisUserVerifyingPlatformAuthenticatorAvailable()がfalseを返し、回避策としてgetClientCapabilities()を使用するプラットフォーム認識の検出ロジックが必要になりました。
潜在的なすべてのバグを確実に把握し、普及率を追跡するには、認証のオブザーバビリティ(可観測性)スタックを設定する必要があります。少なくとも以下のものを導入することをお勧めします:
NotAllowedErrorとして表面化)と予期しないエラー(並行処理のバグからのAbortErrorの急増や、Androidアップデート後の新しいCredential
Managerのパスキーエラー)を区別するこれは、ほとんどのチームがインシデントを経験するまで構築しない類の認証分析インフラストラクチャです。インシデントが起きた時には、ユーザーの信頼と内部プロジェクトの信用に対するダメージはすでに発生しています。
パスキー実装の本当のコストは初期構築ではありません。継続的なメンテナンスです:
最新ニュースを受け取るためにPasskeys Substackを購読しましょう。
これらのDay 2問題を踏まえた上で、いつパスキーを導入すべきで、いつ導入すべきでないかの率直な評価を以下に示します。
適切な計画なしに規制上の理由から全力を挙げることは、コストを著しく押し上げる可能性があります。不適切に実装されたパスキーシステムは、パスキーシステムがないことよりも悪いです。ユーザーの信頼を損ない、サポートのオーバーヘッドを生み出し、社内の関係者にプロジェクトを終了させる理由を与えます。
この記事で説明したDay 2問題こそが、多くの企業がパスキーインフラストラクチャを自社で構築するのではなく、購入することを選択するまさにその理由です。WebAuthnサーバーの構築は簡単な部分です。適切なリカバリー、監視、普及分析を備え、何千ものデバイスの組み合わせにわたって本番環境レベルのパスキーシステムを運用することが、デモと実際の展開を分けるものです。
Corbadoは、Day 2問題が難しいからこそ存在しています。私たちのプラットフォームが運用の複雑さを処理するため、お客様自身で構築して維持する必要はありません。
Corbadoは、適応型セキュリティレベルを備えたすぐに使えるリカバリーフローを提供します。同期パスキー戦略から、クロスデバイス認証、自動化された身元確認まで対応しています。リカバリーロジックは組み込まれており、継続的に更新されます。
当社のフロントエンドSDKは、何千ものOS、ブラウザ、パスキープロバイダーの組み合わせであらかじめテストされています。デバイスの検出、Conditional UIの処理、フォールバックのルーティングは自動的に行われます。新しいブラウザバージョンで何かが壊れた場合、ユーザーが気づく前に当社のSDKで修正します。
Corbadoは、プラットフォームの違いを抽象化するSDKを使用して、ネイティブおよびWebViewのパスキー実装の両方をサポートしています。お客様はアプリのUXに集中し、iOSとAndroid間のパスキーの配管作業は私たちが処理します。
当社の分析ダッシュボードは、パスキー作成率、ログイン成功率、フォールバック率、デバイスレベルの内訳など、重要なすべての指標を追跡します。単なる生データではなく、普及を促進するための実用的なインサイトを得ることができます。
Corbadoは、パスキーに影響を与えるOSとブラウザの変更を継続的に監視しています。当社のSDKはプロアクティブに更新されます。プラットフォームの状況が足元で変化しても、パスキーの展開は安定したままです。
パスキーが認証のゴールドスタンダードであることは間違いありません。しかし、「パスキー対応」から「大規模で確実に機能するパスキー」への道には、ほとんどのチームが過小評価しているDay 2問題が敷き詰められています。
私たちが取り上げた5つの問題(リカバリー、クロスデバイスのエッジケース、ネイティブアプリの複雑さ、普及率、プラットフォームの変更)は稀なものではありません。これらは、本番環境のパスキー展開における中核的な運用の課題です。これらを無視しても問題は消えません。単にユーザーが先にそれらを発見するだけです。
私の率直な推奨事項は、パスキーを適切に行うノウハウとリソースがないなら、リリースしないでください。プロダクト、エンジニアリング、セキュリティ、分析の能力に投資するか、すでにこれらの問題を解決しているパートナーと協力してください。最悪の結果は、誰もDay 2を計画していなかったためにロールバックされる、中途半端なパスキーの展開です。
Corbadoは、大規模なconsumer認証を運用するCIAMチームのためのAuthentication Intelligence Platformです。IDPのログや一般的なanalyticsツールでは見えないものを可視化します。どのデバイス、OSバージョン、ブラウザ、credential managerがpasskeyに対応しているか、なぜ登録がログインにつながらないのか、WebAuthnフローのどこで失敗するか、OSやブラウザのアップデートがいつ静かにログインを壊すか — Okta、Auth0、Ping、Cognito、あるいは自社IDPを置き換えることなく、すべてを把握できます。2つのプロダクト:Corbado Observeは passkeyとその他あらゆるログイン方式のobservabilityを提供します。Corbado Connectは analytics内蔵のmanaged passkeyを追加します(既存のIDPと併用)。VicRoadsはCorbadoで500万人超のユーザーにpasskeyを提供しています(passkey有効化率+80%)。 Passkeyエキスパートに相談する →
5つの運用の問題とは、安全でないリカバリーとフォールバックのフロー、クロスデバイスのエコシステムのエッジケース、ネイティブアプリの複雑さ、低いユーザー普及率、そしてOSやブラウザのアップデートによる密かなリグレッション(退行バグ)です。ほとんどのチームは初期のWebAuthn統合に集中し、これらのリリース後の課題を過小評価しています。これが、多くのパスキープロジェクトがロールバックされたり、社内で密かに放棄されたりする理由です。
ユーザーはQRコードとBluetoothのクロスデバイスフローを介して認証できますが、これには両方のデバイスでBluetoothが有効になっている必要があり、企業のMDMポリシーやファイアウォールによってブロックされる可能性があります。ブラウザ間でUXが大きく異なり、ユーザーはなぜQRコードをスキャンしているのか理解していないことがよくあるため、エンタープライズ展開においては、デバイスを認識したフォールバックルーティングと明確なコミュニケーションが不可欠です。
強力な普及とは、対象ユーザーのパスキー作成率が60%を超え、全ログインのパスキーログイン率が40%を超えることを意味します。3か月経過後に作成率が10%未満、ログイン率が5%未満の場合は、ロールアウトが失敗していることを示しています。これを測定するには、デバイスおよびOSの組み合わせごとに分類された、作成率、ログイン成功率、フォールバック率、および放棄率を追跡する専用のインフラストラクチャが必要です。
ネイティブ実装はクラス最高のUXを提供しますが、iOSとAndroidで別々のコードベースが必要となり、プラットフォーム固有のAPI処理と独立したQAパイプラインが必要になります。WebViewのアプローチはWebロジックを共有できますが、WebViewの種類によってパスキーサポートの不一致が生じます。iOSだけでも、WKWebView、SFSafariViewController、ASWebAuthenticationSessionの選択にはそれぞれ異なるパスキーサポート特性があり、アーキテクチャを決定する前にこれらを評価する必要があります。
メールベースのリセットのような単純化されたリカバリーはフィッシング可能なチャネルを再導入し、ハードウェアセキュリティキーの義務化のような厳格すぎるリカバリーは放棄を生み出します。推奨されるアプローチは階層化です:第1層として同期パスキー、第2層としてクロスデバイスのQRコード認証、第3層としてライブネスチェックを伴う自動化された身元確認、第4層としてデジタル検証可能クレデンシャルです。どの層を実装するかは、脅威モデル、ユーザーベース、および規制要件に依存します。
関連記事
目次