keycloakについてまとめてみる : パスワードレス認証編

他の記事

keycloakとパスワードレス認証
keycloakはFIDOプロトコルに基づくパスワードレス認証に対応している。
-
keycloak9でWebAuthn認証に対応
https://www.keycloak.org/docs/latest/release_notes/#more-updates-to-w3c-webauthn-and-authentication-flows -
keycloak23でパスキー認証に対応(プレビュー)
https://www.keycloak.org/docs/latest/release_notes/index.html#passkeys-support

FIDO (Fast Identity Online) アライアンス
生体認証などを利用した新しいオンライン認証技術の標準プロトコルを制定している団体
FIDO U2F(Universal 2nd Factor)
2段階認証を行うためのプロトコル。
物理的なセキュリティキー(USBデバイスやNFCデバイス) を使用し、ウェブブラウザを通じたパスワードとセキュリティキーによる2段階のログインプロセスに対応している。
問題点
-
限定された使用範囲
主にウェブベースの二要素認証に焦点を当てており、モバイルデバイスやネイティブアプリケーションでの使用には最適化されていない。 -
セキュリティキーの必要性
FIDO U2Fの認証には物理的なセキュリティキーが必要である。
FIDO UAF(Universal Authentication Framework)
パスワードレス認証を行うためのプロトコル。
生体認証(指紋、声、顔認証など)やPINなど、複数の証方法をサポートしている。
問題点
-
限定されたデバイス対応
特定のデバイスに組み込まれた生体認証センサーに依存している。異なるメーカーやモデルのデバイスでは、生体認証技術の種類や品質に大きな違いがあり、一貫したユーザーエクスペリエンスを提供することが難しくなっていた。
FIDO2
FIDO U2FとFIDO UAFを統合したプロトコル。
FIDO2では、生体認証だけでなく、セキュリティキーなどの物理デバイスやPINなどの他の認証手段もサポートしている。
これにより、ユーザーは自分の利用環境に合わせて認証方法を選択できるようになった。
FIDO2ではWebAuthnと呼ばれる、パスワードレス認証のためのAPIが提供されている。
WebAuthnは元々はウェブブラウザ向けに開発されていたが、その仕様はネイティブアプリケーションでの使用にも拡張されている。

WebAuthn(Web Authentication)
FIDO2プロトコルに組み込まれているパスワードレス認証API。
このAPIを通じて、ウェブアプリケーションは、様々な認証器を利用してユーザー認証を行うことができる。
認証器の例 : androidスマホ、iOSスマホ、windowsPC、MacPC
WebAuthnには認証器内で秘密鍵と公開鍵を発行し、ユーザ情報や公開鍵をサーバに登録する登録フェーズと、サーバに保存された公開鍵を用いてユーザの認証を行う認証フェーズが存在する。
WebAuthnの登録
参考サイトから引用。
⓿ ブラウザから認証サーバーに登録リクエストを送信する
❶ 認証サーバーでチャレンジと呼ばれる文字列が生成され、サーバー情報とともにブラウザに送信される
❷ ❶の情報にユーザー情報を付加して、認証器に本人確認をリクエストする
❸ 認証器での本人確認が完了したら、公開鍵と秘密鍵のペアを作成する
❹ ❸で生成した秘密鍵で署名した署名情報、ユーザー情報、公開鍵をブラウザに送信する
❺ 認証サーバーに署名情報と公開鍵を送信し、DBに保存する
認証器からはAttestation Objectと呼ばれる認証情報が返却されます。
Attestation Objectとは、認証器の情報・ユーザーの公開鍵・認証サーバーの情報・チャレンジを、認証器の> 秘密鍵で署名したものです。Attestation Object・デバイスの公開鍵・ユーザーの情報を認証サーバーへ送り、デバイスの公開鍵を用いてAttestation Objectが検証されます。Attestation Objectの正当性が確認できたら、ユーザーの公開鍵・ユーザーの情報がDBに保存され、登録処理が完了します
WebAuthnでの認証
参考サイトから引用。
⓿ブラウザから認証サーバーに認証リクエストを送信する
❶認証サーバーでチャレンジと呼ばれる文字列が生成され、サーバー情報とともにブラウザに送信される
❷認証器に本人確認をリクエストする
❸サーバー情報を元にユーザーの一覧が表示され、ユーザーを選択して本人確認を行う
❹認証器での本人確認が完了したら、ユーザーの秘密鍵で署名した署名情報、ユーザー情報をブラウザに送信する
❺DBに登録されているユーザーの公開鍵で署名検証し、ユーザーを認証する
認証時は認証器からAssertion Objectが返却されます。Assertion Objectとは認証サーバーの情報とチャレンジをユーザーの秘密鍵で署名したものです。
登録時にDBに保存したユーザーの公開鍵を用いてAssertion Objectを検証することで、認証を行います。

パスキー
WebAuthnをベースにした資格認証情報をクラウド経由で同期させる仕組み。
WebAuthnでは認証情報(秘密鍵)を認証器に直接保存するため、ユーザーが新しいデバイスに移行した場合、認証情報の移行が難しかった。
パスキーでは認証情報をクラウドで同期し、ユーザーが異なるデバイス間で同じ認証情報を使用できるようになっている。これにより、デバイスの紛失や買い替えの際に認証情報を容易に回復できる。
パスキーの登録
パスキーの認証

パスキー認証によって完全にパスワードが置き換えられるのか
現状、パスキー認証は主要なサービスによって対応されているが、全てのサービスにパスキー認証が導入されるのは時間がかかりそう。
-
生体認証データのセキュリティ:
- パスキーが生体認証データに依存する場合、そのデータのセキュリティが重要になります。生体情報が漏洩したり、偽造されたりするリスクがあります。
-
互換性と普及の問題:
- 既存のシステムとの互換性の問題に加えて、全てのウェブサイトやアプリケーションがパスキーに対応しているわけではないため、普及には時間がかかります。これにより、一部のユーザーは古いシステムと新しいシステムの間で認証方法を切り替える必要が生じるかもしれません。
-
プライバシーとデータ管理:
- パスキーの導入によって、認証情報の管理とプライバシーに関する新たな課題が生じる可能性があります。特に、ユーザーの認証情報がどのように収集、保存、処理されるかについて、透明性とユーザーのコントロールが重要です。
-
技術的な障壁:
- すべてのユーザーが最新の技術やデバイスを利用しているわけではないため、特に古いデバイスやシステムを使用しているユーザーにとっては、パスキーの導入が困難になる可能性があります。