パスキー(Passkeys)を使った認証を試してみる

最近何かと話題の「パスキー(Passkeys)」。いろいろ調べてみましたが、一応、以下が私の認識です。

【パスキーとは?】
・FIDO2認証技術を利用しており、FIDO認証方式の1つ(だと理解している)。
・認証デバイスをPCがBluetoothで自動検出する仕組みがあるので物理的に認証デバイスを差す必要がない。
 →これは「caBLE」というパスキーの関連技術の1つ。
 →外部デバイスを利用する場合、やり取りはQRコードの読み取りからスタート。
 →MacbookのTouchIDなど内臓センサーを利用するのが楽。
・認証デバイスに入っている(認証で利用する)秘密の鍵はアカウント間で共有される。
 →故にどのデバイスでも同じアカウントでログインしていれば、認証デバイスとして使える。
 →そして、現時点では認証デバイスを固定できない(日本の企業だと受け入れられないのでは・・・)。

という事で、文字の説明だけだといまいち「何がうれしいのか?」分からないので、実際に試してみました。

前提条件

パスキーを利用するためには、認証を行うWebサービス(SP)やSSOしている場合にはID Provider(IdP)がパスキー(FIDO2認証)に対応している必要があります(パスキーの認証技術はFIDO2を採用している)。そしてもちろん認証デバイスもパスキーをサポートしている必要があります。また、今回は外部認証デバイスとして「iPhone13」を利用するのでクライアントPC(Windows11)と認証デバイス(iPhone13)の「Bluetooth」を「ON」にしておきます(ペアリングはしなくて大丈夫です!)。これで認証時にブラウザが「Bluetooth」通信を介して認証デバイスを探したり、やり取りを行うことができます。

【前提条件】
・認証を行うWebサービス(SSO環境ではIdP)が「パスキー(FIDO2認証)」に対応している必要がある。
・利用するブラウザと認証デバイスがパスキーに対応している必要がある。
・認証を行うWebサービス(SSOしている場合にはIdP)に認証デバイスの事前登録が必要。
・クライアントPCと認証デバイスの「Bluetooth」を「ON」に設定(今回はIPhoneを利用するため)。

パスキーを使った認証の流れ

パスキーを使った認証の大まかな流れは以下となります。

① 認証デバイス(今回はiPhone13を利用)の登録(事前準備)
② 認証時にブラウザが「パスキーがあるデバイスの選択画面」を表示
③ デバイス選択後(今回は「別のデバイス」を選択)、ブラウザが「QRコード」を表示
④ 「Bluetooth」通信でデバイスを検出
⑤ 認証デバイスで「QRコードを読み取り」
⑥ 認証デバイスで認証(今回はiPhoneを利用しているのでFaceIDで認証)
⑦ 認証完了情報を「「Bluetooth」通信で返却

↑ブラウザ上にこんな感じのポップアップが表示されます。まさかの「QRコードをスマホで読み取る」んですね。iPhoneのカメラをかざすと「パスキーでサインイン」って黄色い文字が表示されます。文字をタップするとiPhoneが「パスキーをiCloudに保存するか?」みたいなメッセージを(最初だけ)出すので、「続ける」ボタンをタップしてください。2回目以降は「保存済みのパスキーを使用してサインインしますか?」というメッセージに変わります。今回はiPhone13を利用しているので「FaceID」で顔認証すると、待ち状態になっていたブラウザ画面がログイン完了に変わっていると思います。

う~ん・・・どうでしょう・・・今回、認証デバイスとして(内臓センサーではなく)外部デバイスを利用するので、QRコードの読み取りが必要だったわけですが、追加の認証方式としてはワンタイムパスワード(OTP)のほうが簡単で手間は少ないです。もちろん、OTPはネットワークに(使い捨てのパスワードとは言え)認証クレデンシャルが流れるし、フィッシングサイトに誘導された場合の事を考えると、“パスキーの方がより安全です”という理屈は分かります。それとパスキーを使った認証、FIDO認証はそれ単体でも利用ができるセキュリティ強度を持っているので、OTPと比較するのもちょっと違うなとも思いますけどね(OTPは「パスワード認証+OTP」という形で利用され、OTP単体の認証のみではセキュリティ強度は高くないとされています)。

認証デバイス検出の仕組み

認証時にブラウザが「Bluetooth」で近くの認証デバイスと通信する仕組みは、図のようになっているようです。「caBLE(Cloud-Asisted BLE):今は”hybird”って呼ばれている?」について詳しくないので、何となくのシーケンスです。もともとはGoogleが作った仕組みで、Googleの2段階認証プロセスにて、スマートフォンを利用する方式(「ログイン済みGoogleアプリを起動」するなど)があったと思いますが、その技術を拡張したものらしいです。

使った感想

パスキーの利用は現時点では微妙な印象でした。パスキーのコンセプトは認証に利用する鍵をアカウントと紐づけて、そのアカウントでログインしている端末であれば鍵を共有できる、ってところが大きなポイントだと思っていますが、「鍵はデバイス間で共有されさまざまなデバイスから利用できると組織として困る」と思う方もいると思います。

なんとOktaではPasskeyの利用をブロックする仕組みがありました!
https://help.okta.com/en-us/Content/Topics/Security/mfa-webauthn.htm

Okta Help Center

また、プラットフォーマ(Google、Apple、Microsoft)間でのパスキー相互利用の問題などはこれから決まってくると思うので、現時点でパスキーを積極的に利用するモチベーションはないです・・・まだまだ仕様も変更になるようですし、時期尚早かなと思いました。

今回の検証でFIDOデバイスとしてWindows Hello/Apple FaceID/Apple TouchIDが利用できれば、パスキーを利用しなくてもしばらくは良いと感じました。

■参考資料
【Apple社サポートページ:iPhoneでパスキーを使ってサインインする】
https://support.apple.com/ja-jp/guide/iphone/iphf538ea8d0/ios

【Add registration/authentication extensions for cloud-assisted BLE #909】
https://github.com/w3c/webauthn/pull/909