パスワードレス認証という内容を見聞きするようになってきたと感じます。例えば、プライベートの場面において、Windows Helloを設定しており、指紋認証を利用しています。
OSの認証時にも利用しており、指をかざすだけですので、非常に便利と感じています。先日もの端末でWebサイトでのお買い物をしようとした際にパスキー登録のUIが表示され、パスキーに対応しているシステムも多くなっていると感じました。
今回は、徐々に身近になりつつあるパスワードレス認証(パスキー)に関する内容に関して、技術的な内容を主体として記載しました。
FIDO2(ファイドツー)とは?
パスキーに関して、認証器として利用するのは端末に内蔵されたもので利用できます。
主には顔認証や指紋認証などの生体認証を利用することが多いと感じます。こういった認証器を利用してパスワードレス認証を利用する際に出てくるのが、「FIDO2」という内容になります。
FIDO2は、パスワードに依存しない強固な認証を実現するための規格セットとなります。従来のパスワード認証に代わり、生体認証や物理的セキュリティキーを利用した認証メカニズムを提供します。
主要なコンポーネントは以下の内容で構成されています。

FIDO2の特徴として公開鍵暗号、フィッシング耐性、使いやすさがあります。
-
公開鍵暗号 秘密鍵は認証器内に安全に保存され、公開鍵はサーバーに送信、保存されます。認証時には、サーバーからのチャレンジに対して秘密鍵で署名を生成します。
-
フィッシング耐性 認証情報は作成されたオリジン(ドメイン)に関連付けられています。
-
使いやすさ パスワードを覚える必要がなく、顔認証や指紋認証などの直観的な認証方法を利用することができます。
パスキーとは?
パスワードレス認証は、パスワードを使わない認証方法全般、パスキーは、FIDO2/WebAuthnにもとづく実用的な認証情報の形式、と捉えています。
利用に際しては、登録フェーズや認証フェーズに分かれます。登録フェーズでは、認証器の情報をサーバーとの関連付けを行い、認証フェーズでは、関連付けした情報を利用して認証します。
《登録フェーズ》
まず、登録する際にパスキーを要求すると、サーバーにてチャレンジ(乱数となるバイナリデータ)などの認証に関わる情報を生成し、デバイスに応答させます。
応答後、生体認証を実施すると、デバイスにて公開鍵、秘密鍵を生成します。サーバーからの応答に含まれているチャレンジを秘密鍵で署名し、署名したチャレンジと公開鍵をサーバーに送信します。サーバーでは署名されたチャレンジと公開鍵で検証し、検証結果を応答します。

《認証フェーズ》
ログイン時に認証を要求すると、サーバーでチャレンジなどの応答情報を生成して、デバイスにて生体認証を要求します。生体認証を実施後、デバイス内の秘密鍵でチャレンジを署名してサーバーに送信します。サーバーでは署名データを公開鍵で検証し、結果を応答して認証を通知します。

さいごに
FIDO2やWebAuthnなどの用語や仕組みの理解も必要ですが、公開鍵や秘密鍵などの要素技術や特性の理解の方が大切に感じます。また、上記のようなFIDO2やWebAuthn、認証器の組み合わせによって、UIを表示する理由も理解できるようになりました。
ふとしたことでも技術的な背景や仕組みを理解しておくことが今後の知識として役立つと思っています。

