「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
基本思想 †
FIDOの基本思想は、
「生体情報などの認証情報をサーバーに保存したり送信したりせず、
ユーザーのデバイスに保存することで、秘密情報の漏洩を防ぐ。」
というもの。
また、
など。
様々な外部認証器 | | 通信(FIDO標準プロトコル・メッセージ) | API | クライアント(FIDO Client, RP Application) | WebAPI | 通信(FIDO標準プロトコル・メッセージ) | サーバ(RP Server, FIDO Server) |
・ | 生体認証 | <---> EAP (External Authenticator Protocol) | JS、NativeのAPI 以下は同じものを指している? - Web Authentication API - WebAPI for Accessing Credential API (WebAPIと言っているが所謂、WebAPIではない...。) | 各種ブラウザ、各種OS | 各種HttpClient? | <---> ここの仕様は存在しない? | サービスA サービスB サービスC ...サービスX |
| ・ | 指紋 |
| ・ | 静脈 |
| ・ | 虹彩 |
| ・ | 顔 |
・ | その他の認証方法 |
| ・ | PINコード |
| ・ | ジェスチャー |
仕組み †
- 公開鍵暗号方式をベースとしたチャレンジ・レスポンス認証。
- 「既存の認証」に対して公開鍵を登録するという実装になる。
- 処理シーケンス
採用、普及の状況 †
- Google
- Microsoft
- PayPal?
- Dropbox
- GitHub
- Samsung Electronics
- NTT docomo
- Bank of America Corporation
特性 †
利点 †
セキュリティ向上 †
- パスワードへの依存を減らし、認証の安全性が向上する。
- パスワードなどの認証情報がネットワークに流れない。
コスト削減 †
標準規格のため、認証器はサービスに共通的に使える。
プライバシー保護 †
- サーバ側にパスワード情報や生体情報を持たない。
- 「端末側での本人確認」と「サーバ側での認証」を分けている。
操作性 †
- 生体認証や端末のボタン操作など認証操作が簡単になる。
- これにより、パスワード入力・管理を不要にできる。
課題 †
機能 †
- ユーザとデバイスの組の確実性しか保証されない。
- また、権限制御は別途実装する必要がある。
用語 †
OAuth2と同じで、Relying Party(RP)という用語が使用されている。
Relying Party(RP)には以下の2つがある。
RP Application †
= FIDOクライアント
- FIDO対応したクライアント・アプリケーション
- 認証器・デバイス上でFIDOのAPIを使用。
RP Server †
= FIDOサーバ
- FIDO対応したサーバ・アプリケーション
- Webアプリケーションで、FIDOクライアント、FIDOサーバと連携する。
変遷 †
FIDO 1.0 †
- 2014年12月に仕様が公開された。
- 既にFIDOエコシステムを構築、市場に普及。
UAF(Universal Authentication Framework) †
パスワードレス認証の仕様
- 端末備え付けの認証器で、パスワードなし認証を行う。
- 端末内に生体認証データ(やPIN)を登録し、
Webサービスなどにその端末を登録すれば、
利用者が端末で生体認証(やPIN入力)を行う事でログインが可能になる
U2F(Universal Second Factor) †
パスワードに加えた2要素認証向けの仕様
2要素認証(USB、Bluetooth、NFC経由)
- 利用者は
- 従来通りのユーザIDとパスワードによる認証を行った後、
- U2Fに対応した USB端末や NFC端末 (認証器) を使ってログインする。
FIDO 1.1 †
2016年12月8日、複数の機能拡張を追加。
- ICカード
- NFC(Near Field Communication)
- Bluetooth Low Energy(BLE)
- 拡張メタデータ・サービス
FIDO 2.0 †
2015年11月19日、WWW技術の標準化団体であるW3Cに FIDO 2.0 のWeb API仕様を提案
- FIDO 2.0は、FIDO 1.0の拡張ではなく、
- UAFとU2Fを統合し、OSやブラウザといったプラットフォームのサポートに最適化する、
プラットフォーム(ブラウザやOS)によるネイティブサポートのための仕様。
- OSやブラウザのAPIへの定義され、FIDO Clientといった中継のためのレイヤが無くなったため、
RPアプリケーションから直接リクエストができる、見かけ上U2Fに近いシンプルな構成になった。
- また、あるサービスに登録済みの認証デバイスによるFIDO認証を通じて、
未登録の新たな端末からサービスにログインできる機能が使えるようになる。
- (例)PC上のアプリケーション利用時の認証を、スマホで行う。
- PC-スマホ間のデバイス連携機能で、スマホを認証器として用い
- これにより、スマホに認証機能を集約させることができる。
Webプラットフォーム API仕様 †
- Web API(抽象的なAPIを通じたメッセージの通信)仕様
- ブラウザでの普及を想定し、標準化団体W3Cへ、本仕様を提案
- 秘密鍵を使用してクライアントや認証器などのコンテキストに関する情報に署名。
デバイス間連携仕様 †
デバイス組込みではない認証器に対応するための通信プロトコルの規定。
- EAP (External Authenticator Protocol)
USB/Bluetooth/NFCトランスポートバインディングを規定
- プラットフォームと外部認証器間の通信プロトコルを規定。
- 具体的な通信路(USB/Bluetooth/NFCなど)の適用が可能。
詳細 †
処理シーケンス †
登録 †
認証器で鍵を生成・登録するAPIを使用して処理を行う。
- サービス要求(RP Application ---> RP Server---> FIDO Server)
- 認証要求(RP Application <--- RP Server <--- FIDO Server)
- クレデンシャル生成要求(RP Application ---> FIDO Client ---> 認証器)
- クレデンシャル生成
「この機器(認証器)をサーバーに登録しますか?」
- ユーザーによる明示的な操作(ジェスチャー)
- 秘密鍵・公開鍵のペアを生成することを承認(確認)
- クレデンシャル情報の応答(RP Application ---> RP Server---> FIDO Server)
公開鍵、鍵情報 (署名つき) などを公開鍵暗号方式でサーバーに伝達する。
- サーバーで・・・(RP Server ---> FIDO Server)
認証 †
登録済みの鍵を使って認証用の署名を生成するAPIを使用して処理を行う。
- サービス要求(RP Application ---> RP Server---> FIDO Server)
- 認証要求(RP Application <--- RP Server <--- FIDO Server)
- FIDO認証要求(RP Application ---> FIDO Client ---> 認証器)
- クレデンシャルの検索
「この機器(認証器)を用いて認証しますか?」
- ユーザーによる明示的な操作(ジェスチャー)
- 既存のクレデンシャルを利用することを承認(確認)
- 認証器による認証
- デバイス側の認証器で認証を完了させ、
- 認証結果を端末側が持つ秘密鍵を使って署名する。
- アサーション応答(RP Application ---> RP Server---> FIDO Server)
署名されたアサーション(署名つきchallenge + その他データ)を公開鍵暗号方式でサーバーに伝達する。
- サーバーで署名検証(RP Server ---> FIDO Server)
サーバーでは、このアサーションの署名を検証することでログインできる。
FIDOクライアント †
- RPアプリケーション
- ブラウザやOSなどの各種、ユーザーエージェント (User agent)を指す。
認証器 †
認証器は、Authenticatorとも言う。
- 構成
- スマートフォンやPCであれば、
下記のようなセキュア環境で動作する。
- TEE(Trusted Execution Environment)
- TPM(Trusted Platform Module)
- SE(Secure Element)
- 外部接続であれば、
以下のような接続インタフェースを使用する。
- USB
- NFC
- Bluetooth Low Energy
ブラウザ †
FIDO 2.0のWeb API仕様に対応したブラウザは、
などの、FIDO準拠のデバイスやソフトウエアによるユーザー認証の結果を、
標準化されたAPIで受け取ってWebサービスに通知することができる。
FIDOサーバー †
各仕様 †
FIDOサーバ側のWebAPIのインターフェイス定義は発見できず(未定義?)。
WebAPI for Accessing Credential API †
どうも、Web Authentication APIと同じものを指している模様。
# WebAPI for Accessing Credential APIが、Web Authentication APIに準拠?
- Webブラウザ用と、OSネイティブ用のAPIがある。
- 登録シーケンスと、認証シーケンスに使用するAPIを定義している。
- 認証器で鍵を生成する登録するAPI
- 登録済みの鍵を使って認証用の署名をつくるAPI
- Web Authentication API 自体の仕様が固まってないので、
特に Edge に関しては polyfill を使って対応する。
Key Attestation Format †
クライアントや認証器などのコンテキストを表現するための
アサーションや、クレデンシャルのフォーマットを定義している。
- 認証器の信頼性、秘密鍵管理の信頼性を証明するための情報のデータ構造を定義
- 具体的な個別の環境(TPMやAndroidなど)を利用する場合を規定(プロファイル)。
Signature Format †
FIDO 2.0準拠クレデンシャル用の署名フォーマット(上記のアサーションに署名を行う)
FIDO準拠のデバイスやソフトウエア †
- 2016年7月のWindows 10 Anniversary Updateでは、
ブラウザーのMicrosoft EdgeからFIDO対応サービスへの
ログイン方法に生体認証が利用できるようになった。
Touch ID †
iPhoneシリーズのTouch IDの指紋認証は、FIDO対応ではないもよう。
しかし、FIDOクライアント側で、Touch IDを利用可能にしている模様。
応用 †
FIDO認証とID連携 †
ID連携により、アサーションを連携することで、他のRPでもFIDO認証をサポートできる。
オフライン利用 †
アサーションの提示でオフラインでも本人確認が可能。
参考 †
Yahoo! JAPAN †
Tech Blog †
FIDO Alliance †
生体認証などを利用したより強力なオンライン認証技術の標準化を目指す
非営利の標準化団体(2012年7月に設立、2013年2月に正式発足)
セミナー †
FIDO Alliance MetaData? Service †
脆弱性の発覚などで信用性が低下したデバイスに関する情報。
ES256のJWTであるもよう。
W3C †
FIDO 2.0 †
- Submission Request to W3C: FIDO 2.0 Platform Specifications 1.0
https://www.w3.org/Submission/2015/02/
- FIDO 2.0: Web API for accessing FIDO 2.0 credentials
- FIDO 2.0: Key Attestation Format
- FIDO 2.0: Signature format
Web Authentication API †
Microsoft †
端末のセキュリティ †
TEE(Trusted Execution Environment) †
SE(Secure Element) †
USBドングル †
挿さないとPCが動かないハードウエア型の鍵デバイス
Tags: :認証基盤