WebAuthnの実装: Yubicoからの新規アップデートの重要性

July 25, 2022 1 minute read

WebAuthnではたくさんの略語とプロトコルが使われています。 しかし、これらの意味と、これらの中から重要なものだけを特定する方法を理解していますか? 弊社ではわかりやすい説明とサポートの両方をご用意しています。 このブログでは、WebAuthnの実装のコツや、java-webauthn-serverライブラリのアップデート、YubicoのWebAuthnスターターキットの最新版についてのニュースをお伝えします。

初期

Universal 2nd Factor(U2F)は、YubiKeyなどのハードウェアトークンを使ったオープン認証規格です。 これは当初、FIDOアライアンスによって2014年に公開されました。 Yubicoはこの規格を開発者で、YubiKeysは最初のUniversal 2nd Factor(U2F)セキュリティキーのひとつでした。 この規格は主に次の2つから構成されています。

  • ホストコンピュータ(クライアント)とセキュリティキー(オーセンティケータ)の間で USB または NFC を介して通信するために使用されるFIDO U2F HIDプロトコル (後にCTAP1、Client To Authenticator Protocolに改名).
  • ウェブサイトで認証情報の登録と認定に使用されるFIDO U2F JavaScript API

これらのプロトコルのサポートは複数の異なるブラウザに追加され、この規格はコンセプトを実証と証明に使われてきましたが、いくつかの制約が普及の妨げになっていました。

進化

U2Fはセキュリティの強化と使い勝手の面では優れていましたが、まだ改善の余地がありました。 U2Fの後続ソリューションはFIDO2で、「パスワードレスログイン」、デバイス上でのPINや生体認証のサポート、その他いくつかの拡張機能など、多数の新しいユースケースに対応しています。 この製品により、これらの新機能をセキュリティキーでサポートするCTAP2と、FIDO U2F JavaScript APIの後継製品であるWebAuthnという新しいAPIが登場しました。

WebAuthnは従来のJavaScript APIに完全に代わり、W3Cによって標準化され、主流ブラウザで実装されています。 旧型のU2F APIのサポートは現在段階的に終了していて、大半のブラウザでは機能していません。 ここで、WebAuthnの出番となります。WebAuthnは、CTAP1(U2Fプロトコル)およびCTAP2(FIDO2プロトコル)の両方と完全な互換性があります。 また、WebAuthn APIを利用した拡張機能により、古いU2F認証情報を継続して利用することも可能で、ユーザーはセキュリティキーを再登録しなくても、引き続き使用できます。 WebAuthnはほとんどの開発者が接するAPIなので、「WebAuthn」はブラウザだけでなく、セキュリティキーからサーバーまでのエンドツーエンドの実装全体を指す用語になっています。

WebAuthn実装方法  

これまで、ホストから認証システムへの通信(CTAP)、Webページからブラウザへの通信(WebAuthn)について説明してきましたが、サーバー側についてはまだ確認していません。 FIDO2仕様書では、サーバーが認証情報を検証するために必要なことを段階的に説明していますが、実際のWebAuthnの実装は読者の演習として残されています。 実装に使えるライブラリはいくつかありますが、その中でもYubicoのjava-webauthn-serverライブラリバージョン2.0は、公開されたばかりです。 このライブラリを使用すると、既存のJVMベースのバックエンドにWebAuthnのサポートを追加し、次のことを実行できます。 

  • クライアントに送信する必要があるバイナリメッセージの作成と読み込み
  • 暗号署名の有効性確認 
  • 仕様によって課された規則の履行

この新しいライブラリは、FIDO Metadata Service 3(FIDO MDS3)にも対応しているため、ユーザーが使用しているセキュリティキーのベンダー名や製品名などのメタデータを取得できます。 このデータはサーバー側でのWebAuthn実装には必要ありませんが、ユーザー体験の充実化や、必要であれば、既知の問題があるセキュリティキーの使用の禁止にお使いいただけます。

Pythonを好まれるお客様向けに、弊社ではpython-fido2ライブラリのバージョン1.0もリリースする予定です。 最初のRelease Candidate 1.0(RC1)を公開した約1ヶ月後に最終版をリリースする予定です。 Python-fido2は、Javaライブラリで実施する大半のことを実行できるWebAuthnサーバライブラリである上に、クライアントライブラリでもあります。 つまりCTAPプロトコルも実装しているので、USBやNFCを介してYubiKeyと直接通信することで、ブラウザ外からでもFIDO2機能にアクセスできるのです。

もう少し下位レベルで十分な方は、 Cライブラリのlibfido2をお試しください。libfido2には多言語用の複数のサードパーティ製バインディングも含まれています。 これはCTAPを扱うクライアントライブラリで、署名や証明書を検証する機能も搭載されています。 これは他のプロジェクトの中でもOpenSSHで使用され、YubiKeyを使ってSSHセッションを認証できます。

WebAuthn実装スターターキット

また、弊社では新バージョンのWebAuthnスターターキットを公開します。このキットはオープンソースプロジェクトとリファレンスアーキテクチャで、開発者がアプリケーションにパスワードレス認証と適応型多要素認証を導入するためのガイドとしてお使いいただけます。 このバージョンでは、証明書とFIDO Metadata Serviceを使用して、証明書利用者にセキュリティキーの有効性とIDの両方を証明する方法について掘り下げると同時に、デバイス自体の詳細情報も提供します。

また、信頼できるデバイスとしてのプラットフォーム認証器の概念についても説明します。この情報は、信頼できるデバイスの現在のパラダイムを、クッキーやローカルストレージを使って実装されているパラダイムから、一般的な消費者向けデバイスに存在するWebAuthnベースの認証情報を使ったパラダイムにシフトさせる上で役立ちます。 このようにプラットフォーム認証器を使用することで、セキュリティキーを適切に補完できます。

WebAuthnスターターキットには、WebAuthn対応アプリケーションのユーザーエクスペリエンス向上のためのベストプラクティスも盛り込まれています。 プラットフォーム、ブラウザ、認証デバイスの順列が異なるため、ユーザー名とパスワードを使った従来の認証に慣れているユーザーにとっては、WebAuthnへの移行が難しいことがわかりました。 弊社では、実装により高い透明性を実現し、ユーザーに自分が取るべき行動および行動と処理のタイミングを確実に理解してもらうことを目的としています。 

一般ユーザーとの信頼関係を構築しない限り、フィッシングやその他のサイバー脅威によるアカウント乗っ取りを防ぐWebAuthnの実装は普及しないでしょう。 今こそU2FからWebAuthnに移行する時であり、あるいは遅すぎるくらいかもしれません。 ブラウザがU2Fサポートを終了するだけでなく、WebAuthnによって多くの新機能を使えるようになるからです。 規格の実装が少しでも簡単になるように、弊社のライブラリをお役立てください。また、弊社では今後更に改良を重ねるために、皆様からのフィードバックをお待ちしています。 最後になりますが、今回のリリースによりパスワードレスの導入が進むことと、WebAuthnを構成するパーツを理解していただけることを期待しています。

———

WebAuthnの新機能の詳細とWebAuthn実装についての最新情報は、弊社オンデマンドウェビナー「WebAuthnによる多要素認証:実装に関する最新情報と今後の展望」をご覧ください。 また、近日開催予定のウェビナー「YubicoのJava WebAuthnサーバによる適応型多要素認証戦略の強化」については、こちらからお申し込みください。

Share this article:

Recommended content

Thumbnail
Thumbnail
Thumbnail
Thumbnail