「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>FIDO]]

* 目次 [#z398faa8]
#contents

*概要 [#z1770eba]
2015年11月19日、WWW技術の標準化団体であるW3Cに FIDO 2.0 のWeb API仕様を提案

**経緯 [#od17873e]
-2015年11月19日、WWW技術の標準化団体である~
W3Cに FIDO 2.0 のWeb API仕様を提案した。

-FIDO 2.0は、[[FIDO 1.0>FIDO1]]の拡張ではなく、
--[[UAFとU2F>FIDO1]]を統合し、OSやブラウザといったプラットフォームのサポートに最適化する、~

--[[UAFとU2F>FIDO1]]を統合(補完し置換する)し、~
OSやブラウザといったプラットフォームのサポートに最適化する、~
プラットフォーム(ブラウザやOS)によるネイティブサポートのための仕様。
--OSやブラウザのAPIへの定義され、FIDO Clientといった中継のためのレイヤが無くなったため、~
RPアプリケーションから直接リクエストができる、見かけ上U2Fに近いシンプルな構成になった。

-また、あるサービスに登録済みの認証デバイスによるFIDO認証を通じて、~
未登録の新たな端末からサービスにログインできる機能が使えるようになる。
--(例)PC上のアプリケーション利用時の認証を、スマホで行う。
---PC-スマホ間のデバイス連携機能で、スマホを認証器として用い
---これにより、スマホに認証機能を集約させることができる。
--OSやブラウザのAPIが定義され、[[FIDO Client>FIDO#yb40ab95]]といった中継のためのレイヤが無くなったため、~
[[依拠当事者(Relying Party)>#s47c72a3]]から直接リクエストができる、見かけ上U2Fに近いシンプルな構成になった。

-以下の2つの仕様からなる。
**ざっくり [#t9c588f1]
-パスワードやOTPに代わる新しい認証
-秘密鍵で署名(=登録)をして、公開鍵で検証(=認証)

**Webプラットフォーム API仕様 [#aef70118]
--[[秘密鍵で署名(=登録)>#e7f048cc]]
---[[依拠当事者(Relying Party)>#s47c72a3]]から認証機の登録を要求する。
---署名のための秘密鍵は[[認証器>#lcc75f02]]内で生成される。
---[[依拠当事者(Relying Party)>#s47c72a3]]から生成された情報に署名を行う。~
(rpId; RPの識別子、userId, Name: ユーザ情報、challenge: 乱数)
---公開鍵と署名を[[依拠当事者(Relying Party)>#s47c72a3]]に登録する。

--[[公開鍵で検証(=認証)>#dacdf419]]
---本人確認, 否認防止の目的がある。
---...

**2つの仕様 [#w7d24bd2]
以下の2つの仕様から成る。

***Webプラットフォーム API仕様(WebAuthn: [[Web Authentication API]]) [#aef70118]
-Web API(抽象的なAPIを通じたメッセージの通信)仕様
--ブラウザでの普及を想定し、標準化団体W3Cへ、本仕様を提案
--秘密鍵を使用してクライアントや認証器などのコンテキストに関する情報に署名。
--秘密鍵を使用して[[認証器>#lcc75f02]]のコンテキストに関する情報に署名。

-以下の3つの仕様から成る。
--[[WebAPI for Accessing Credential API>#yed618c1]]
--[[Web API for accessing FIDO 2.0 credentials>#yed618c1]]
--[[Key Attestation Format>#ad9f61cb]]
--[[Signature Format>#be72a8b1]]

**デバイス間連携仕様 [#g0465d1e]
-デバイス組込みではない[[認証器>FIDO#lf855e22]]に対応するための通信プロトコルの規定。
***デバイス間連携仕様(CTAP: Client To Authenticator Protocol) [#g0465d1e]
シータップ

-EAP (External Authenticator Protocol)~
USB/Bluetooth/NFCトランスポートバインディングを規定
--プラットフォームと外部[[認証器>FIDO#lf855e22]]間の通信プロトコルを規定。
--具体的な通信路(USB/Bluetooth/NFCなど)の適用が可能。
-PC、スマホなどのデバイス組込みではない[[認証器>#lcc75f02]]に対応するための通信プロトコルの規定。

-EAP: External Authenticator Protocol~
USB / Bluetooth / NFCトランスポートバインディングを規定
--プラットフォームと外部[[認証器>#lcc75f02]]間の通信プロトコルを規定。
--具体的な通信路(USB / Bluetooth / NFCなど)の適用が可能。

-CTAP1、CTAP2
--CTAP1 : [[FIDO1 U2F>FIDO1#ee5736ae]]のスペック
--CTAP2 : FIDO2のスペック

**デバイス [#q56a57c0]

***U2Fセキュリティ・キーの使用 [#xeffb25a]
U2Fセキュリティ・キーを使用している場合、
-FIDO2は後方互換性を提供する(ただし、[[認証器>#lcc75f02]]の実装に依る)。
-UAFの機能を実行できるが、プロトコルは異なる。
-[[Web Authentication API(別名 WebAuthn)>Web Authentication API]]でも使用できる。

***platform or cross-platform [[認証器>FIDO#lf855e22]] [#lcc75f02]
[[認証器>FIDO#lf855e22]] = Authenticator
-platform Authenticator : [[OS組み込み機能>Windows Hello]]
-cross-platform Authenticator : セキュリティ・キー

**登場人物のまとめ [#zf352eb5]

***ユーザ [#eb9c3311]
-ユーザ同意~
ユーザが求めている内容に同意すること

-ユーザ・ハンドル
--[[依拠当事者(Relying Party)>#s47c72a3]]によって識別されるユーザID
--64バイトの最大サイズを持つ不透明バイトシーケンス
--信用証明書の数を制御するために[[依拠当事者(Relying Party)>#s47c72a3]]によって使用される。~
(ユーザ・ハンドル + [[RP ID>#s47c72a3]]で信用証明書が一意に決まる)

***[[依拠当事者(Relying Party)>FIDO#eb969838]] [#s47c72a3]
-アーキテクチャによる違い
--[[認証器>#l38a4cce]]をPlatform API経由で使用するClientアプリケーション
--[[認証器>#l38a4cce]]を[[Web Authentication API (別名 WebAuthn) 経由で使用するWebアプリケーション>Web Authentication API#q93a608f]]

-Client or Server
--[[RP Client>FIDO#tbbc2bdc]]~
指紋認証USBデバイス、虹彩認証対応スマホなどの、[[認証器>#l38a4cce]]から、~
[[登録(Attestation)>#e7f048cc]]、[[認証(Assertion)>#dacdf419]]の結果を、標準化されたAPIで受け取ることができる。

--[[RP Server>FIDO#ra24f089]]
---[[登録(Attestation)>#e7f048cc]]、[[認証(Assertion)>#dacdf419]]の結果を、[[RP Client>#ad1c979d]]から受け取る。
---IdP/STSに実装して、[[クレームベース認証]]を使用してWebアプリケーションと認証連携してもイイ。

***[[認証器>#lcc75f02]](Authenticator) [#l38a4cce]
-Platform API経由で利用する認証器
-[[Web Authentication API (別名 WebAuthn) 経由で利用する認証器>Web Authentication API#ze70bbe2]]

***クライアント [#b33bad1e]
-クライアント側~
以下を接着するすべての組み合わせ。
--クライアント・プラットフォーム
--認証プロバイダ
--およびすべて

-クライアント・デバイス
--クライアントが実行されるハードウェア・デバイス
--[[認証器>#lcc75f02]]は、クライアント・デバイスにバインドされる。

-クライアント・プラットフォーム

--クライアント・デバイス + [[依拠当事者(Relying Party)のRP Client>#s47c72a3]]の組み合わせ

--単一のクライアント・デバイスが、
---異なる[[依拠当事者(Relying Party)のRP Client>#s47c72a3]]を実行すると、
---異なるクライアント・プラットフォームとなる。

-[[WebAuthnクライアント>Web Authentication API#l4e269d3]]

*詳細 [#y031e0f2]

**処理シーケンス [#xa549daa]
|>|様々な外部[[認証器>#lf855e22]]||通信(FIDO2標準プロトコル・メッセージ)        |API|クライアント(FIDO2 Client)|WebAPI|通信(FIDO2標準プロトコル・メッセージ)|サーバ( FIDO2 Server)|h
|・|>|生体認証|<--->&br;EAP (External Authenticator Protocol)|JS、NativeのAPI&br;以下は同じものを指している?&br; - [[Web Authentication API]]&br; - Web API for accessing FIDO 2.0 credentials&br;(WebAPIと言っているが所謂、WebAPIではない...。)|各種ブラウザ、各種OS|各種HttpClient|<--->&br;ここの仕様は存在しない?|サービスA&br;サービスB&br;サービスC&br;...サービスX|
|>|>|[[認証器>#lcc75f02]]|NativeのAPI|>|CENTER: Reelying Party(RP Client)|WebAPI|通信|サーバ(RP Server or FIDO2 Server)|h
|・|>|PINコード|デバイス間連携仕様&br;・CTAP: Client To Authenticator Protocol&br;・EAP: External Authenticator Protocol|[[Web Authentication API(別名 WebAuthn)>Web Authentication API]]|各種WWWブラウザ|各種HttpClient|[[Server Requirements and Transport Binding Profile>WebAuthnを実装する。#c50d2962]]|サービス or IdP/STS|
|・|>|ジェスチャー|~|~|~|~|~|~|
|・|>|生体認証|~|~|~|~|~|~|
|&nbsp;|・|指紋|~|~|~|~|~|~|
|&nbsp;|・|静脈|~|~|~|~|~|~|
|&nbsp;|・|静脈|~|>|CENTER: Nativeアプリ|~|~|~|
|&nbsp;|・|虹彩|~|~|~|~|~|~|
|&nbsp;|・|顔|~|~|~|~|~|~|
|・|>|その他の認証方法|~|~|~|~|~|~|
|&nbsp;|・|PINコード|~|~|~|~|~|~|
|&nbsp;|・|ジェスチャー|~|~|~|~|~|~|
|&nbsp;|・|顔  |~|~|~|~|~|~|

***登録 [#e7f048cc]
認証器で鍵を生成・登録するAPIを使用して処理を行う。
***登録(Attestation) [#e7f048cc]
RegistrationでAttestationされる。

+サービス要求(RP Client ---> RP Server---> FIDO2 Server)~
+認証要求(FIDO2 Client <--- FIDO2 Server)
+クレデンシャル生成要求(FIDO2 Client ---> [[認証器>FIDO#lf855e22]])
-[[認証器>#lcc75f02]]で鍵を生成・登録するAPIを使用して処理を行う。~
(新しいアカウント、または既存のアカウントへ、~
新しい非対称鍵ペアの関連付ける認証情報を作成する。)
>
+サービス要求(RP Client ---> RP Server)~
+認証要求(クライアント <--- RP Client <--- RP Server)
+クレデンシャル生成要求(NativeのAPI ---> [[認証器>#lcc75f02]])
+クレデンシャル生成
「この機器([[認証器>FIDO#lf855e22]])をサーバに登録しますか?」
「この機器([[認証器>#lcc75f02]])をサーバに登録しますか?」
--ユーザーによる明示的な操作(ジェスチャー)
--秘密鍵・公開鍵のペアを生成することを承認(確認)
+クレデンシャル情報の応答(FIDO2 Client ---> FIDO2 Server)~
+クレデンシャル情報の応答(NativeのAPI ---> RP Client ---> RP Server)~
公開鍵、鍵情報 (署名つき) をサーバに伝達して登録。

***認証 [#dacdf419]
登録済みの鍵を使って認証用の署名を生成するAPIを使用して処理を行う。
***認証(Assertion) [#dacdf419]
AuthenticationでAssertionされる。

+サービス要求(RP Application ---> RP Server---> FIDO2 Server)~
+認証要求(FIDO2 Client <--- FIDO2 Server)
+FIDO2認証要求(FIDO2 Client ---> [[認証器>FIDO#lf855e22]])
-登録済みの鍵を使って認証用の署名を生成するAPIを使用して処理を行う。~
(既存の認証情報セットを使用し、ログインまたは二要素認証をする。)
>
+サービス要求(RP Client ---> RP Server)~
+認証要求(NativeのAPI <--- RP Client <--- RP Server)
+FIDO2認証要求(NativeのAPI ---> [[認証器>#lcc75f02]])
+クレデンシャルの検索~
「この機器([[認証器>FIDO#lf855e22]])を用いて認証しますか?」
「この機器([[認証器>#lcc75f02]])を用いて認証しますか?」
--ユーザーによる明示的な操作(ジェスチャー)
--既存のクレデンシャルを利用することを承認(確認)
+[[認証器>FIDO#lf855e22]]による認証
--デバイス側の[[認証器>FIDO#lf855e22]]で認証を完了させ、
+[[認証器>#lcc75f02]]による認証
--デバイス側の[[認証器>#lcc75f02]]で認証を完了させ、
--認証結果を端末側が持つ秘密鍵を使って署名する。
+アサーション応答(FIDO2 Client ---> FIDO2 Server)~
+アサーション応答(RP Client ---> RP Server)~
署名されたアサーション(署名つきchallenge + その他データ)を~
サーバに伝達し、署名検証することでログインできる。

**クライアント・サーバ [#i438a778]

***クライアント:WWW Browser [#ad1c979d]
FIDO 2.0のWeb API仕様に対応したWWW Browserは、
-指紋認証USBデバイス
-虹彩認証対応スマホ

などの、[[認証器>FIDO#lf855e22]]によるユーザー認証の結果を、~
標準化されたAPIで受け取ってWebサービスに通知することができる。

***サーバ:[[RP Server>FIDO#ra24f089]] [#nff1b46f]
[[クレームベース認証]]などを使用して連携する。

**各仕様 [#g0ff9ca3]
FIDOサーバ側のWebAPIのインターフェイス定義は発見できず(未定義?)。

***WebAPI for Accessing Credential API [#yed618c1]
どうも、[[Web Authentication API]]と同じものを指している模様。~
# WebAPI for Accessing Credential APIが、[[Web Authentication API]]に準拠?
***Web API for accessing FIDO 2.0 credentials [#yed618c1]
JavaScriptを介してFIDO 2.0資格情報にアクセスするための、~
[[Web Authentication API(別名 WebAuthn)>Web Authentication API]]を定義。

-RPアプリケーションから利用されるAPI
-Webアプリケーション(RPアプリケーション)から利用される

-Webブラウザ用と、OSネイティブ用のAPIがある。
--Webブラウザ用 : [[Web Authentication API]]
--OSネイティブ用
---Windows : [[Windows.Security.Credentials]]
---Linux
---iOS
---Android

-登録シーケンスと、認証シーケンスに使用するAPIを定義している。
--認証器で鍵を生成する登録するAPI
--[[認証器>#lcc75f02]]で鍵を生成する登録するAPI
--登録済みの鍵を使って認証用の署名をつくるAPI

***Key Attestation Format [#ad9f61cb]
クライアントや認証器などのコンテキストを表現するための~
クライアントや[[認証器>#lcc75f02]]などのコンテキストを表現するための~
アサーションや、クレデンシャルのフォーマットを定義している。
-認証器の信頼性、秘密鍵管理の信頼性を証明するための情報のデータ構造を定義
-具体的な個別の環境(TPMやAndroidなど)を利用する場合を規定(プロファイル)。
-[[認証器>#lcc75f02]]の信頼性、秘密鍵管理の信頼性を証明するための情報のデータ構造を定義
-具体的な個別の環境を利用する([[TPM>TPM(Trusted Platform Module)]]が暗号カーネルとして機能する)場合のプロファイル。~
仕様が進化するにつれて、より多くのプロファイルが追加される予定。

***Signature Format [#be72a8b1]
FIDO 2.0準拠クレデンシャル用の署名フォーマット(上記のアサーションに署名を行う)
-アサーションを表すデータ構造
-[[認証器>#lcc75f02]]で署名するためのバイトストリームにシリアライズされる方法
-結果のシグネチャとそれに関連するデータの表現

***OSネイティブ用は? [#i4394730]
-Windows : [[Windows.Security.Credentials]]
-Linux : ・・・
-iOS : ・・・
-Android : ・・・

**つまずきポイント [#a9fdd724]

***WWWブラウザ [#ve6cf96d]
-Can I use... Support tables for HTML5, CSS3, etc~
https://caniuse.com/#feat=webauthn

***実装事例 [#e1ef2101]
-[[二要素認証の実装事例>2FAのUserExperience]]
-[[パスワードレス認証の実装事例>PasswordlessのUserExperience]]

***アカウント・リカバリ [#lcec1503]
デバイスの紛失に対する

-二要素認証の解除
-アカウント・リカバリ

の検討が必要。

***フィッシング [#ee72a7e4]
-以下のような処理でフィッシングができてしまう。
-ChromeではcaBLEと呼ばれるBLEの接続方法を検討している。

-参考
--パスワードレス認証WebAuthnの勘所と対応状況:新春特別企画|gihyo.jp … 技術評論社~
https://gihyo.jp/dev/column/newyear/2019/webauthn?page=2

*参考 [#i23e8cdd]
-3分でわかる FIDO | 日経 xTECH(クロステック)~
https://tech.nikkeibp.co.jp/atcl/nxt/keyword/18/00002/011500043/

**FIDO Alliance [#f2ecfccb]
-FIDO Alliance FIDO2 Project - FIDO Alliance~
https://fidoalliance.org/fido2/
-Client To Authenticator Protocol~
https://fidoalliance.org/specs/fido-v2.0-ps-20170927/fido-client-to-authenticator-protocol-v2.0-ps-20170927.html

**W3C [#r189df98]

***FIDO 2.0 [#qb73b166]
-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
---https://www.w3.org/Submission/fido-web-api/
---https://www.w3.org/Submission/2015/SUBM-fido-web-api-20151120/

--FIDO 2.0: Key Attestation Format
---https://www.w3.org/Submission/fido-key-attestation/
---https://www.w3.org/Submission/2015/SUBM-fido-key-attestation-20151120/

--FIDO 2.0: Signature format
---https://www.w3.org/Submission/fido-signature-format/
---https://www.w3.org/Submission/2015/SUBM-fido-signature-format-20151120/

**FIDO Alliance [#f2ecfccb]
-FIDO Alliance FIDO2 Project - FIDO Alliance~
https://fidoalliance.org/fido2/
-Index of /specs/ - fidoalliance.org~
https://fidoalliance.org/specs/

-Client To Authenticator Protocol~
--https://fidoalliance.org/specs/fido-v2.0-ps-20170927/fido-client-to-authenticator-protocol-v2.0-ps-20170927.html
--https://fidoalliance.org/specs/fido-v2.0-rd-20180702/fido-client-to-authenticator-protocol-v2.0-rd-20180702.html

**Yahoo! JAPAN [#hb501c3e]

***コーポレートブログ [#ndb5cd2d]
-「安全・安心・便利」FIDO(ファイド)を使った パスワードレスログインとは~
https://about.yahoo.co.jp/blog/column/2019/02/20/fido.html

***Tech Blog [#nd4bd0d6]
-Yahoo! JAPAN Tech Advent Calendar 2018
--Yahoo! JAPANでの生体認証の取り組み~
(FIDO2サーバーの仕組みについて)~
https://techblog.yahoo.co.jp/advent-calendar-2018/webauthn/
--FIDO2 attestation formatの紹介~
https://techblog.yahoo.co.jp/advent-calendar-2018/webauthn-attestation-packed/

**ニュース [#d7b23633]

***2015 [#u3f2249c]
-パスワードに代わる強固なウェブ認証実現に向けた~
W3Cの「Web Authentication」 - ZDNet Japan~
https://japan.zdnet.com/article/35084511/

***2016 [#i1031e0d]
-News & Trend - 認証標準化団体が「FIDO 2.0」の~
Web API仕様をW3Cに提案、パスワードレス普及へ一歩:ITpro~
http://itpro.nikkeibp.co.jp/atcl/column/14/346926/112300385/

***2018 [#t632b76e]
-パスワードに依存しない認証「WebAuthn」をChrome/Firefox/Edgeが実装開始、~
W3Cが標準化。Webはパスワードに依存しないより安全で便利なものへ - Publickey~
http://www.publickey1.jp/blog/18/webauthnchromefirefoxedgew3cweb.html

-「パスワード不要」な未来が、もうすぐやってくる|WIRED.jp~
https://wired.jp/2018/05/18/webauthn-in-browsers/

**Yubico [#l96fad45]
-FIDO2~
https://developers.yubico.com/FIDO2/
-What is FIDO2? | Yubico~
https://www.yubico.com/2018/05/what-is-fido2/
**Qiita [#s0c4e678]

***[[WebAuthn>Web Authentication API#b22f8c0c]] [#me1c38e6]

***CTAP [#n0f1311c]
-gebo
--CTAP2 お勉強メモ
---#1 - 環境構築(Build)~
https://qiita.com/gebo/items/d2ffbd4fcf7d75e21b63
---#2 - 接続(GetInfo)~
https://qiita.com/gebo/items/e0bd197d607312dcf4fb
---#3 - 登録(Create)~
https://qiita.com/gebo/items/2cfc3202cd88a59b24ba
---#4 - 認証~
https://qiita.com/gebo/items/634aa39b0e08d8258682
---#5 - PIN~
https://qiita.com/gebo/items/84454583daeaf6711fd0
---#6 - Use Case~
https://qiita.com/gebo/items/cfc6ceb1c7f9aa5fdad6
---#7 - NFC~
https://qiita.com/gebo/items/2c9d020c0768b95a01b0
---#8 - BLE~
https://qiita.com/gebo/items/2c9d020c0768b95a01b0

--CTAP超ざっくりまとめ&WindowsにFIDOキーでサインインする試み - Qiita~
https://qiita.com/gebo/items/84ed5ec93aef843032c6

--WebAuthnぽいことができるWinデスクトップアプリ用ライブラリ WebAuthnModokiDesktopβ~
https://qiita.com/gebo/items/f6d3024f7e164ac0a195

**OSSコンソーシアム [#d84844e0]
Security Key by YubicoというFIDO2.0認証器を評価する
-(1)~
https://www.osscons.jp/jogiz4cps-537/#_537
-(2)~
https://www.osscons.jp/joi5xu2en-537/#_537
-(3)~
https://www.osscons.jp/joa13f6lr-537/#_537

----
Tags: [[:認証基盤]], [[:FIDO]]
Tags: [[:IT国際標準]], [[:認証基盤]], [[:FIDO]]


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS