daisuzz.log

FIDO認証を調べてみた

FIDO認証に興味があり、FIDO認証とはどういうものなのか、どういう仕組みで実現されているのか、を調べてみたので今回はそれについて書いていこうと思います。実装については触れていないのと、FIDO Allianceの仕様書をがっつり読み込んだわけではないので、ざっくりの概要レベルの説明になっているのでご容赦ください。

ゴール

  • FIDO認証の処理の流れがわかる

  • FIDO認証の仕様の分類がわかる

FIDOとは

FIDOとは、「Fast IDentity Online」の略で、FIDO Alliance - Open Authentication Standards More Secure than Passwordsによって仕様策定や普及推進が進められている、公開鍵認証に基づいた認証仕様です。

FIDOの用語

FIDOでは「Relying Party(RP)」という、ユーザの登録、認証を行うwebサイトや事業者を表すものと、「Authenticator (認証器)」という秘密鍵と公開鍵を生成, 保持するものが登場します。さらに認証器は、ローカルに実装されている内部認証器と、スマホなどのデバイスに実装されている外部認証器の2種類に分類されます。

FIDOの仕様

FIDOは以下の3種類の仕様が策定されています。

  • UAF

  • U2F

  • FIDO2

UAF

UAFは、「Universal Authentication Framework」の略で、パスワードレス型(所持+生体, etc)の認証仕様について策定されたものです。 UAFは、主にスマートフォンのアプリからの利用を想定したものになっています。

U2F

U2Fは、「Universal 2nd Factor」の略で、パスワード補完型(記憶+所持)の認証仕様について策定されたものです。 U2Fでは、パスワード認証の補完として生体認証やハードトークンの利用を想定したものになっています。

FIDO2

FIDO2は、外部認証器や内部認証器を用いた、パスワードレス型認証や多要素認証を実現するための仕様について策定されたものです。 FIDO2は、ブラウザ上でFIDO認証を実現するための標準APIであるWebAuthnと、認証器との通信プロトコルであるCTAPという仕様で構成されています。

WebAuthnは、正式には「W3C Web Authentication specification」と呼ばれるものでCTAPを用いてFIDO認証を行うための標準APIの仕様が記述されています。当初はFIDO Allianceによって仕様策定が進められていましたが、現在はW3Cで仕様策定が進められているようです。 またブラウザではChromeFirefoxなどがWebAuthnに対応しています。

CTAPは、Client-To-Authenticator-Protocolの略で認証器を用いてFIDO認証を行うための通信プロトコルの仕様が記述されています。 CTAPには、FIDO Security Keyを認証器として利用してFIDO認証をおこなうためのプロトコルであるCTAP1と、FIDO Security Keyに加えスマートフォンを認証器として利用してFIDO認証をおこなうためのプロトコルであるCTAP2の2種類があります。

FIDO認証の流れ(内部認証器を使った場合)

内部認証器を用いたFIDO認証の流れを「登録」と「ログイン」のフローに分けて書いてみます。

登録

  • ユーザがPCからRPにサービスを利用したい旨をリクエス

  • RPはチャレンジを生成してPCにチャレンジを返す

  • PC(Authenticator)は鍵ペアを生成して、チャレンジを秘密鍵で署名したものと公開鍵をRPに送信

  • RPはチャレンジや署名を検証して公開鍵を保存

ログイン

  • ユーザがPCからRPにログインしたい旨をリクエス

  • RPはチャレンジを生成してPCにチャレンジを返す

  • PCは送られてきたチャレンジを秘密鍵で署名してRPに送信

  • RPは署名を検証して認証をおこなう

最後に

FIDO認証(FIDO2)は、ブラウザなどのWebサイトでパスワードレスで認証をおこなう方法を実現するものとして期待されています。 現状、国内でもFIDO認証を導入した事例が出てきているので、今後さらにFIDOに注目していきたいと思います。(余力があればYubikeyなどを買ってFIDOの実装をしてみたい、、、)

参考資料