次世代の認証技術 WebAuthnを紹介【後編】
みなさん、こんにちは。
NRIデジタルの工藤です。
私たちは、CoE活動として、新技術の探索・調査を行っています。
前半の記事ではWebAuthnの概要、WebAuthnを実現するための構成要素、実装シーケンスについてご紹介しました。本記事ではWebAuthnが抱える問題点とその解決策としての「Passkey」についてご紹介します。
WebAuthnの課題
前半の記事で紹介したWebAuthnですが、デバイス内に保存されたユーザの秘密鍵を利用し認証を行っているため、端末を買い替えた際の認証情報の移行ができない、認証機を紛失してしまった場合のリカバリができないなどいくつかの課題があります。
このような課題を解決可能な技術の1つとして、デバイス間で秘密鍵を共有するPasskeyという技術があります。
Passkeyの概要
PasskeyはマルチデバイスでのFIDO認証を可能にすることができるというもので、大手プラットフォーマーも直近対応を進めているホットな技術です。 FIDOアライアンスも2022年3月に「Multi-Device FIDO Credentials」というホワイトペーパーの中でこのPasskeyについて発表しています。
Passkeyでは下の図のように、複数の認証デバイス間で、WebAuthnを使用するための暗号鍵を共有します。携帯電話やノートパソコンなどの認証器に紐づいていた暗号鍵を、ユーザーのプラットフォームアカウントに紐付けてクラウドに同期させる機能を実装することで、これを実現します。例えばAppleならAppleIDに紐づいて鍵情報が共有され、同じAppleIDでログインすれば複数の異なるデバイスでWebAuthnを使った認証を行うことができます。
Appleでは2022年9月にiOS 16で、2022年10月にiPadOS 16とmacOS Venturaでサポートすることを発表しており、2022年11月現在既に利用可能です。Googleは、2022年10月からAndroidでのサポートを発表し、2023年までにChromeOSでのPasskeyサポートを計画しています。2022年現在でも、Google Play Servicesのβ版に登録することで利用可能です。Microsoft Windowsは、2023年にサポートを提供する予定です。

WebAuthnとPasskeyのパラメータの違い
従来のWebAuthnでは、同一端末で登録/認証を行っていましたが、Passkeyを利用した場合、登録時に利用した端末と認証時に利用した端末が異なることがあります。このような違いから従来のWebAuthnとPasskey利用時ではWebAuthn APIのパラメータに違いがあるのではないかと考え、調査を行いました。
調査はWindows、iPhone(Passkey利用)、Android(Passkey利用)の各端末で、WebAuhtn APIを利用した登録/認証を実施し、APIのレスポンスパラメターに相違がないかの確認を行いました。
WebアプリケーションはAuth0社が提供する、WebAuthn.meというWebサイトを利用しました。
Web Authentication (WebAuthn) Credential and Login Demo
- 通常のWebAuhtnとPasskey利用時のWebAuthn APIのパラメータではいくつかのIFの違いがあることが分かりました。(下表参照)
- iPhoneのPasskeyを利用した際とAndroidのPasskeyを利用した際のWebAuthnパラメータはわずかな違い(下表のNo.5)があるものの、ほとんど共通であることが分かりました。
No | 差分 | 行数 | Passkey (iPhone) | Passkey (Android) | |
---|---|---|---|---|---|
1 | Passkey利用時には attestationStatementがnoneで 返却される | 登録 | 5行目 | 〇 | 〇 |
2 | Passkey利用時には backupEligibility,backupStateが trueとなる | 登録 | 16,17行目 | 〇 | 〇 |
認証 | 20,21行目 | ||||
3 | Passkey利用時にはsignCountが 常に0でカウントアップされない | 登録 | 22行目 | 〇 | 〇 |
認証 | 26行目 | ||||
4 | Passkey利用時にはaaguid(認証器の 識別子)が「00000000-0000- 0000-0000-0000000000」で固定 | 登録 | 24行目 | 〇 | 〇 |
5 | AndroidにてPasskey利用時には androidPackageNameというどの PackeからPasskeyが利用されたかを 示す値が含まれる | 登録 | 41行目 | 〇 |
登録

認証

クロスプラットフォームでのPasskey
Passkeyを使うことでWebAuthnでバックアップ用の端末を用意できますが、例えば持っている端末がiPhone1台とAndroidデバイス1台、といった状況ではPasskeyを活用することができません。
これは、現状対応が進められているPasskeyは各プラットフォーマー固有のアカウントおよびクラウドに紐づき同期されるもので、複数プラットフォームにまたがるものはないからです。
一方で、前項で見てきた通り、各社で対応しているPasskeyのインタフェースに顕著な差分はありません。そのため、複数プラットフォーム間で秘密鍵の共有を行うというハードルを越えることができれば、クロスプラットフォームでのPasskeyも実現可能と考えられます。
このときの登録・認証のプロセスは下図のようになります。図からもわかる通り、プラットフォーム間での暗号鍵・ユーザ情報の同期以外は通常のWebAuthnにおけるプロセスと同一です。


まとめ
本記事では、WebAuthnが抱える問題点とその解決策としてPasskeyについて紹介しました。PasskeyとWebAuthnは、W3Cによる仕様策定がリアルタイムに進められている領域であるため、今後も新たな機能が追加されていくでしょう。
iPhoneデバイスでサイトに登録することで、AndroidやWindowsといったほかのプラットフォーマーのデバイスからも認証可能となる世界もすぐにやってくるかもしれません。
WebAuthn・Passkeyが今後も発展していけば、現在当然のように行っているパスワードを用いた認証は過去のものとなり、パスワードレスな認証がスタンダードになっていくのかもしれません。
パスワードレスな認証が普及することにより、ユーザは日々利用している複数のサイト、それぞれに対するパスワードを覚えておく必要がなくなります。また、従来、事業者はパスワード管理のために、ヘルプデスクやサポートセンターを設けるなど、多くの人とお金をかけていましたが、ユーザのパスワードを管理しておく必要がなくなり、かなりのコスト削減につながるでしょう。
WebAuthn・Passkeyはまだまだ発展途上ですが、ユーザ側・事業者側とも様々なメリットがあります。大手プラットフォーマーの対応を注視しつつ、WebAuthnへの対応を見据えた動き出しが必要になってくるかもしれません。