「[[マイクロソフト系技術情報 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
--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)という用語が使用されている。

*変遷 [#lf181698]

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

-認証の部品化(プラグイン化)

図

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

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

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

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

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

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

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

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

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

-FIDO 2.0は、FIDO 1.0の拡張ではなく、
--UAFとU2Fを統合し、OSやブラウザといったプラットフォームのサポートに最適化する、
--プラットフォーム(ブラウザやOS)によるネイティブサポートのための仕様。

-また、あるサービスに登録済みの認証デバイスによるFIDO認証を通じて、~
未登録の新たな端末からサービスにログインできる機能が使えるようになる。
--(例)PC上のアプリケーション利用時の認証を、スマホで行う。
---PC-スマホ間のデバイス連携機能で、スマホを認証器として用い
---これにより、スマホに認証機能を集約させることができる。

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

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

-以下の3つの仕様から成る。

--WebAPI for Accessing Credential API~
---RPアプリケーションから利用されるAPI
---Webブラウザ用と、OSネイティブ用のAPIがある。
---登録シーケンスと、認証シーケンスに使用するAPIがある。

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

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

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

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

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

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

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

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

**FIDOサーバー [#n6e00aa4]

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

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

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

-その他

--認証方法
---PINコード
---ジェスチャー

--ハードウェア
---USB
---SIMカード
---TPM (Trusted Platform Module)
---NFC (Near Field Communication) 
---その他、各種デバイスやプラグイン

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

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

**FIDO準拠のデバイスやソフトウエア [#c036f512]
***Windows Hello [#v74c5cae]

*ライブラリ [#z663f41e]
-Passport.js

*参考 [#k6d4a46c]
-FIDO 2.0を実装してみた感じ - tmytのらくがき~
http://blog.tmyt.jp/entry/2017/02/26/014719

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

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

-煩雑なパスワード管理から解放してくれる「FIDO」とは? | THE ZERO/ONE~
https://the01.jp/p0003459/

-FIDO | Senior Engineer's Hermitage
http://sehermitage.web.fc2.com/crypto/auth_fido.html

**ASP.NET [#g8b9d010]
-しばやん雑記
--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

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

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

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

***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]]であるもよう。

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

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