こんにちは。Security R&DチームでFIDO(Fast Identity Online)の開発担当エンジニアとして働いている、Park Kyungjoonです。以前の記事「FIDO at LINE: A First Step to a World Without Passwords」に続き、今回の記事ではFIDO2について簡単に解説した後、今年の3月上旬に参加したFIDOアライアンス主催の相互運用性テストイベントについて報告します。それから、先日オープンソースとして公開したLINE FIDO2-Serverについて紹介したいと思います。
FIDO2について
現在FIDOには、UAF(Universal Authentication Framework)とU2F(Universal 2nd Factor)、FIDO2という3つの規格が共存していますが、最近では新しい規格であるFIDO2が定着してきているようです。FIDO2が他の規格と異なる点は何でしょうか? どのような理由で登場したのでしょうか? 3つの規格について簡単に解説します。
UAF
FIDO UAFはモバイルアプリ(Android、iOS)において、生体やPINのような認証手段を利用して、ユーザーがパスワードなしに認証できるようにした規格です。ユースケースがモバイルアプリに限定されており、現在AndroidやApple iOSのような主なプラットフォームではネイティブアプリのためのUAF APIをサポートしていません。
U2F
FIDO U2Fは通常、IDとパスワードでログインした後、セキュリティーキーを含むハードウェアを利用して追加認証(2FA、Two-factor authentication)できるようにした規格です。GoogleやFacebook、GitHubなどで導入されていますが、主に高いセキュリティレベルが必要な特定のユーザーや内部社員に限定して使用しています。
FIDO2
FIDO2はこの2つの標準を統合し、従来のモバイル環境だけでなく、ウェブなどどこにでも使用できるように改良した規格です。ウェブブラウザのためのWebAuthn1と認証器のためのCTAP(Client to Authenticator Protocol)という2つの規格で構成されています。現在、さまざまなウェブブラウザでWebAuthn APIをサポートしています。ウェブブラウザがクライアントの役割を提供するため、認証を提供するサービスでは、ウェブブラウザが提供するAPIを利用して、より簡単にさまざまな環境で認証サービスを提供できます。その結果、ユーザーはより便利で安全に認証できます。またU2Fの場合は、CTAP2規格が下位互換性をサポートするため、従来のハードウェアベースの認証をそのまま利用できます。現在、WebAuthn規格をサポートするブラウザの現状は以下のとおりです。
出典:https://fidoalliance.org/fido2/fido2-web-authentication-webauthn/
FIDOの相互運用性テスト
FIDOアライアンスでは、年に4回定期的に相互運用性テストを行います。相互運用性テストに合格すると、FIDO規格を遵守して実装したという公式認定を取得することができます。
出典:https://fidoalliance.org/certification/fido-certified-products/
FIDO2の相互運用性テストの場合、FIDO2-Serverと認証器ベンダーがそれぞれ実装した製品がきちんと連携されているか、また規格を遵守して実装されているかを確認するため、Chrome、Edge、FirefoxなどのブラウザでWebAuthn APIを利用してテストを行います。今年3月にはコロナの影響を受け、バーチャル方式(リモート環境)で行いました。テストに参加した認証器ベンダーは決まった時間にウェブカメラをオンにして、テストに参加した他のサーバーベンダーのFIDO2-Serverと連携し、登録と認証が正常に動作しているか検証を受けました。LINE FIDO2-Serverはオープンソースとして公開する前に、規格を遵守して実装されているかを確認するため、FIDO2-Serverテストに参加しました。
2021年の相互運用性テスト日程
2021年の相互運用性テストは、以下のような日程で行いました。
- 1回目 2021年3月8日~2021年3月12日
- 2回目 2021年6月21日~2021年6月25日
相互運用性テストの進行の流れ
相互運用性テストは、「テスト登録後、NDA交換 → 適合性の自己評価テスト → テストの準備 → テストの実施 → 結果通知とテスト合格認定書の発行」の流れで行われます。各過程について簡単に説明します。
テスト登録後、NDA交換
テストを登録する方法と登録の後NDAを交換することについての内容は、以下のページで詳しく確認できます。
適合性の自己評価テスト
テスト登録後、相互運用性テストの2週間前までに自己診断ツールのテストケース(自己診断ツールのバージョンが1.6.14の場合、162のテストケース)に合格した結果を提出してから、実際のテストに参加できます。自己診断ツールは、以下のリンクからリクエストできます。
サーバーの場合、以下の基準に合わせてAPIを提供する必要があります。
自己診断ツールを利用したサーバー実装テストは、テスト専用に実装された認証器と連携して行います。テストに関する説明は以下のリンクを参照してください。
テストの準備
テストするためには、以下のリンクを参照してfido2-interop-webappページを作ります。他のベンダーの認証器は、このページと連携してテストを行います。
その後、外部インターネット向けにデプロイするFIDO2 RP(Relying Party)サーバーのURLをFIDOアライアンスに共有し、FIDOアライアンスがメールで提供した他のベンダーの認証器メタデータをデータベースに追加します。
テストの実施
デプロイ後、テスト期間中に問題が発生しない限り、サーバーは何か直接実行する必要はありません。私たちは、1日に1~2回認証器ベンダーと連携したログを確認し、問題はなかったかチェックだけ行いました。
結果通知とテスト合格認定書の発行
結果はテストを行った翌週の月曜日に、FIDOアライアンスからメールで届きます。認定書の発行費用は以下のリンクをご参照ください。
LINE FIDO2-Server、相互運用性テストに合格
LINE FIDO2-Serverは、今回も大きな問題なく相互運用性テストに合格しました。公式認定はすでに取得しているので、今回は認定書を申請しませんでした(参照)。
オープンソースとして公開したLINE FIDO2-Serverについて
LINE Security R&Dチームは、FIDO2をより広く普及し、より良いソフトウェアに成長させるため、LINE FIDO2-Serverをオープンソースとして公開することにしました。このような活動が、最終的にFIDOエコシステムの発展に貢献すると期待しています。
私たちが公開したオープンソースのGitHubリポジトリーは以下のとおりです。
ライセンスはApache-2.0で、公開するすべてのモジュールは現時点では以下の環境で動作します。
- Spring Boot 2.4.3
- Gradle 6.8.3
- Java 1.8
公開するモジュールは、大きく3つに分けることができます。
- LINE FIDO2-Server:FIDO2規格を遵守するサーバーアプリケーションです。
- FIDO2-spring-boot-starter、FIDO2-spring-boot-starterデモ:Spring Boot環境で簡単に統合できるように、LINE FIDO2-Serverアプリケーションをspring-boot-starter形式でも提供しています。
- RPサーバーのサンプル:FIDO2 RPを実装したサンプルアプリケーションです。
LINE FIDO2-Serverは、基本的にWebAuthnレベル1規格を遵守しており、最近公開されたレベル2の規格も一部遵守しています。サポートする証明書のタイプと形式は以下のとおりです。
- サポートする証明書のタイプ
- Basic
- Self
- Attestation CA(a.k.a Privacy CA)
- Anonymization CA
- None
- サポートする証明書の形式
- Packed
- TPM
- Android Key Attestation
- Android Safetynet
- Apple Anonymous
- FIDO U2F
- None
おわりに
私たちのチームでは今回のLINE FIDO2-Serverの公開に限らず、今後も継続して機能追加やバグ修正を行い、積極的にオープンソース活動に貢献していく予定です。この記事を読んでいる多くの開発者の方々にも、LINE FIDO2-Serverを利用していただければ幸いです。こうした活動を通じて、LINE FIDO2-Serverがより良いものになっていくことを期待しています。以上、最後までお読みいただき、ありがとうございました。
- FIDOアライアンスが提案し、W3Cが採用したウェブ規格。最新バージョンのウェブブラウザではWebAuthn APIの提供が推奨されています(参照)。