第2の人生の構築ログ

自分の好きなことをやりつつ、インカムもしっかりと。実現していく過程での記録など。読書、IT系、旅行、お金に関係する話などの話題。

FIDO2 が本格的にやってきた - 認証のコモディティ化

www.publickey1.jp

Publickeyさんでも取り上げられたように、ついに素の Android が正式に FIDO2 対応となりました。上記の記事は以下の FIDO アライアンスのプレスを受けての記事になるかと思います。

fidoalliance.org

これって、認証セキュリティの世界では相当なインパクトのある話だと個人的には捉えています。認証というサービスがコモディティ化することになり、業界でのゲームチェンジが起きると思います。

FIDO と FIDO2 とは?

いろいろな FIDO (UAF、U2F)

そもそも FIDO (ファイド) って何?という方のために少し書きます。
(昔、まだFIDOがそこまで知られていない頃、とある講演での通訳者の方にFIDOは日本語でどう発音して訳せばよいですか?と聞かれて、「フィード」でいいです、と即答した自分がいたのは内緒です。当時そう発音している外人さんもいたんです!)

FIDO は認証からパスワードをなくそうというところからスタートされたプロジェクトで、現在 FIDO アライアンス の元で仕様の策定、普及が行われています。
fidoalliance.org

パスワードを使わないとはどういうことなのでしょうか?
記憶のパスワードだけに頼るのでなく、生体認証などを使い、より利便性が高く、それでいて安全な認証の仕組みを目指しています。

一般的には FIDO イコール 生体認証、と捉えられていますが、裏側の技術的な部分は昔ながらの公開鍵暗号方式が使われています。
こういう枯れた技術を使ったというのがFIDOのうまいところだと思っています。ブロックチェーンなんかもそうですね。裏側の技術には昔からある実績のある技術を組み合わせて、新たな問題解決の手段を提供しています。

ユーザさんはそういう難しい仕組みのところは意識せずに求められた生体認証を行い(PINなどもあります)、それがが通れば、デバイスにある秘密鍵へのアクセス権が付与され、サーバから送られてきているチャレンジに署名を打ち、サーバへ送り返し、署名の検証が通れば認証 OK という仕組みです。

ちなみに、昔から言われている認証の3要素というものがあります。

  1. 持っていること (something you have)
  2. 知っていること (something you know)
  3. 本人に生まれつき備わっているもの、所謂生体 (something you are)

技術の進歩により、これまで簡単に利用できるものではなかった生体認証がスマートフォンの登場により一般ユーザも普通に使える時代となり、3. の生体を利用する FIDO のような仕様が使える下地が整ったことになります。また、欧州の決済に関する規定に PSD2 (Payment Service Directive 2) というものがあるのですが、そこでは一定要件以上の処理を行うには上記の3要素のうち、2要素を使いなさい、と書かれています。FIDO の場合には、まず鍵(秘密鍵)を持っているので、1. の持っていること、と、生体を使うことで、3. の要素の2要素を使っていることになり、PSD2/RTS で規定される Strong Customer Authentication (SCA) の要件を認証においては満たしていることになります。

FIDO には、大きく3つのプロトコル仕様があります。 UAF (Universal Authentication Framework)、U2F (Universal Second Factor)、そして、FIDO2 です。

元々、UAF と U2F の仕様が平行して存在し、それぞれの仕様は別々の団体が策定していたものでした。FIDO2 含めて、仕様の互換はありません。(サーバ側は3つのプロトコルを同じI/Fで扱える API を用意したユニバーサルサーバという形式で提供する流れがあります。ちなみに、LINE さんが自社のFIDOユニバーサルサーバを近くオープンソースとして公開するという話もあります。)

UAF と U2F のざっくりとした違いですが、UAF は主に生体を使い、スマートフォンでの利用が想定されています。 U2F は2要素目の追加認証の要素としての利用を想定しており、PC のブラウザを利用しながらの利用を想定しています。

UAF は FIDO クライアントとFIDO ASM/Authenticator がモバイルスマートフォンにインストールされ利用されるケースが大半で、日本では docomo さんが d アカウントで積極的に取り込まれており、日本での FIDO の普及に大きく貢献されています。 U2F は USB ポートに指して使うドングルを見たことがないでしょうか?2要素目が必要な時にボタンを押して認証を行う方式(presence方式)がよく使われています。

そこで FIDO2

双方、徐々に普及しており、どちらかと言うと UAF が実サービスで多く使われ始めていた感じがします。UAF には、PCブラウザとの直接連携するインターフェイスはありません。(2経路で連携するなどの運用は考えられますが、直接連携するインターフェイスはありません。)
FIDO2に期待されていたことの1つには、この連携の部分もあります。

Web ブラウザをベースとし、外部デバイス(内蔵も)を利用しながら簡単に認証を行える仕様を実現しようとしているのが FIDO2 です。(UAF、U2F との互換はありませんが、いいとこ取りをした感じです。各仕様は独立していますので、上位互換というものでもありません。)

