規格 · FIDO CTAP 2.2ハイブリッド(パスキーQR)

このパスキーサインインQRをスキャンしても安全か?

あなた自身がQRを表示しているデバイスでパスキーサインインを開始した場合のみ安全です。他の誰かがQRを生成した場合(見知らぬ人、「ヘルプデスク」担当者、テクニカルサポートの電話など)、スマートフォンでスキャンすると、あなたのアカウントにその人がサインインされてしまいます。プロトコルのオープン規格(FIDO CTAP 2.2ハイブリッド)は堅固です。脅威は「サインイン」ボタンを最初に押したのが誰かという、社会工学的な問題です。

パスキーQRを確認する → すべての規格 →

クロスデバイスパスキーサインインの仕組み

パスキーは認証情報、つまり公開鍵/秘密鍵のペアで、あなたのデバイスのひとつに紐付けられています。スマートフォンでexample.comのパスキーを登録した場合、example.comのログインチャレンジに署名できるのはあなたのスマートフォンだけです。

スマートフォンでサインインする場合は問題ありません。しかし、そのサイトのパスキーを持っていないラップトップでサインインしようとするとどうなるでしょうか?選択肢は:

  1. パスワードを入力する、パスキーの意義を完全に否定します。
  2. ラップトップに新しいパスキーを登録する、このラップトップを長期的に信頼できる場合は問題ありません。
  3. クロスデバイス転送でスマートフォンのパスキーを使用する、ラップトップがQRを表示し、スマートフォンがスキャンし、スマートフォンがチャレンジに署名し、ラップトップのブラウザが結果を受け取ってサインインが完了します。

オプション3がFIDO CTAP 2.2「ハイブリッド」が定義していることです。QRはブートストラップであり、スマートフォンがBluetoothローエナジーを介してラップトップを発見し、ワンタイムセキュアトンネルを確立し、WebAuthn処理をプロキシするために必要な情報を含んでいます。

QRの中身

URIは次のようになります:

FIDO:/0123456789012345678901234567890123456789...

10進数はCBORマップのbase10エンコーディングです。base10デコード + CBORパース後、マップには整数キーがあります:

キー0: ピア公開鍵

非圧縮X9.62公開鍵バイト(P-256の場合33バイト)。スマートフォンはこれを使って暗号化トンネルを確立します。

キー1: QRシークレット / トンネルノンス

10バイトのランダムデータ。この特定のQRを識別します。BLEアドバタイズメントはそのハッシュをブロードキャストするので、スマートフォンが正しいラップトップを見つけられます。

キー2: 操作ヒント

0 = make-credential(新しいパスキーの登録)、1 = get-assertion(サインイン)、2 = discoverable-credential。

キー3: トンネルサーバードメイン

直接BLEが届かない場合(NATなど)に2デバイス間のトンネルをプロキシするHTTPSホスト。通常はベンダーが運営するサーバー(Googleのcable.ua5v.comやApple/MSのcable.auth.comなど)です。

キー4: タイムスタンプ

QRが生成されたときのエポックからの秒数。リプレイ保護に使用されます。スマートフォンは数分以上古いQRの処理を拒否します。

キー5: 状態支援フラグ

ブール値。ラップトップがスマートフォンにパッシブ状態管理への参加を求めているかどうかを示します(主に資格情報列挙フローに関連)。

脅威モデル:「パスキーでサインイン」を最初に押したのは誰か?

プロトコルは暗号学的に堅固です。Bluetooth近接チェックは本物で、攻撃を物理的に近くにいる人に限定します。では、どこで問題が起きるのでしょうか?

開始の段階での社会工学的な操作によって。攻撃者はあなたのアカウントへのパスキーサインインを自分のラップトップで開始します。そのラップトップにFIDO QRが表示されます。攻撃者はそのQRを何らかの形であなたの前に提示します:

スキャンすると、スマートフォンはあなたのパスキー署名を攻撃者のラップトップのブラウザにプロキシします。あなたがパスキーを持っているサイトは、あなたがサインインしたと判断します。攻撃者はあなたのアカウントにログインしています。

近接チェックは役立ちません。攻撃者が物理的にそこにいます。QRの内容も役立ちません。暗号的に有効です。ログイン先も役立ちません。あなたがパスキーを持っている正しいサイトです。唯一役立つのは状況を認識することです:自分のデバイスで「サインイン」をクリックして生成したFIDO QR以外は絶対にスキャンしてはいけません。

当スキャナーが表示する情報

FIDOのQRを当スキャナーにドロップすると、判定に表示されます:

脅威クラスは常にsuspicious(疑わしい)です。プロトコルが壊れているからではなく、安全性の判断は状況によって異なり、スキャナーは誰が「サインイン」を押したかを知ることができないためです。判定の開示には正確にこう記されています:「スキャンすると、別のデバイスで誰かが開始したサインインが完了します。自分でログインを開始していない場合は拒否してください。」

安全な場合(と安全でない場合)

安全:ラップトップに座り、銀行やメールサイトを開き、「パスキーでサインイン」をクリックし、ラップトップがQRを表示した。スマートフォンを手に取り、QRをスキャンし、近接プロンプトを承認。完了。

安全でない:あなた以外の誰かがサインインを開始した場合。電話越しの誰か、リモートサポート通話の誰か、QRをメールで送ってきた誰か、「本人確認のためのQR」を見せた誰か、そして自分の新しく表示したデバイス以外の場所にあるQRすべてが該当します。

QRが自分でサインインを開始したものかどうかわからない場合は、元のデバイスでサインインをキャンセル(ブラウザタブを閉じる)し、意図したデバイスで最初からやり直してください。本物のFIDO QRは約10分間しか有効ではありません。やり直すと進行中のセッションがフラッシュされ、脅威は不可能になります。

関連情報

FIDOのQRを検査する

画像をドロップするかFIDO: URIを貼り付けてください。判定には操作、トンネルサーバー、タイムスタンプが表示され、自分でサインインを開始しない限り拒否するよう強く警告します。

スキャナーを開く →