わたブロ

個人的なアウトプットの場

FIDOに関する記事ネタを探すために書いてみる記事

はじめに

FIDOがどのような仕組みかを解説している記事は世の中に多くあるので、 そういった内容は他に任せるとして、エンジニア目線で記事を書いていけたらと思います。 ただ、何から書いていいか思い浮かばないので、ネタ探しをしながら記事を書いてみます。 数年前からFIDO関連の案件に携わっており、認定取得等も経験していますが、 記事の性質上、厳密さに欠ける部分もあるので参考程度に読んでいただければ幸いです。

FIDOとは

Fast ID Onlineの略で、公開鍵暗号方式を用いた堅牢なログイン手段のことです。 本記事投稿時点ではFIDO AllianceによってUAF, U2F, FIDO2の仕様策定が進められており、 いずれも下記のコンポーネント間のプロトコルが定義されています。 (IoT向けのFDOについては、他の仕様と大きく異なるものなので、本記事の対象外とします)

  • FIDO Server (ログインにFIDOを使うサービス等)
  • FIDO Client (大体はブラウザかアプリ)
  • FIDO Authenticator (USBに差し込むSecurityKeyとか、スマホの生体認証とか)

それぞれの概要については下記の公式サイトを参照してください。

fidoalliance.org

FIDO Allianceはそれぞれのコンポーネント実装物に対する認定プログラムを提供しており、 認定を取得することでプロダクトにFIDO認定ロゴを使用できるようになります。 (取得しなくてもFIDOのシステムに組み込むことは可能です)

fidoalliance.org

UAFやU2Fしか存在しなかった時代は、各種コンポーネントを調達/開発する手間やコスト、 それらコンポーネントをどのようにユーザの手元に準備してもらうかといった点が課題でした。 これに対して、FIDO2はWebAuthnとしてW3CによるWeb標準規格として策定が進み、 ユーザの手元にあるブラウザやOSがClient/Authenticatorとして動作する環境が整えられてきました。 今日ではApple, Google, MicrosoftなどのPlatformベンダがFIDO Allianceのボードメンバに名を連ね、 提供する主要ブラウザでFIDO2を実行できるようになってきています。

fidoalliance.org

こういった流れの中で、Webサービスを中心に一気にFIDO2が広まりつつある感じがします。 ただし、FIDO2はあくまでWeb(ブラウザ)を中心とした世界であり、 UAFで実現可能だったことの全てを吸収しているわけではありません。 ユースケースや認定取得要否によってはUAFも選択肢となる状況ですが、 昨今のFIDO Allianceの動向を見るに、基本的にはFIDO2を軸に設計した方がよさそうな気がしています。

FIDO2の実装について

多くの実装がGithubで公開されているので、動作させるだけであれば簡単になってきています。 ただし、ちゃんと仕様を理解しようとすると結構大変です。

公式サイトから仕様書(全て英語)を取得できますが、 下記のセクションに含まれる仕様書を読む必要があります。

  • FIDO2 SPECIFICATIONS
  • FIDO METADATA
  • FIDO2 AND UAF COMMON FILES

fidoalliance.org

Server実装のみであればCTAP2については読まなくても問題ないですが、 CTAP2を理解するとFIDO2全体の見通しがかなり良くなります。 余裕があれば簡単に実装してみるのもオススメですが、 接続できるClientを探すのが難しいので、その辺りが難点です。

そして、認定取得を目指す場合、さらなる困難が待ち受けています(特にAuthenticator)。 この辺りは別途記事にしてみようかと思います。

さいごに

書きながら色々と個別に記事を書いてみようかなというネタも見えてきました。 ポエムみたいな記事にお付き合い頂いた方、ありがとうございました。

それでは。