FIDO2 には、2つの大きな枠組みがあります。Web Authentication (WebAuthn)と CTAP (Client To Authenticator Protocol)です。

Web Authentication はWeb標準を策定している W3C が仕様の策定を行い、ブラウザに FIDO クライアントの実装が行えるようになり、Google Chrome、Mozilla Firefox、Microsoft Edge のブラウザでは既に実装が入っており(Apple Safari はプレビュー版)、既に利用が可能です。これは大きいですね。

具体的には、JavaScript の API 実装がブラウザにデフォルトで行われていますので、追加で特別なコンポーネントを用意することなく標準ブラウザで動作します。実装者はブラウザが実装、用意している API を JavaScript で使うことによって FIDO2 の実装が行えるということになります。いや、便利な時代になりました。

FIDO の仕様を構成する大きな登場人物(コンポーネント)としては、FIDO のプロトコルを理解して、お互いにやりとりを行う 「FIDO サーバ」、と「FIDO クライアント」、秘密鍵などの情報が保管される「認証器 (Authenticator)」があります。
(UAF では、FIDO クライアントと認証器の間のインターフェイスとなる「ASM (Authenticator Specific Module)」も意識されます。)

FIDO2 の対応が行われるケースにおいては、Web Authentication の実装により、「FIDO クライアント」が既にブラウザの中に実装済みの状態となっており、サーバとのやりとり、「認証器 (Authenticator)」とのインターフェイスを行ってくれます。まずは使える「認証器 (Authenticator)」を探しにいって、ユーザが選択した「認証器 (Authenticator)」を使って FIDO 認証を進めます。では、「認証器 (Authenticator)」はどうすればいいのでしょうか? ここで、冒頭の「Android 7以降の全デバイスが適合」の意味するところの重要性がわかります。何と、この「認証器 (Authenticator)」が既に OS に組み込み(ネイティブ)実装されましたよ、ということを言っているのです。

つまり、FIDO2 の認証をユーザさんに使ってもらうためには、サービサーがモバイル側のアプリを開発し、提供する必要がないのです!HTML に JavaScript で WebAuthn の仕様に沿った実装を入れるだけで、FIDO2 の生体認証が使えるということです。(もちろん、「FIDO サーバ」は必要です。)

さらに、組み込みの「認証器 (Authenticagtor)」だけでなく、外部の「認証器 (Authneticagtor)」の利用も可能になっています。
USB での接続、ブルートゥースでの接続などになり、ブラウザにいる「FIDO クライアント」と外部の「認証器 (Authneticagtor)」との連携の部分を定義したのがもう1つの FIDO2 の仕様である CTAP (その名の通りですね)です。

FIDO2 の詳細は、既にサービス運用を行っている Yahoo さんの以下の記事なども参考になります。

techblog.yahoo.co.jp

動作を手っ取り早く見てみたい時は Google の提供するデモサイトなども利用できます。

webauthndemo.appspot.com

FIDO の普及について

FIDO の一般の方々への認知度はまだ高いものではないかもしれませんが、知らずに利用されている方もいるかもしれません。

前述していますが、docomo さんは d アカウントで既に FIDO の UAF を利用しています。「FIDO」という言葉自体を表に出していませんので、FIDO の仕組みと知らずに使っている方が大半かと思います。正直、以前の docomo さんの認証はいろいろな認証があって利用者として意味がわからず混乱してしまうことがありました。大分使い易くなって、整理されてきているように感じます。

また、昨年、Yahoo さんが先行して FIDO2 の認証の仕組みをリリースされており、Yahoo アカウントで利用できるようになっています。これは個人的には衝撃的でした。モバイル側には特に何もインストールせずに、Android で FIDO 認証が使えます。ついにこれが実用化された!と。

他、Windows Hello も早々と FIDO2 への対応を謳っており、すでに使えるものがあります。

「FIDO」という言葉は知らなくても、その仕組みを使っている人は日本では結構増えてきていると思います。今年は本格的に FIDO2 が使われることになると思いますので、普及に更に弾みがつくと思われます。

ちなみに、この FIDO、米国発祥ではありますが、世界ではそこまで流行っていません。。ヨーロッパ、米国、中国、シンガポールなど、実はまだまだです。最も普及して使われているのは日本で、docomo さん、Yahoo Japan さんの布教活動が素晴らしかったものと解釈しています。

世界ではまだまだではありますが、この波は広がっていくのではないかと思います。Google、Microsoft さんは FIDO アライアンスに参加していますが、実は Apple さんはまだ参加していません。プレビュー版ではありますが、Safari が FIDO2 への対応を行ってきている状況からも Apple さんもそろそろ重い腰を上げることになるのかもしれません。iPhone がネイティブサポートを行ってくるとまた一気に普及に加速がつくのではないかと思います。

ついに、認証もコモディティ化する時代がきた気がします。