はじめに
FIDO(Fast IDentity Online)認証標準では、ユーザーがウェブサイトやアプリケーションにアクセスするための高速で安全な認証メカニズムが定義されています。
さまざまな企業を代表する FIDO Alliance は、ユーザーが共通のプロトコルを介してウェブサイトやアプリにアクセスできるようにするための、オープンでスケーラブルな技術仕様を開発しています。つまり、どの企業も FIDO 標準を使用して、パスキーなどのテクノロジーを実装し、安全な認証を行うことができます。
パスキーは、オリジン(ウェブサイトまたはアプリケーション)と物理デバイスに関連付けられた FIDO ログイン認証情報です。パスキーを使用すると、ユーザー名やパスワードを入力したり、追加の認証要素を提供したりせずに、認証を行うことができます。この技術は、メインの認証メカニズムとしてパスワードを置き換えることを目的としています。
安全な認証が重要な理由
パスワードは数十年にわたりコンピューティングでの認証に使用されてきました。しかし、パスワードベースの認証は、データベースが侵害され、パスワードがフィッシングされる可能性があるため、最も安全な認証方法ではありません。
多くのユーザーが同じパスワードを使用して別のウェブサイトにログインしています。つまり、1 つのウェブサイトが侵害されると、同じパスワードを使用する他のすべてのアカウントが危険にさらされることになります。そのため、安全なパスワード システムを構築しても、パスワードが唯一の保護策である場合にはリスクがあります。
一部のサイトやアプリでは、SMS、メール、アプリケーションなどを介して送信される 2 つ目の認証情報をリクエストして、2 段階認証プロセスをリクエストします。この方法は、パスワードを使用するよりも安全ですが、ユーザーが 2 段階認証プロセスの詳細情報を悪意のあるウェブサイトに入力して入力されてしまう可能性があるため、フィッシングにも脆弱です。
FIDO はどのようにセキュリティを強化していますか?
FIDO ベースの認証では、パスワード ベースの認証と従来の 2 段階認証プロセスを使用する認証に起因している多くの問題が解消されています。具体的には、次のとおりです。
- FIDO 認証では、公開鍵暗号を使用します。
- FIDO は、認証情報を悪意のある第三者や認証情報を所有していない当事者と共有しないようにするために役立ちます。
公開鍵暗号により、潜在的なデータベース侵害の脅威を軽減します。ユーザーは 1 つのオリジン(サイトまたはアプリケーション)を使用して登録します。これにより、ユーザーの秘密鍵(物理デバイス)上に公開鍵ペアが生成されます。ユーザーの公開鍵は送信元のサーバーによって保存されますが、攻撃者にとっては役に立ちません。攻撃者は、サーバーに保存されているデータからユーザーの秘密鍵を取得できません。これは認証を完了するために必要です。
FIDO では、ウェブサイトまたはアプリが、実在する本人であるかを確認する責任はありません。さらに、ユーザーは間違った場所で認証情報が使用されないようにする責任はありません。FIDO は各認証情報を特定のオリジンにバインドします。つまり、デバイスではなく、ウェブサイトまたはアプリケーションを正しく識別する責任があります。
たとえば、ユーザーが example.com
にログインしようとしているとします。ユーザーが phishing-example.com
で example.com
が所有する認証情報をリクエストすると、認証システムはそのリクエストを拒否し、ユーザーを保護します。認証プロセスによって、フィッシング ウェブサイトまたはアプリが他のオリジンを対象とする検証を受けるのは非常に困難です。
全体として、FIDO とパスキーを使用することで、より強力な認証をデプロイできます。この認証は、ほとんどのユーザーにとって使いやすく、容易です。
デモ
パスキーとは
パスキーは、FIDO と W3C Web Authentication(WebAuthn)の標準に準拠したデジタル認証情報です。ウェブサイトとアプリケーションは、パスワードと同様に、アカウントへのアクセスに必要なパスキーの作成をユーザーにリクエストできます。
パスキーは、デバイスのロックを解除して本人確認を行う技術です。これは、生体認証センサー(指紋または顔認識など)、PIN、またはパターンで行われます。ユーザーは最初に起点で登録して、パスキー(公開鍵と秘密鍵のペア)を生成する必要があります。
ウェブサイトまたはアプリに戻ってログインする場合、ユーザーは次の手順を行います。
- アプリケーションに移動します。
- [ログイン] をクリックします。
- パスキーを選択します。
- ログインを完了するには、デバイスのロックを解除してください。
認証システムで、秘密鍵を使用して署名が生成されます。この署名は、公開鍵を使用および秘密鍵を公開せずに、オリジンと認証システムの間でログイン認証情報を検証するために使用されます。
ユーザーは、パスの保存場所に関係なく、パスキーを使用して任意のデバイスでサービスにログインできます。たとえば、スマートフォンに保存されているパスキーを使用して、別のノートパソコンでウェブサイトにログインできます。
パスキーの仕組み
パスキーを作成して、オペレーティング システムを通じて同期します。一部のオペレーティング システムでは、同じ Google アカウントにログインしている Android スマートフォンと Chrome OS デバイスなど、ユーザー デバイス間でパスキーを自動的に同期できます。
パスキーはオペレーティング システムに関連付けられていますが、ユーザーはノートパソコンにログインするときにスマートフォンからパスキーを使用できます。パスキーは FIDO 標準と W3C 規格に基づいて構築されているため、すべてのブラウザでパスキーを使用できます。たとえば、ユーザーが Chromebook で site.example
にアクセスしたとします。このユーザーは以前に iOS デバイスで site.example
にログインしました。ユーザーは iOS デバイスで本人確認を行うよう求められます。通常、site.example
ではユーザーの Chromebook 用に新しいパスキーが作成されるため、今後ログインするときにスマートフォンは必要なくなります。
パスキーはエンドツーエンドで暗号化されます。つまり、Google は異なる Android デバイスに同期する必要がありますが、パスキーを読み取ったり、それ以外の方法でデータを読み取ったりすることはできません。
認証プロセス
ウェブサイトやアプリにパスキーを実装するには、以下の点を十分に理解しておく必要があります。
- 認証システムは、ユーザーが所有する物理デバイスであり、ユーザーのパスキーを保持し、ユーザーを識別します。
- 「証明書利用者」は、フロントエンド アプリケーションとバックエンド サーバーで構成されるウェブサイトまたはアプリです。
- フロントエンド アプリケーションは API を呼び出し、認証システムと対話して認証プロセスを開始します。
- バックエンド サーバーは、認証システムによって生成された暗号オブジェクトを取得して検証します。
たとえば、ユーザーが shoes.example
(証明書利用者)のストアで靴を購入することを希望しているとします。ユーザーは shoes.example
で、生体認証センサー付きの Android スマートフォンを使用してアカウントをすでに登録しています。ユーザーがデバイスのロックを解除して、Android デバイスで shoes.example
にログインします。次に、shoes.example
は、ユーザーの暗号署名されたログイン認証情報をそのユーザーの既知の公開鍵と照合し、そのユーザーの ID が正しいことを確認します。
認証システム
認証システムは、ユーザーの身元を確認するために使用される FIDO 準拠のデバイスです。これには、専用デバイス(FIDO セキュリティ キー)に加え、認証システムの要件を満たすスマートフォンやその他のパソコンが含まれます。認証システムでは、FIDO 標準と WebAuthn 標準で説明されている暗号オペレーションを実行します。
デバイスには登録と認証の 2 つのロールがあります。
- ユーザーが証明書利用者に登録すると、デバイスは一意の公開鍵と秘密鍵のペアを生成します。これには、ユーザーのスマートフォンとパソコンが含まれます。
- ユーザーが今後、証明書利用者にログインする際に、デバイスは秘密鍵を使用して署名を生成します。
どちらの操作も、ユーザーが認証システムの所有者であることを証明したときに行われます。この鍵ペアは特定のオリジンで登録されており、正確なオリジンでのみ使用できます。ユーザーがフィッシング サイトに誘導された場合、認証情報は利用できません。
FIDO 準拠のデバイス
最も一般的な認証システムは次のとおりです。
- プラットフォーム認証システム: スマートフォンとパソコンに組み込まれています。プラットフォーム認証システムでは、生体認証センサー(指紋認証センサーや顔認識カメラなど)、PIN、パターンが使用されます。認証操作はデバイスのロックを解除することで完了します。そのため、1 つのステップでユーザーがデバイスを所有し、固有の生体認証で ID を確認できます。
- セキュリティ キー: 通常は認証用のボタンがある USB デバイスです。パスワードとともに使用すると、セキュリティ キーを 2 要素認証の所有要素として使用できます。最も一般的な例としては、Titan セキュリティ キーまたは YubiKey が挙げられます。
フロントエンド
アプリケーションは、クライアント側の API(WebAuthn や Android 用の FIDO2 など)を使用して、認証システムでユーザー認証情報を作成し、検証します。
アプリケーションは、バックエンド サーバーによって生成された暗号チャレンジを認証システムに渡します。アプリケーションが認証システムのレスポンスをサーバーに送信し、検証結果に基づいてアクションを実行します。
バックエンド
サーバーはユーザーの公開鍵の認証情報とアカウント情報を保存します。
登録と認証時に、サーバーは暗号チャレンジを生成します。このチャレンジでは、認証者が発行した署名を検証し、ユーザーが本人であるかどうかを検証します。
よくある質問(FAQ)
パスキーのサポート
パスキーは FIDO 標準に基づいているため、Android や Chrome のほか、Microsoft Windows、Microsoft Edge、MacOS、iOS、Safari などの他の一般的なプラットフォームやブラウザでも動作します。
各プラットフォームで提供されるドキュメントを参照して、現在の可用性の状態を確認してください。
Android では、2022 年末に向けてパスキーのサポートを提供することを目標としています。
ユーザーがデバイスを紛失した場合はどうなりますか?
Android で作成されたパスキーは、パスワード マネージャーへのパスワードのバックアップと同じ方法で、バックアップされ、同じ Google アカウントにログインしている Android デバイスと同期されます。
つまり、デバイスを交換する際、ユーザーのパスキーが一緒に持ち込まれます。新しいスマートフォンでアプリにログインするには、すべてのユーザーがスマートフォンのロックを解除する必要があります。
ユーザーはスマートフォンでパスキーを使用して、友だちのデバイスにログインできますか?
はい。ユーザーはログインのため、自分のスマートフォンと他のユーザーのデバイス間で「1 回限りのリンク」を設定できます。
次のステップ
Codelab を受講します。
- 初めての WebAuthn アプリを作成する
- セキュリティ キー(WebAuthn)による 2 要素認証でサイトを保護する
- 最初の Android FIDO2 API を使用して、アプリに認証を組み込む
以下の詳細を確認してください。