「[[マイクロソフト系技術情報 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仕様を提案 -FIDO 2.0は、[[FIDO 1.0>FIDO1]]の拡張ではなく、 --[[UAFとU2F>FIDO1]]を統合(補完し置換する)し、~ OSやブラウザといったプラットフォームのサポートに最適化する、~ プラットフォーム(ブラウザやOS)によるネイティブサポートのための仕様。 --OSやブラウザのAPIが定義され、[[FIDO Client>FIDO#yb40ab95]]といった中継のためのレイヤが無くなったため、~ [[依拠当事者(Relying Party)>#s47c72a3]]から直接リクエストができる、見かけ上U2Fに近いシンプルな構成になった。 -また、あるサービスに登録済みの認証デバイスによるFIDO認証を通じて、~ 未登録の新たな端末からサービスにログインできる機能が使えるようになる。 --(例)PC上のアプリケーション利用時の認証を、スマホで行う。 ---PC-スマホ間のデバイス連携機能で、スマホを[[認証器>#lcc75f02]]として用い ---これにより、スマホに認証機能を集約させることができる。 **ざっくり言うと。 [#t9c588f1] -パスワードやOTPに代わる新しい認証 -秘密鍵で署名(=登録)をして、公開鍵で検証(=認証) --[[秘密鍵で署名(=登録)>#e7f048cc]] ---[[依拠当事者(Relying Party)>#s47c72a3]]から認証機の登録を要求する。 ---署名のための秘密鍵は[[認証器>#lcc75f02]]内で生成される。 ---[[依拠当事者(Relying Party)>#s47c72a3]]から生成された情報に署名を行う。~ (rpId; RPの識別子、userId, Name: ユーザ情報、challenge: 乱数) ---公開鍵と署名を[[依拠当事者(Relying Party)>#s47c72a3]]に登録する。 --[[公開鍵で検証(=認証)>#dacdf419]] ---本人確認, 否認防止の目的がある。 ---... **以下の2つの仕様からなる。 [#w7d24bd2] ***Webプラットフォーム API仕様(WebAuthn: [[Web Authentication API]]) [#aef70118] -Web API(抽象的なAPIを通じたメッセージの通信)仕様 --ブラウザでの普及を想定し、標準化団体W3Cへ、本仕様を提案 --秘密鍵を使用して[[認証器>#lcc75f02]]のコンテキストに関する情報に署名。 -以下の3つの仕様から成る。 --[[Web API for accessing FIDO 2.0 credentials>#yed618c1]] --[[Key Attestation Format>#ad9f61cb]] --[[Signature Format>#be72a8b1]] ***デバイス間連携仕様(CTAP: Client To Authenticator Protocol) [#g0465d1e] シータップ -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] |>|>|[[認証器>#lcc75f02]]|NativeのAPI|>|CENTER: Reelying Party(RP Client)|WebAPI|通信|サーバ(RP Server)|h |・|>|PINコード|デバイス間連携仕様&br;・CTAP: Client To Authenticator Protocol&br;・EAP: External Authenticator Protocol|[[Web Authentication API(別名 WebAuthn)>Web Authentication API]]|各種WWWブラウザ|各種HttpClient|ここの仕様は存在しないもよう|サービス&br;or&br;IdP/STS| |・|>|ジェスチャー|~|~|~|~|~|~| |・|>|生体認証|~|~|~|~|~|~| | |・|指紋|~|~|~|~|~|~| | |・|静脈|~|>|CENTER: Nativeアプリ|~|~|~| | |・|虹彩|~|~|~|~|~|~| | |・|顔 |~|~|~|~|~|~| ***登録(Attestation) [#e7f048cc] RegistrationでAttestationされる。 -[[認証器>#lcc75f02]]で鍵を生成・登録するAPIを使用して処理を行う。~ (新しいアカウント、または既存のアカウントへ、~ 新しい非対称鍵ペアの関連付ける認証情報を作成する。) > +サービス要求(RP Client ---> RP Server)~ +認証要求(クライアント <--- RP Client <--- RP Server) +クレデンシャル生成要求(NativeのAPI ---> [[認証器>#lcc75f02]]) +クレデンシャル生成 「この機器([[認証器>#lcc75f02]])をサーバに登録しますか?」 --ユーザーによる明示的な操作(ジェスチャー) --秘密鍵・公開鍵のペアを生成することを承認(確認) +クレデンシャル情報の応答(NativeのAPI ---> RP Client ---> RP Server)~ 公開鍵、鍵情報 (署名つき) をサーバに伝達して登録。 ***認証(Assertion) [#dacdf419] AuthenticationでAssertionされる。 -登録済みの鍵を使って認証用の署名を生成するAPIを使用して処理を行う。~ (既存の認証情報セットを使用し、ログインまたは二要素認証をする。) > +サービス要求(RP Client ---> RP Server)~ +認証要求(NativeのAPI <--- RP Client <--- RP Server) +FIDO2認証要求(NativeのAPI ---> [[認証器>#lcc75f02]]) +クレデンシャルの検索~ 「この機器([[認証器>#lcc75f02]])を用いて認証しますか?」 --ユーザーによる明示的な操作(ジェスチャー) --既存のクレデンシャルを利用することを承認(確認) +[[認証器>#lcc75f02]]による認証 --デバイス側の[[認証器>#lcc75f02]]で認証を完了させ、 --認証結果を端末側が持つ秘密鍵を使って署名する。 +アサーション応答(RP Client ---> RP Server)~ 署名されたアサーション(署名つきchallenge + その他データ)を~ サーバに伝達し、署名検証することでログインできる。 **各仕様 [#g0ff9ca3] ***Web API for accessing FIDO 2.0 credentials [#yed618c1] JavaScriptを介してFIDO 2.0資格情報にアクセスするための、~ [[Web Authentication API(別名 WebAuthn)>Web Authentication API]]を定義。 -Webアプリケーション(RPアプリケーション)から利用される -登録シーケンスと、認証シーケンスに使用するAPIを定義している。 --[[認証器>#lcc75f02]]で鍵を生成する登録するAPI --登録済みの鍵を使って認証用の署名をつくるAPI ***Key Attestation Format [#ad9f61cb] クライアントや[[認証器>#lcc75f02]]などのコンテキストを表現するための~ アサーションや、クレデンシャルのフォーマットを定義している。 -[[認証器>#lcc75f02]]の信頼性、秘密鍵管理の信頼性を証明するための情報のデータ構造を定義 -具体的な個別の環境を利用する(TPMが暗号カーネルとして機能する)場合のプロファイル。~ 仕様が進化するにつれて、より多くのプロファイルが追加される予定。 ***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/ **W3C [#r189df98] -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! [#hb501c3e] ***JAPAN > 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/ ---- Tags: [[:IT国際標準]], [[:認証基盤]], [[:FIDO]]