「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
経緯 †
- 2015年11月19日、WWW技術の標準化団体である
W3Cに FIDO 2.0 のWeb API仕様を提案した。
- UAFとU2Fを統合(補完し置換する)し、
OSやブラウザといったプラットフォームのサポートに最適化する、
プラットフォーム(ブラウザやOS)によるネイティブサポートのための仕様。
ざっくり †
- パスワードやOTPに代わる新しい認証
- 秘密鍵で署名(=登録)をして、公開鍵で検証(=認証)
2つの仕様 †
以下の2つの仕様から成る。
- Web API(抽象的なAPIを通じたメッセージの通信)仕様
- ブラウザでの普及を想定し、標準化団体W3Cへ、本仕様を提案
- 秘密鍵を使用して認証器のコンテキストに関する情報に署名。
デバイス間連携仕様(CTAP: Client To Authenticator Protocol) †
シータップ
- PC、スマホなどのデバイス組込みではない認証器に対応するための通信プロトコルの規定。
- EAP: External Authenticator Protocol
USB / Bluetooth / NFCトランスポートバインディングを規定
- プラットフォームと外部認証器間の通信プロトコルを規定。
- 具体的な通信路(USB / Bluetooth / NFCなど)の適用が可能。
デバイス †
U2Fセキュリティ・キーの使用 †
U2Fセキュリティ・キーを使用している場合、
platform or cross-platform 認証器 †
認証器 = Authenticator
- platform Authenticator : OS組み込み機能
- cross-platform Authenticator : セキュリティ・キー
登場人物のまとめ †
ユーザ †
認証器(Authenticator) †
クライアント †
- クライアント側
以下を接着するすべての組み合わせ。
- クライアント・プラットフォーム
- 認証プロバイダ
- およびすべて
- クライアント・デバイス
- クライアントが実行されるハードウェア・デバイス
- 認証器は、クライアント・デバイスにバインドされる。
詳細 †
処理シーケンス †
登録(Attestation) †
RegistrationでAttestationされる。
- 認証器で鍵を生成・登録するAPIを使用して処理を行う。
(新しいアカウント、または既存のアカウントへ、
新しい非対称鍵ペアの関連付ける認証情報を作成する。)
- サービス要求(RP Client ---> RP Server)
- 認証要求(クライアント <--- RP Client <--- RP Server)
- クレデンシャル生成要求(NativeのAPI ---> 認証器)
- クレデンシャル生成
「この機器(認証器)をサーバに登録しますか?」
- ユーザーによる明示的な操作(ジェスチャー)
- 秘密鍵・公開鍵のペアを生成することを承認(確認)
- クレデンシャル情報の応答(NativeのAPI ---> RP Client ---> RP Server)
公開鍵、鍵情報 (署名つき) をサーバに伝達して登録。
認証(Assertion) †
AuthenticationでAssertionされる。
- 登録済みの鍵を使って認証用の署名を生成するAPIを使用して処理を行う。
(既存の認証情報セットを使用し、ログインまたは二要素認証をする。)
- サービス要求(RP Client ---> RP Server)
- 認証要求(NativeのAPI <--- RP Client <--- RP Server)
- FIDO2認証要求(NativeのAPI ---> 認証器)
- クレデンシャルの検索
「この機器(認証器)を用いて認証しますか?」
- ユーザーによる明示的な操作(ジェスチャー)
- 既存のクレデンシャルを利用することを承認(確認)
- 認証器による認証
- デバイス側の認証器で認証を完了させ、
- 認証結果を端末側が持つ秘密鍵を使って署名する。
- アサーション応答(RP Client ---> RP Server)
署名されたアサーション(署名つきchallenge + その他データ)を
サーバに伝達し、署名検証することでログインできる。
各仕様 †
Web API for accessing FIDO 2.0 credentials †
JavaScriptを介してFIDO 2.0資格情報にアクセスするための、
Web Authentication API(別名 WebAuthn)を定義。
- Webアプリケーション(RPアプリケーション)から利用される
- 登録シーケンスと、認証シーケンスに使用するAPIを定義している。
- 認証器で鍵を生成する登録するAPI
- 登録済みの鍵を使って認証用の署名をつくるAPI
Key Attestation Format †
クライアントや認証器などのコンテキストを表現するための
アサーションや、クレデンシャルのフォーマットを定義している。
- 認証器の信頼性、秘密鍵管理の信頼性を証明するための情報のデータ構造を定義
- 具体的な個別の環境を利用する(TPMが暗号カーネルとして機能する)場合のプロファイル。
仕様が進化するにつれて、より多くのプロファイルが追加される予定。
Signature Format †
FIDO 2.0準拠クレデンシャル用の署名フォーマット(上記のアサーションに署名を行う)
- アサーションを表すデータ構造
- 認証器で署名するためのバイトストリームにシリアライズされる方法
- 結果のシグネチャとそれに関連するデータの表現
OSネイティブ用は? †
つまずきポイント †
WWWブラウザ †
実装事例 †
アカウント・リカバリ †
デバイスの紛失に対する
の検討が必要。
フィッシング †
- 以下のような処理でフィッシングができてしまう。
- ChromeではcaBLEと呼ばれるBLEの接続方法を検討している。
参考 †
W3C †
- FIDO 2.0: Web API for accessing FIDO 2.0 credentials
- FIDO 2.0: Key Attestation Format
- FIDO 2.0: Signature format
FIDO Alliance †
- Client To Authenticator Protocol
Yahoo! JAPAN †
コーポレートブログ †
Tech Blog †
- Yahoo! JAPAN Tech Advent Calendar 2018
ニュース †
2015 †
2016 †
2018 †
Qiita †
CTAP †
OSSコンソーシアム †
Security Key by YubicoというFIDO2.0認証器を評価する
Tags: :IT国際標準, :認証基盤, :FIDO