パスワードとパスキーの違いをクレデンシャル管理の観点から整理する

こんにちは、ritouです。

今回はクレデンシャル管理の観点からパスワードとパスキーによる認証を整理してみます。これまで何回かTwitterに書いてきたお話です。

背景

最近はだいぶパスキーの説明記事なども出てきていますが、

  • パスワードとパスキーによる認証を比較、説明しようとしても色々違いすぎて何だかピンとこないと言われることがある(普通に自分の説明不足もある)
  • パスワードマネージャーについての認識も人それぞれ結構違って、「パスワードレスな世界ではパスワードマネージャーがいらなくなるのである(キリッ」 みたいな書き方もされたりする
  • 「とにかく安全なパスキー🩲」ぐらいの人の解像度をあげたい

と言ったあたりからこれを書きました。

比較対象

今回は以下の3つのクレデンシャル管理を用いた認証方式の差分をみていきます。

  1. 記憶により管理されている パスワード
  2. システムにより管理されている パスワード
  3. システムにより管理されている パスキー(FIDOクレデンシャル)

それぞれの特徴、そして1と2の違い、2と3の違いを整理します。

1. 記憶により管理されているパスワードを用いた認証

いつも “人類にパスワード認証は早すぎる” みたいに言ってるやつです。

特徴としては

  • Pros
  • Cons
    • 推測困難なパスワード生成が困難 -> 第3者によるログイン
    • あまり多くのパスワードを管理できない -> 使い回し
    • いわゆる二段階認証を導入してもフィッシングにやられてしまうことが多い

と言ったところでしょう。

2. システムにより管理されているパスワードを用いた認証

OSやブラウザから提供されるパスワードマネージャーと言われているようなものを使う場合はこれにあたります。 特徴は1と2でガラッと変わります。

  • Pros
    • 推測困難なパスワードを生成できる
    • 多くのサービスのパスワードを管理できる
    • 自動入力するかどうかはシステムがURLなどを用いて判断し、異なるドメインなどにあるフィッシングサイトにはメールアドレスなどの識別子とパスワードが自動入力されない
  • Cons
    • 共通のパスワードマネージャー相当のものがインストール/OS機能として提供されていて、パスワードが同期されている環境でのみ利用できる
    • ユーザーが手動でパスワードなどをコピペすることでフィッシングの被害に遭うこともある
    • あくまでシステムで管理されるのはパスワード入力の部分までなので、認証フローの中のリクエストにはパスワードそのものが含まれる

と言うように、完全にとは言えないものの概ね反対の特徴を持っています。

Consにあるように、ユーザー自身が余計なことをしてフィッシングにかからなければ 記憶により管理されているパスワードを使う認証の ユーザー側の課題は大体解消できます

パスワード認証を利用する限り、サービス側から復号可能な状態で漏洩して...みたいな課題はあるものの、システムにより管理されることで安全性が高まることは明白です。

パスワード vs パスキー、パスワードからパスキーみたいなところに触れるところに、ここをすっ飛ばして「全く別物」として説明するよりは1段階入れることで特性の違いが理解しやすくなるのではないかと考えています。

3. システムにより管理されているパスキー(FIDOクレデンシャル)

システム管理されたパスワードにより課題がクリアされるとなると、パスキーのメリットはどう考えたら良いの?となりそうです。

残念ながら、人類は公開鍵暗号で利用する鍵ペアを手動で生成したりバイナリ/JWK/PEM形式とかで記憶したり、脳内でデジタル署名を生成したりはできません。なのでFIDOではそのクレデンシャルの管理をAuthenticator(認証器)が行います。

FIDOクレデンシャルはシステムにより管理されることが前提であり、ユーザーに対してそれを強制する仕組みであるとも言えます。

特徴としては

  • Pros
    • 暗号的に安全な鍵ペアを生成できる
    • 多くのサービスの秘密鍵などの情報を管理できる
    • WebAuthnは認証フローの中でブラウザが仲介することで現在アクセスしているoriginとサービスが指定してくるrp_idの比較を行い、一致しない場合はFIDOの認証が走らないのでフィッシングが困難
    • プラットフォームや外部のパスワードマネージャーの同期がされている他の環境からも利用できる
    • 認証の際のリクエスト/レスポンスには秘密鍵そのものの値は含まれない
  • Cons
    • プラットフォームや外部のパスワードマネージャーによりFIDOクレデンシャルの同期がされていない環境からは利用できない

と言うところでしょう。

2との差分としては公開鍵暗号に関する部分とフィッシング耐性の話、そして繰り返しになりますが、システムによる管理を強制できるところです。

このように段階的に整理していくと、いわゆるパスキーの仕組みは パスワードマネージャーの仕組みを強化し、ユーザーに強制できるもの と捉えることができるでしょう。

やり取りされるデータとクレデンシャル

パスキーの説明でよく語られる部分ですが、認証時にサービスに送られるデータの観点でいうとパスワード認証はリクエストにクレデンシャルが流れ、FIDOは通信路にクレデンシャルが流れないみたいな違いはあります。 これは認証方式による違いの話で、今回の整理の本質であるクレデンシャルの管理とは関係ないですね。

システムによる管理における、クレデンシャルの共有範囲による違い

現在の “パスキー” の流れが登場する前、FIDOクレデンシャルはYubikeyのようなセキュリティキーやPC/スマホ自体のTPMに保存されるものとして扱われてきました。 それがプラットフォーマーのクレデンシャル管理の仕組みを利用するようになり、最近は外部のパスワードマネージャーによる管理も始まりました。

そもそも、このような流れになった背景としてFIDOクレデンシャルを保存している端末が使えない状態になった際にリカバリーが困難と言う課題がありました。 FIDOクレデンシャルが共有されたり同期されたりして複数端末から利用可能になると利便性が向上するものの、あるFIDOクレデンシャルを第3者が入手するためのハードルが下がることになります。クレデンシャル管理の方法に応じて、頼らざるをえないセキュリティ機構の対象が変わります。

  • 端末ごとのTPMに保存 : 端末ごとのセキュリティ
  • プラットフォームアカウントに紐づけて管理 : プラットフォームアカウントのセキュリティ
  • 外部のパスワードマネージャーで管理 : 外部のパスワードマネージャーのセキュリティ

パスキー認証を利用するサービスがどの程度の安全性を必要としているかを判断、要求しつつ、その中からユーザーが選択できるのが理想ですが、実際はこの辺りは難しいでしょう。この辺り困るのは "端末ごとのTPMに保存"相当のセキュリティ要件があるサービスですが、まぁその辺りは一旦置いておきましょう。

今回の整理において言いたいのは これはパスキー独自の検討事項ではなく、システムにより管理されているパスワードも同様である ということです。

まとめ

  • 記憶で管理されるパスワードとシステムで管理されるパスワード、それぞれを利用する認証は特性がガラリと変わり、システムで管理されるパスワードによって一般的なパスワード認証のデメリットはだいたい解消できる
  • システムで管理されるパスワードとFIDOクレデンシャルの違いは、FIDOの仕様に関連する公開鍵暗号フィッシング耐性の詳細の部分と、システムによる管理を強制できるかどうかで違いがある
  • パスキーの認証はパスワードマネージャーを強化し、ユーザーに強制できる仕組みである
  • システム管理において、共有/同期の範囲と依存するセキュリティ機構が変わる話はFIDOクレデンシャルだけの話ではなく、パスワード認証でも同じ

今回はUI/UXの話を入れませんでした。入れるとそれだけでもう一記事かけるぐらいになりそうなので別にします。

色々な観点から物事の変化を捉えることも大事ですね。 ではまた。