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

-[[戻る>認証基盤]]

* 目次 [#gc1e87b4]
#contents

*概要 [#q3b95c68]
-ここでは、基本的に、FIDO (Fast IDentity Online)について言及する。
-FIDOの1、2は[[OAuth]]の1、2と違って別物ではないので、順次、言及する。

**基本思想 [#t3f5f5c5]
FIDOの基本思想は、
-「生体情報などの認証情報をサーバーに保存したり送信したりせず、~
ユーザーのデバイスに保存することで、秘密情報の漏洩を防ぐ。」というもの。
-[[FIDO Alliance(生体認証などオンライン認証の標準化団体)>#p5437514]]により策定

**仕組み [#dd0353d3]
-公開鍵暗号方式をベースとしたチャレンジ・レスポンス認証。
-「既存の認証」に対して公開鍵を登録するという実装になる。
-[[処理シーケンス>#jb656cc0]]

**採用、普及の状況 [#t4d683cd]
-既にFIDOエコシステムを構築、市場に普及。

-以下のような企業が採用している。

--Google
--Microsoft
--PayPal
--Dropbox
--GitHub
--Samsung Electronics
--NTT docomo
--Bank of America Corporation

*特性 [#dd997ffb]
**利点 [#ic4291e6]
***セキュリティ向上 [#ca8d0a71]
-パスワードへの依存を減らし、認証の安全性が向上する。
-パスワードなどの認証情報がネットワークに流れない。

***コスト削減 [#p81d869d]
標準規格のため、[[認証器>#lf855e22]]はサービスに共通的に使える。

***プライバシー保護 [#i3361654]
-サーバ側にパスワード情報や生体情報を持たない。
-「端末側での本人確認」と「サーバ側での認証」を分けている。

***操作性 [#a411dc6a]
-生体認証や端末のボタン操作など認証操作が簡単になる。
-これにより、パスワード入力・管理を不要にできる。

**課題 [#db84bd67]
***機能 [#sa6da9e4]
-ユーザとデバイスの組の確実性しか保証されない。
-また、権限制御は別途実装する必要がある。

***[[認証器>#lf855e22]]の信頼性 [#d2a1a2b7]
-脆弱性の発覚などで信用性が低下した[[認証器>#lf855e22]]やデバイスの情報を「[[FIDO Alliance MetaData Service>#d6659b25]]」で提供。
-この情報を元に、どの[[認証器>#lf855e22]]・デバイスからの認証を受け入れるかは、サービス事業者の自己判断となる。

*用語 [#lb7c3077]
[[OAuth]]2と同じで、Relying Party(RP)という用語が使用されている。

Relying Party(RP)には以下の2つがある。

**RP Application [#yb40ab95]
= [[FIDOクライアント>#t9d811b0]]
-FIDO対応したクライアント・アプリケーション
-[[認証器>#lf855e22]]・デバイス上でFIDOのAPIを使用。

**RP Server [#ra24f089]
= [[FIDOサーバ>#n6e00aa4]]
-FIDO対応したサーバ・アプリケーション
-Webアプリケーションで、FIDOクライアント、FIDOサーバと連携する。

*変遷 [#lf181698]

**FIDO 1.0 [#g7c1f7bd]
2014年12月に仕様が公開された。

-認証の部品化(プラグイン化)
|>|様々な外部[[認証器>#lf855e22]]||通信(FIDO標準プロトコル・メッセージ)        |WebAPI for Accessing Credential API|クライアント(FIDO Client)|WebAPI|通信(FIDO標準プロトコル・メッセージ)|サーバ(FIDO Server)|h
|・|>|生体認証|<--->&br;EAP (External Authenticator Protocol)|JS、NativeのAPI|各種ブラウザ、各種OS|HttpClient|<--->|サービスA&br;サービスB&br;サービスC&br;...サービスX|
|>|様々な外部[[認証器>#lf855e22]]||通信(FIDO標準プロトコル・メッセージ)        |API|クライアント(FIDO Client)|WebAPI|通信(FIDO標準プロトコル・メッセージ)|サーバ(FIDO Server)|h
|・|>|生体認証|<--->&br;EAP (External Authenticator Protocol)|JS、NativeのAPI&br; - Web Authentication API&br; - WebAPI for Accessing Credential API&br;(WebAPIと言っているが所謂、WebAPIではない...。)|各種ブラウザ、各種OS|各種HttpClient|<--->&br;ここの仕様は存在しない?|サービスA&br;サービスB&br;サービスC&br;...サービスX|
|&nbsp;|・|指紋|~|~|~|~|~|~|
|&nbsp;|・|虹彩|~|~|~|~|~|~|
|&nbsp;|・|顔|~|~|~|~|~|~|
|・|>|認証方法|~|~|~|~|~|~|
|&nbsp;|・|PINコード|~|~|~|~|~|~|
|&nbsp;|・|ジェスチャー|~|~|~|~|~|~|

-公開鍵暗号方式を採用している。
-既にFIDOエコシステムを構築、市場に普及。

***UAF [#q0bdc870]
パスワードレス認証の仕様

-端末備え付けの[[認証器>#lf855e22]]で、パスワードなし認証を行う。

-端末内に生体認証データ(やPIN)を登録し、~
Webサービスなどにその端末を登録すれば、~
利用者が端末で生体認証(やPIN入力)を行う事でログインが可能になる

***U2F [#j665c640]
パスワードに加えた2要素認証向けの仕様

-主要ブラウザでの、
--パスワード認証や
--セキュリティキーによる

>2要素認証(USB、Bluetooth、NFC経由)

-利用者は
--従来通りのユーザIDとパスワードによる認証を行った後、
--U2Fに対応した USB端末や NFC端末 ([[認証器>#lf855e22]]) を使ってログインする。

**FIDO 1.1 [#wd244737]
2016年12月8日、複数の機能拡張を追加。
-ICカード
-NFC(Near Field Communication)
-Bluetooth Low Energy(BLE)
-拡張メタデータ・サービス

**FIDO 2.0 [#u3e20bc3]
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-スマホ間のデバイス連携機能で、スマホを認証器として用い
---これにより、スマホに認証機能を集約させることができる。

-以下の2つの仕様からなる。
-以下の2つ?の仕様からなる。

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

-以下の3つの仕様から成る。
--[[WebAPI for Accessing Credential API]]
--[[Key Attestation Format]]
--[[Signature Format]]
-以下の3つ?の仕様から成る。
--[[WebAPI for Accessing Credential API>#t6f74b39]]
--[[Key Attestation Format>#qea469d0]]
--[[Signature Format>#lb9cb34c]]

***デバイス間連携仕様 [#i77685a7]
デバイス組込みではない[[認証器>#lf855e22]]に対応するための通信プロトコルの規定。

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

*詳細 [#w4f6f7cf]
**処理シーケンス [#jb656cc0]

***登録 [#qdab8825]
認証器で鍵を生成・登録するAPIを使用して処理を行う。

-以下のシーケンス図が解り易い。
 https://s.yimg.jp/images/tecblog/2015-2H/fido-introduction/uaf-reg.png

***認証 [#h0bf31b6]
登録済みの鍵を使って認証用の署名を生成するAPIを使用して処理を行う。

-
-以下のシーケンス図が解り易い。
 https://s.yimg.jp/images/tecblog/2015-2H/fido-introduction/uaf-auth.png

+サービス要求(Client ---> Server)
+認証要求(Client <--- Server)
+FIDO認証要求(クライアント ---> [[認証器>#lf855e22]])
+クレデンシャルの検索~
「この機器([[認証器>#lf855e22]])を用いて認証しますか?」
--ユーザーによる明示的な操作(ジェスチャー)
--既存のクレデンシャルを利用することを承認(確認)
+[[認証器>#lf855e22]]による認証
--デバイス側の[[認証器>#lf855e22]]で認証を完了させ、
--認証結果を端末側が持つ秘密鍵を使って署名する。
+アサーション応答 (署名つきチャレンジ + その他データ) 
--署名されたアサーションを公開鍵暗号方式でサーバーに伝達、
--サーバーでは、このアサーションの署名を検証することで、ログインできる。

**FIDOクライアント [#t9d811b0]
ブラウザやOSなどの各種、ユーザーエージェント (User agent)を指す。
-RPアプリケーション
-ブラウザやOSなどの各種、ユーザーエージェント (User agent)を指す。

***認証器 [#lf855e22]
認証器は、Authenticatorとも言う。

-構成
--スマートフォンやPCであれば、~
下記のようなセキュア環境で動作する。
---TEE(Trusted Execution Environment)
---TPM(Trusted Platform Module)
---SE(Secure Element)

--外部接続であれば、~
以下のような接続インタフェースを使用する。
---USB
---NFC
---Bluetooth Low Energy

-認証方法
--生体認証
---指紋
---虹彩
---顔

--その他
---PINコード
---ジェスチャー

***ブラウザ [#xc86fc58]
FIDO 2.0のWeb API仕様に対応したブラウザは、
-指紋認証USBデバイス
-虹彩認証対応スマホ

などの、[[FIDO準拠のデバイスやソフトウエア>#c036f512]]によるユーザー認証の結果を、~
標準化されたAPIで受け取ってWebサービスに通知することができる。

**FIDOサーバー [#n6e00aa4]
-RPサーバー
-・・・

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

***WebAPI for Accessing Credential API [#t6f74b39]
どうも、Web Authentication APIと同じものを指している模様。~
# WebAPI for Accessing Credential APIが、Web Authentication APIに準拠?

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

-Webブラウザ用と、OSネイティブ用のAPIがある。
--JavaScript
--その他
---・・・

-登録シーケンスと、認証シーケンスに使用するAPIを定義している。
--認証器で鍵を生成する登録するAPI
---JavaScript : window.fido.makeCredential
---JavaScript : xxxx.makeCredential
--登録済みの鍵を使って認証用の署名をつくるAPI
---JavaScript : window.fido.getAssertion
---JavaScript : xxxx.getAssertion

-Web Authentication API 自体の仕様が固まってないので、~
特に Edge に関しては polyfill を使って対応する。

***Key Attestation Format [#qea469d0]
クライアントや認証器などのコンテキストを表現するための~
アサーションや、クレデンシャルのフォーマットを定義している。
-認証器の信頼性、秘密鍵管理の信頼性を証明するための情報のデータ構造を定義
-具体的な個別の環境(TPMやAndroidなど)を利用する場合を規定(プロファイル)。

***Signature Format [#lb9cb34c]
FIDO 2.0準拠クレデンシャル用の署名フォーマット(上記のアサーションに署名を行う)

*FIDO準拠のデバイスやソフトウエア [#c036f512]
***Windows Hello [#v74c5cae]
-Windows 10ではFIDOに準拠した「Windows Hello」を搭載
-2016年7月のWindows 10 Anniversary Updateでは、~
ブラウザーのMicrosoft EdgeからFIDO対応サービスへの~
ログイン方法に生体認証が利用できるようになった。

***Touch ID [#n9df4498]
iPhoneシリーズのTouch IDの指紋認証は、FIDO対応ではないもよう。~
しかし、FIDOクライアント側で、Touch IDを利用可能にしている模様。

-ドコモ、iPhone/iPadの「Touch ID」を使った生体オンライン認証に対応 - ITmedia Mobile~
http://www.itmedia.co.jp/mobile/articles/1603/07/news076.html

-Touch IDによるオンライン認証の概要~
https://www.nttdocomo.co.jp/binary/pdf/info/notice/pages/160307_00.pdf

*応用 [#d9d8a10e]
**FIDO認証とID連携 [#ib8a0074]
ID連携により、アサーションを連携することで、他のRPでもFIDO認証をサポートできる。

**オフライン利用 [#j4492cbc]
アサーションの定時でオフラインでも本人確認が可能。
アサーションの提示でオフラインでも本人確認が可能。

*参考 [#k6d4a46c]
-News & Trend - 認証標準化団体が「FIDO 2.0」の~
Web API仕様をW3Cに提案、パスワードレス普及へ一歩:ITpro~
http://itpro.nikkeibp.co.jp/atcl/column/14/346926/112300385/
-パスワードに代わる強固なウェブ認証実現に向けた~
W3Cの「Web Authentication」 - ZDNet Japan~
https://japan.zdnet.com/article/35084511/

-煩雑なパスワード管理から解放してくれる「FIDO」とは? | THE ZERO/ONE~
https://the01.jp/p0003459/
-FIDO | Senior Engineer's Hermitage~
http://sehermitage.web.fc2.com/crypto/auth_fido.html
-FIDO 2.0を実装してみた感じ - tmytのらくがき~
http://blog.tmyt.jp/entry/2017/02/26/014719

**Yahoo! JAPAN [#c440d4cd]
***Tech Blog [#nd4bd0d6]
-アイデンティティ管理とその動向 - Yahoo! JAPAN Tech Blog~
https://techblog.yahoo.co.jp/security/2014-identity/
--FIDO技術の適用による安心・安全なサービスの実現~
https://fidoalliance.org/assets/images/general/FIDOTokyoSeminar101014_gomi.pdf
-次世代認証プロトコルFIDOの動向~
https://techblog.yahoo.co.jp/security/fido-introduction/
-FIDO認証の進化とさらなる応用展開~
https://techblog.yahoo.co.jp/advent-calendar-2016/2016-fido/

**ASP.NET関連 [#g8b9d010]
**Microsoft [#y4d05ed6]

-Webでの生体認証をヤフーさまとともに~
Windows Blog for JapanWindows Blog for Japan~
https://blogs.windows.com/japan/2016/12/02/yahoojapan/

-Microsoft Edge で Windows Hello を使用した~
Web Authentication (MSCredentials object) のサンプルが公開されている模様 - Browser~
http://browser.hatenablog.com/entry/2016/04/12/104923

***しばやん雑記 [#t7f57b1c]
-Windows Hello を Web で使うための Web Authentication API (FIDO 2.0) について調べた ~
http://blog.shibayan.jp/entry/20170129/1485665985

-ASP.NET Core Identity に Windows Hello を使ったログイン機能を追加する~
http://blog.shibayan.jp/entry/20170131/1485844075

***Tsmatz [#a0c7603d]
-Windows Hello を使った App 開発~
https://blogs.msdn.microsoft.com/tsmatsuz/2015/07/30/windows-hello-app/

-Web Authentication API 紹介 (Windows Hello を使った Edge 開発)~
https://blogs.msdn.microsoft.com/tsmatsuz/2016/06/08/w3c-web-authentication-api-javascript/

***Microsoft Docs [#xd40a63d]
-Windows Hello - UWP app developer~
https://docs.microsoft.com/ja-jp/windows/uwp/security/microsoft-passport
--Windows Hello ログイン アプリの作成~
https://docs.microsoft.com/ja-jp/windows/uwp/security/microsoft-passport-login
--Windows Hello ログイン サービスの作成~
https://docs.microsoft.com/ja-jp/windows/uwp/security/microsoft-passport-login-auth-service

**FIDO Alliance [#p5437514]
生体認証などを利用したより強力なオンライン認証技術の標準化を目指す~
非営利の標準化団体(2012年7月に設立、2013年2月に正式発足)

-FIDO Alliance - FIDO Alliance~
https://fidoalliance.org/

-FIDO Alliance - Wikipedia~
https://ja.wikipedia.org/wiki/FIDO_Alliance

***セミナー [#n406f2a8]
-FIDO技術のさらなる広がり | FIDOアライアンス東京セミナー(2015年11月20日)~
https://fidoalliance.org/wp-content/uploads/FIDOTokyoSeminar-gomi-112015-ja.pdf

-New FIDO Specifications Overview -FIDO Alliance -Tokyo Seminar -Nadalin~
https://www.slideshare.net/FIDOAlliance/new-fido-specifications-overview-fido-alliance-tokyo-seminar-nadalin

***FIDO Alliance MetaData Service [#d6659b25]
脆弱性の発覚などで信用性が低下したデバイスに関する情報。

-FIDO Alliance Metadata Service - FIDO Alliance~
https://fidoalliance.org/mds/

--The digitally signed metadata TOC document is published in Javascript Web Token (JWT) form at~
https://mds.fidoalliance.org/
>データは[[JWT]]形式で提供されている。

-以下を使用して[[JWT]]の中を確認できる。

--JSON Web Tokens - jwt.io~
https://jwt.io/

>ES256の[[JWT]]であるもよう。

**W3C [#w3b4a701]
***FIDO 2.0 [#s9c74fa5]
-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/

***Web Authentication API [#j7947123]
-Web Authentication: An API for accessing Public Key Credentials Level 1~
https://www.w3.org/TR/webauthn/

**その他 [#kb6b6d70]
***TEE(Trusted Execution Environment) [#eecfcae5]
***TPM(Trusted Platform Module) [#hfad8769]
***SE(Secure Element) [#m0fdca07]

----
Tags: [[:認証基盤]]


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