FIDO (認証技術)

**FIDO**（ファイド）は、（素早いオンライン認証）の略語で、従来のパスワード認証に代わる認証技術の1つ。FIDO2に基づくパスキーが広く使われている。

業界団体であるFIDO Allianceによって規格の策定と普及推進が行われている。

ユーザーから見たFIDOの特徴は生体認証などを利用するため「ユーザーはパスワードを憶える必要がない」という点になる。また、生体認証を端末側で行うことで「生体情報そのものはネットワーク上に流れない、サーバーで保持しない」ためインターネット上には生体情報が流通せず、情報漏洩のリスクが軽減されていることが特徴となる。

## 概要
ネットワークにおける本人認証として長らくID/パスワードによる認証方式が採用されてきた。しかしながら、このパスワード方式は、パスワードの漏洩が問題視されていた。パスワード認証の不備を補うために、複数の認証キーを用いる多要素認証が開発された。暗号鍵を埋め込んだUSBキー（セキュリティトークン）、端末ごとに生成した端末ID、指紋や虹彩といった生体情報、SMSでその場限りのワンタイムパスワードを本人に送信するといったような認証方法がある。生体情報による認証を除けば、「鍵」となる媒体を物理的に盗まれた場合には不正ログインが可能となる。このため、多要素認証として指紋や虹彩、顔、静脈（指、手のひら）といった生体情報を認証に使う方式が注目を集めてきた。

FIDOは、公開鍵暗号方式を基盤とした認証プロトコルである。利用者の**FIDO認証器**（スマートフォンや外部セキュリティキーなどのデバイス、**FIDO オーセンティケータ**ともいう）内で生成された秘密鍵はデバイス外部に出ることなく、認証サーバーには対応する公開鍵のみが登録される。これにより、サーバー側での認証情報漏洩リスクを大幅に低減できる。また、認証時にはサーバーから送られるチャレンジ（一度きりの乱数）に対して秘密鍵でデジタル署名を行うため、リプレイ攻撃にも強い耐性を持つ。認証時には、生体認証やセキュリティキーのタッチといった簡単な操作で認証が完了するため、簡便な操作で認証を行うことができる。

これらのように、FIDOは「高いセキュリティ」「利便性の向上」「プライバシー保護」といった点で、従来のパスワード方式より利点がある。

2012年に生体認証をベースとした手軽でセキュアなオンライン認証基盤を実現するためにFIDO Allianceが結成された。

## 仕組み
FIDOの認証は、大きく「登録処理」と「認証処理」の2つのフェーズに分けられる。いずれも、公開鍵暗号方式を応用したものになっている。

### 登録処理
利用者が初めてサービスにFIDO認証を登録する際のプロセスである。

# 登録要求: 利用者はWebブラウザを通じて、認証サーバーにFIDO認証の登録を要求する。
# チャレンジの送信: 認証サーバーは、不正な登録を防ぐためのチャレンジ（乱数）やドメイン情報などを生成し、Webブラウザに送信する。
# 鍵ペアの生成: Webブラウザからの要求を受け、FIDO認証器は、利用者の本人確認（例：指紋認証、顔認証）を行った上で、そのサービス専用の公開鍵と秘密鍵の鍵ペアを生成する。
# 秘密鍵の保存: 生成された秘密鍵は、FIDO認証器内のセキュアエレメントなどに保存される。この秘密鍵がデバイスの外に出ることはない。
# 公開鍵の登録: FIDO認証器は、生成した公開鍵とチャレンジ（乱数）へのデジタル署名などをWebブラウザ経由で認証サーバーに送信する。認証サーバーはこれらを検証し、問題がなければ利用者アカウントと公開鍵を紐づけて保存する。

### 認証処理
登録完了後、利用者がサービスにログインする際のプロセスである。

# 認証要求: 利用者はWebブラウザを通じて、認証サーバーにログイン（認証）を要求する。
# チャレンジの送信: 認証サーバーは、認証セッションごとに新たなチャレンジ（乱数）を生成し、Webブラウザに送信する。
# 署名の要求: Webブラウザは受け取ったチャレンジをFIDO認証器に渡し、署名を要求する。
# デジタル署名の生成: （乱数）は、利用者の本人確認（生体認証など）を実行する。成功すると、保存されている秘密鍵を用いて、受け取ったチャレンジやオリジン（ドメイン）情報に対してデジタル署名を作成する。
# 署名の検証: 生成されたデジタル署名は、Webブラウザ経由で認証サーバーに送信される。認証サーバーは、事前に登録されている公開鍵を使ってその署名を検証する。
# 認証成功: 署名が正当であると検証できた場合、認証サーバーはログインを許可し、認証が成功する。

