はじめに
こんにちは。TIG の吉岡です。秋のブログ週間 10 本目の投稿です。
2022年の 5 月に Apple, Google, Microsoft そして FIDO Alliance が マルチデバイス対応FIDO認証資格情報 を発表してから、パスワードレス技術に対する注目が高まっています。1 パスワードレスの概要について調査してまとめてみました。
目次
- 私たちとパスワード
- パスワードの抱える問題
- パスワードマネージャ
- 公開鍵暗号の活用
- パスワードレスと FIDO Alliance
- FIDO v1.0
- FIDO2
- FIDO の認証フロー
- Passkeys
- パスワードレスな未来
私たちとパスワード
今日、私たちのデジタルアイデンティティはパスワードに支えられています。私たちは日々 Google で検索し、Netflix を観て、Twitter でつぶやき、Amazon で買い物をしますが、これらすべてのアカウントが、パスワードによって保護されています。
パスワードは通常 TLS によって安全にクライアントからサーバに転送され、サーバ上で難読化されて保存されるため、攻撃者が任意のパスワードを即座に奪取することは困難です。しかしながら、秘密鍵であるパスワードを他者と共有する方法は、本質的で避けることのできない問題を複数孕みます。
パスワードの抱える問題
- ユーザがパスワードを適切に管理するのは困難である
- サーバや通信経路からパスワードが漏洩することがある
- パスワードにはフィッシング耐性がない
ユーザがパスワードを適切に管理するのは困難である
IPA によると、パスワードは、できるだけ長く、複雑で、使い回さないものとすべきだそうです。2それはそうなのですが、このベストプラクティスを人間が実践することは事実上不可能です。私たちは数百のアカウントを保持しています。そのアカウント全てに対して、ユニークでランダムな文字列を記憶することはできないでしょう。残念なことに、複数のサービスでパスワードを使い回しているユーザも多くいるようです。
サーバや通信経路からパスワードが漏洩することがある
ユーザがパスワードを適切に管理していたとしても、通信経路やサーバにセキュリティ上の不備がある場合、パスワードが漏洩し、ユーザのアカウントが危険に晒される場合があります。通常、パスワードは難読化された上でデータベースに保存されますが、平文で保存されたパスワードが漏洩した事例 も存在します。ユーザにとって、ウェブサービスが適切に管理・運営されていることを断定的に知る術はなく、パスワードの使用には本質的な危険が伴います。
パスワードにはフィッシング耐性がない
パスワードは、人間であるユーザが直接入力することのできる文字列であり、フィッシング耐性がありません。普段からフィッシング詐欺の被害に遭わないよう注意している人であっても、急いでいるときや慌てているときに、適切に入力先ウェブサイトの真正性を確かめるよう徹底することは、簡単なことではありません。また、ミスリード URL やホモグラフ攻撃 に常に気をつける必要があるというのは、それだけでも大きな心理的負担です。パスワードには本質的にフィッシング耐性がなく、人間の注意力に期待するのは無謀でしょう。
パスワードマネージャ
このようなパスワードの惨状に際して、パスワードマネージャを利用することが、現時点でのベストプラクティスであり、唯一のまともな解決策であると筆者は考えています。プラットフォーマーとして Apple は iCloud Keychain を、Google は Google Password Manager を提供していますし、サードパーティとしても 1Password や Bitwarden、Dashlane のような有力なプレイヤーが存在します。
ユーザは信頼できるパスワードマネージャを適切に使用することで、パスワードに潜む問題をある程度解消できます。パスワードマネージャはユニークでランダムなパスワードを作成・管理でき、また、常にオートフィル機能を使うようにすれば、フィッシング被害を受ける可能性も大きく下げることができます。
ところがパスワードマネージャも銀の弾丸ではありません。オートフィルが活用できないような場面では相変わらずフィッシングの被害を受ける可能性がありますし、サーバからパスワードが漏洩するような事態に対しても、ユーザは無防備のままです。
公開鍵暗号の活用
根本的な問題は、秘密鍵であるパスワードをクライアントとサーバが共有する、という現状のモデルにあります。トランスポート層では 10 年以上前から SSL/TLS として公開鍵暗号が大活躍しているのに、アプリケーション層で同様の技術を活用しない手はありません。公開鍵暗号を活用し、パスワードへの過度な依存を軽減するため、2012 年に Fido Alliance が設立されました。
パスワードレスと FIDO Alliance
FIDO Alliance は、パスワードに対する依存を軽減するため、PayPal や Lenovo らにより 2012 年に結成された業界団体です。現在では Amazon, Apple, Google, Microsoft などが参加する一大アライアンスに成長しています。FIDO は、TPM や生体認証機能を備えた認証器 (スマートフォンやセキュリティキー) を活用し、ユーザがパスワードを利用することなくアカウントにログインできるようにすることを目的としており、そのための標準規格をいくつか定めています。
FIDO が発表した重要な規格には、FIDO 1.0 (2014) と FIDO2 (2018) があります。
FIDO v1.0
FIDO v1.0 は FIDO UAF (Universal Authentication Framework) と FIDO U2F (Universal 2nd Factor) から成ります。FIDO UAF はスマートフォンのネイティブアプリケーション向けに、公開鍵ベースのパスワードレス認証を規定します。FIDO U2F は、パスワードに加わる第 2 認証要素として、従来通りの OTP でなく、公開鍵暗号を利用できるようにした仕様です。
この UAF と U2F ですが、仕様編纂者を見るに、UAF は PayPal が、U2F は Google が主体となって仕様策定を進めたようで、全体として足並みが揃っていない感があります。FIDO として一貫性のある仕様の実現には、FIDO2 を待つ必要がありました。
FIDO2
FIDO v1.0 にはいくつかの反省点がありました。UAF は半ばスマートフォンのネイティブアプリケーションで使うことを前提としていたため、ウェブブラウザへの応用がすすみませんでしたし、U2F はあくまで従来のパスワードを補完する技術要素にすぎず、完全なパスワードレスを実現するものではありませんでした。これらの問題を解決した最新の FIDO 仕様が、2018 年に発表された FIDO2 です。
FIDO2 は WebAuthn と CTAP から成る公開鍵ベースの認証技術仕様です。
WebAuthn
WebAuthn (Web Authentication) は、FIDO Alliance と W3C の共同作業として、2016 から作業が開始し、2019 年にウェブ標準となった仕様です。WebAuthn はウェブブラウザが認証器とコミュニケーションをとり、キーペアを作成したり、チャレンジに署名したりする方法を定めています。この仕様により、ウェブ開発者はユーザの認証器に対してキーペアの作成やチャレンジへの署名を依頼できます。2022 年 11 月現在、WebAuthn は Firefox を除くすべての主要なブラウザで完全にサポートされています。3
CTAP
CTAP (Client to Authenticator Protocol) は、OS がセキュリティキーのような外部認証器とやりとりする際の低レイヤープロトコルを規定しています。ウェブ開発者が普段意識しないような、ウェブブラウザよりも先にある世界のプロトコルです。4
FIDO の認証フロー
FIDO は複数の仕様を規定しており、それらの関係が複雑なのですが、公開鍵暗号を利用した認証プロトコル であるという点は、すべてに共通しています。おおまかに言って、FIDO のパスワードレス認証は次のようなフローを採用しています。
ユーザ登録
FIDO 認証のユーザ登録時にはユーザの認証器がキーペアを作成し、公開鍵をサーバに送信します。サーバは公開鍵を保存します。サーバは秘密鍵を知らないため、仮にサーバから情報が漏洩しても、第三者がユーザのアカウントを乗っ取ることはできません。
ユーザ認証 (サインイン)
ユーザ認証 (サインイン) 時にはサーバがランダムなチャレンジを生成し、クライアントに送信します。クライアントは秘密鍵でチャレンジに署名し、サーバに返却します。サーバはユーザ登録時に保存していた公開鍵で署名を検証し、有効な署名であれば、ユーザをサインインさせます。なお、このときサインイン先のドメイン名がユーザ登録したドメイン名と同一であることがクライアント側で検証されるため、FIDO 認証にはフィッシング耐性があります。
Passkeys
FIDO Alliance の設立から 10 年近くを経て、ベンダー中立な FIDO2 仕様群が策定され、多くの OS・ブラウザでサポートされるようになりましたが、この技術が一般に広く用いられるには、移行とリカバリの問題が残っていました。従来の FIDO 認証では、ユーザの秘密鍵はデバイスのセキュアストレージを出ることなく、ローカルに保存されていました。従って、ユーザが複数のデバイスを使用しているとき、デバイスごとにサービスに登録する必要がありました。また、デバイスを買い替えたとき、アカウントをシームレスに移行する機能はなく、すべてのアカウントについて、再登録が必要でした。さらに怖いことに、デバイスを紛失したり破損したりしてしまうと、アカウントに対するアクセスを完全に失ってしまう可能性がありました。
この問題を解決し、パスワードレス技術を真にユビキタスなものにするため、2022 年 5 月 5 日 (World Password Day) に、Apple, Google, Microsoft, FIDO Alliance が共同で声明を発表し、マルチデバイス対応 FIDO 認証資格情報 (通称 passkeys) への対応を推進していくことを宣言しました。Passkeys により、iCloud Keychain や Google Password Manager を通して秘密鍵をデバイス間で安全に同期でき、移行とリカバリの問題も解消されます。Passkeys は macOS 13 Ventura や iOS 16 の Safari 16 ですでにサポートされており、Google も Android と Chrome で今秋に対応 することを発表しています。
パスワードレスな未来
現状、広範に採用されているとは言い難い FIDO, WebAuthn, passkeys ですが、強力なプラットフォーマーが協力して推進していくことから、今後採用が進んでいくことが考えられます。直近では Apple, Google そして Microsoft といったプラットフォーマーによるサポートから始まっていますが、将来的には 1Password や Dashlane のようなパスワードマネージャも認証器機能を提供する予定だそうです。ユーザとサービス提供者をパスワードから解放するパスワードレス技術に今後も注目していきます。
- 1.当社比 ↩
- 2.ちなみに、IPA のウェブサイトで紹介されている「コアパスワード」を使った管理方法を採用することはお勧めしません。パスワードが平文で漏洩したとき、プレフィックスを識別するのが容易で、コアパスワードが攻撃者に奪取されるためです。 ↩
- 3."WebAuthn" | Can I use... Support tables for HTML5, CSS3, etc ↩
- 4.FIDO2 に含まれるのは CTAP2 と呼ばれる仕様です。FIDO v1.0 において FIDO U2F と呼ばれていたものは、FIDO2 において CTAP1 に改名されました。 ↩