## FIDO認証器
FIDO認証器（FIDO オーセンティケータ）は、FIDO の技術仕様に基づき、パスワードレス認証を実現するためのデバイスまたはソフトウェア機能である。一般に「**セキュリティキー**」とも呼ばれる。その中核的な役割は、公開鍵暗号方式に基づき、**公開鍵と秘密鍵の鍵ペア**を生成する。生成された秘密鍵は、TPM (Trusted Platform Module) や SE (Secure Element) といった耐タンパー性能を持つ専用のハードウェアチップ内に保管される。

FIDO Allianceは、FIDO認証器の機能、セキュリティレベル、生体認証部品を検証し、認定を行っている。FIDO認証器には、その仕様に応じて、レベル1～レベル3+まで、認証器レベルが設定されている。認定済みのFIDO認証器の情報は、FIDO Allianceのサーバーに登録される。サービス提供者は、提供するサービスの利用を許可する生体認証方式やデバイスの型番などを制限できる。
FIDO認証器は、デバイスの形態によって主に2種類に大別される。

### プラットフォーム認証器 (Platform Authenticator)
PCやスマートフォンなどのデバイス本体に内蔵された認証器である。OSやプラットフォームが提供するセキュリティ機能（セキュアチップなど）を利用して秘密鍵を保護する。利用者は普段使っているデバイスでシームレスに認証を行えるのが利点である。

* Windows Hello（顔認証、指紋認証、PIN）
* AppleのFace ID / Touch ID
* Androidの指紋認証・顔認証

### ローミング認証器 (Roaming Authenticator)
**独立した物理的なデバイス**であり、利用者が持ち運んで様々なクライアント端末（PCやスマートフォン）に対し、USB、NFC、BLEなどで接続することで利用できる認証器である。一般的に「セキュリティキー」と呼ばれるものはこのタイプを指す。一つの認証器をど複数の環境で利用でき、物理的に所有していることが認証の条件となるため、セキュリティレベルが非常に高い。一方で、紛失のリスクが伴う。

* YubiKey (Yubico)
* Titan セキュリティ キー (Google)

## FIDO 1.0
FIDO 1.0仕様の技術として Universal Authentication Framework (UAF) と Universal Second Factor (U2F) がオープンな規格として仕様公開されている。

### Universal Authentication Framework (UAF)
UAF1.0は2014年12月に公開された。UAFは（汎用的な認証基盤）の略。FIDO認証器を利用して、パスワードを使わない生体認証で認証を行う仕組み。

### Universal Second Factor (U2F)
U2Fは2015年5月に公開された。U2Fは（汎用的な第2要素）の略。FIDO認証器が不要。主としてブラウザから利用をする。ID/パスワードの1段階めの認証に加えて、セキュリティコードやセキュリティキーなどを使った二要素認証を採用している。セキュリティーキーとして、USBキーに加えて、BluetoothとNFCをサポートした仕様となっている。

## FIDO2

FIDO2は、上記のUAFとU2Fを統合した仕様で、以下の2つから構成される。FIDO2に基づくものとしてパスキーがある。

### Web Authentication（WebAuthn）
W3C（World Wide Web Consortium）が正式に勧告したWeb認証仕様。Webブラウザと、認証を必要とするWebサーバ間の通信仕様である。FIDO認証のサポートを可能にするためにブラウザやプラットフォームに組み込まれている標準的なウェブAPIを定義している。

### Client to Authenticator Protocols（CTAP）
FIDO認証器とクライアント間の通信を制御する通信仕様。2019年3月4日にウェブ標準として承認された。これに伴い、Universal Second Factor (U2F) は CTAP1 に改名された。
* CTAP1: 既存のFIDO U2F 認証器（FIDO セキュリティ・キーなど）を、FIDO2 対応のブラウザや OS 上で認証に使用できるようにするプロトコル。 USB、NFC、BLEに対応。
* CTAP2:FIDO2 対応のブラウザや OS 上で認証に使用できるようにするプロトコル。USB、NFCのほか、BLE パスワードレス、二要素認証、多要素認証にも対応。
* 2019年1月30日 - CTAP 2.0 制定
* 2021年6月15日 - CTAP 2.1 制定
* 2025年7月14日 - CTAP 2.2 制定

## 出典

## 関連項目
* 生体認証
* FIDO Alliance
* パスキー
* WebAuthn
* 公開鍵暗号方式