Windowsでパスキーを作るとき、
iPhoneやAndroidと何が違うのか

Googleアカウントにログインすると、「パスキーを作成しますか」という画面が表示されることがあります。

<svg class="eyecatch-svg" viewBox="0 0 192 192" xmlns="http://www.w3.org/2000/svg">
  <!-- 白背景 -->
  <rect width="192" height="192" rx="32" ry="32" fill="white"/>

  <!-- シールド -->
  <path d="M96,18 L154,46 L154,108 Q154,154 96,172 Q38,154 38,108 L38,46 Z" fill="#1565C0"/>

  <!-- 鍵リング(外) -->
  <circle cx="96" cy="80" r="23" fill="white"/>
  <!-- 鍵リング(穴) -->
  <circle cx="96" cy="80" r="11" fill="#1565C0"/>

  <!-- 鍵シャフト -->
  <rect x="90" y="98" width="12" height="50" rx="4" fill="white"/>

  <!-- 鍵の歯 -->
  <rect x="102" y="107" width="12" height="9" rx="3" fill="white"/>
  <rect x="102" y="122" width="14" height="9" rx="3" fill="white"/>
</svg>Windowsでパスキーを作るとき、<br class="chiilabo-br is-on">iPhoneやAndroidと何が違うのか

パスキー(Passkey)という言葉は聞いたことがあっても、スマートフォンで作る場合とWindowsで作る場合に何が違うのか、意識している人は少ないかもしれません。
暗号方式の基本は同じですが、秘密鍵の保存先と同期の有無がプラットフォームごとに異なります。

関連記事

1. パスキーの基本的な仕組み

1. パスキーの基本的な仕組み

パスキーは公開鍵暗号(Public-Key Cryptography)を使って本人確認する仕組みです。
登録時にデバイス側で「秘密鍵」と「公開鍵」のペアが生成され、公開鍵だけがGoogleのサーバーに登録されます。

ログイン時、Googleはチャレンジ(Challenge:一度きりの確認用データ)を送ります。
デバイスが秘密鍵でそのデータに署名し、Googleが公開鍵で検証することでログインが成立します。
パスワード自体はネットワークを流れないため、フィッシングで情報が盗まれるリスクを根本的に回避できます1

この仕組みはFIDO2(Fast IDentity Online:オンライン認証の標準規格)とWebAuthn(Web Authentication:ブラウザから公開鍵認証を使うための標準API)で定義されており、iPhoneでもAndroidでもWindowsでも同じ規格が使われています2
違いは「秘密鍵をどこに保存し、何でロックを解除するか」です。

1.1. Windowsでのパスキー作成フロー

1.1. Windowsでのパスキー作成フロー

Windowsでパスキーを作るとき、主役はChromeではなくWindows Helloです。
Windows HelloはWindowsのPINや顔認証・指紋認証を管理するローカル認証機構で、FIDO2 / WebAuthn標準に対応しています3

技術的な流れを順番に見ると、まずGoogleがChromeに対して「このアカウント用の鍵ペアを作ってください」とWebAuthnの navigator.credentials.create() を通じて要求します。
ChromeはそれをWindowsのWebAuthn Platform APIに渡します。
Windows 10 version 1903以降でこのAPIが使えるようになっています4

Windows Helloが起動し、PINや生体認証でユーザーを確認します。
ここで入力するWindowsのPINはGoogleには届きません。
「このPCの正当な利用者か」をWindowsがローカルで確認するためだけに使われます。
確認が通ると、Windows側でGoogleアカウント用の鍵ペアが生成され、秘密鍵はPC内に保存され、公開鍵だけがGoogleに登録されます。

2. パスキーの保存先

2. パスキーの保存先

2.1. Windowsでの保存先は2系統ある

2.1. Windowsでの保存先は2系統ある

Windowsでのパスキー保存先には、現在のところ大きく2種類があります。

ひとつは、Windows Helloにローカル保存する方式です。
秘密鍵はTPM(Trusted Platform Module:改ざん耐性のある専用セキュリティチップ)に保存され、そのPCの外に出ることはありません5
PCを買い替えた場合は、新しいPCで改めてパスキーを作成する必要があります。
Googleのパスキー作成画面に「Windows PIN または生体認証データ」と書かれている場合、少なくともロック解除はWindows Helloが担います。

もうひとつは、Google Password Managerに同期保存する方式です。
最近のChromeでは、Windows上でもGoogle Password Managerにパスキーをエンドツーエンド暗号化した状態で保存できます。
別のChrome環境でも同じパスキーが使えるようになります。
初回設定時に「Google Password Manager PIN」の作成を求められる場合は、こちらの方式です6

実際にどちらになるかは、作成を進めたときに表示される「保存先」の名称を確認するのが確実です。

2.2. iPhoneとAndroidはどうなっているか

2.2. iPhoneとAndroidはどうなっているか

iPhoneでは、パスキーはiCloud Keychain(iCloudキーチェーン:Appleの資格情報同期機能)に保存されます。
Face IDまたはTouch IDでロックを解除し、エンドツーエンド暗号化されたままAppleデバイス間で自動的に同期されます。
Apple自身もiCloud Keychainの中身を読めないとされています7

Androidでは、パスキーはGoogle Password Managerに保存され、Googleアカウントを通じて同期されます。
こちらもエンドツーエンド暗号化されており、同じGoogleアカウントを使うAndroidデバイス間で利用できます8

プラットフォームを並べると次のようになります。

iPhoneAndroidWindows(Windows Hello)Windows(Google PM)
ロック解除Face ID / Touch ID指紋・顔・PINWindows PIN / 生体認証Windows PIN / 生体認証
保存先iCloud KeychainGoogle Password ManagerTPM(デバイスローカル)Google Password Manager
デバイス間同期Appleデバイス間Googleアカウント間しないChromeデバイス間

iPhoneとAndroidはいずれも「クラウドに暗号化して同期」が標準動作です。
Windows Hello(ローカル型)はデバイスに縛られる分、ネットワーク上に鍵が存在しないというシンプルな安心感があります。

3. 「自分のデバイスでだけ作成してください」の意味

3. 「自分のデバイスでだけ作成してください」の意味

Googleのパスキー作成画面に「これがご自分のデバイスである場合のみ、パスキーを作成してください」と書かれているのは、特にWindows Hello(ローカル型)の特性を踏まえた注意書きです。
秘密鍵がそのPCに紐づくため、他人も使えるPCに作ってしまうと、そのPCにアクセスできる人がWindowsのPINなどを知った時点でGoogleにログインできてしまいます。

共有PC、職場の共用端末、ネットカフェ、家族と共用しているPCでは作成しないほうが安全です9
パスキーを作成してもGoogleのパスワードが消えるわけではなく、ログイン方法が1つ追加されるだけです。

3.1. RP(リライングパーティー)という考え方

3.1. RP(リライングパーティー)という考え方

WebAuthnの仕様では、認証を受け取るサービス側をRP(Relying Party:認証を受ける側)と呼びます10
RPが受け取るのは「公開鍵」「資格情報ID」「チャレンジへの署名」だけです。
WindowsのPINや生体認証データ、秘密鍵そのものはGoogleに渡りません。
この分離がパスキーのセキュリティ設計の核心で、サービス側がどれだけ情報漏えいしても、秘密鍵はデバイスの外に出ないため悪用できません。

パスキーは「どのデバイスで作るか」「どこに保存されるか」を把握してから使い始めると、PCを買い替えたときの混乱や、意図せず共有端末に鍵を残してしまう失敗を防げます。
Googleのパスキー作成画面で「次へ」を押す前に、保存先の名称を確認する習慣をつけておくと安心です。

  1. パスキーは特定のWebサイトやアプリのIDに紐づくため、ブラウザとOSが正規サイトでのみ使えることを保証する。フィッシングサイトに誘導されても、ドメインが異なるためパスキーは機能しない – Passkeys | Google for Developers
  2. WebAuthn Level 3はW3Cが策定した仕様で、ブラウザが公開鍵資格情報の作成・取得を行うAPIを定義する。パスキーはこの仕様に基づいて実装されており、プラットフォームを問わず共通のプロトコルで動作する – Web Authentication: An API for accessing Public Key Credentials – Level 3
  3. MicrosoftはWindows 10 version 1903のリリース時にFIDO Allianceから認定を受け、Windows HelloはFIDO2認定のプラットフォームオーセンティケーターとなった。このタイミングで、ブラウザからWindows Helloを経由したWebAuthn認証が公式に利用可能になった – Windows Hello FIDO2 certification gets you closer to passwordless | Microsoft Community Hub
  4. MicrosoftはW3C/FIDO2のWin32 WebAuthn Platform APIをWindows 10 version 1903で導入した。Windows 11 version 22H2以降ではECCアルゴリズムのサポートも追加されており、version 24H2ではプラグイン型のパスキーマネージャーにも対応している – WebAuthn APIs for passwordless authentication on Windows | Microsoft Learn
  5. Windows HelloでパスキーをTPMに保存した場合、秘密鍵はデバイスのハードウェア内に固定されクラウドへは同期されない。PCを買い替えた際には新しいデバイスで改めてパスキーを作成し直す必要がある – Where are passkeys stored on my machine? – Microsoft Q&A
  6. Google Password Manager PINはパスキーをエンドツーエンド暗号化するための追加レイヤーで、GoogleはこのPINの内容を知ることができない設計になっている。WindowsやmacOS、Linux上のChromeで初めてパスキーを作成する際に設定が求められる – Chrome to sync passkeys on Google Password Manager between desktop and Android | Chrome for Developers
  7. iCloud KeychainはAppleが保有する鍵では解読できないエンドツーエンド暗号化を採用しており、AppleアカウントやiCloudが外部から攻撃を受けた場合も、パスキーの中身は保護される設計になっている – About the security of passkeys – Apple Support
  8. Google Password Managerに保存されたパスキーは、AndroidデバイスのスクリーンロックやGoogle Password Manager PINから派生したキーで暗号化されてクラウドに同期される。暗号化の管理にはTitan HSMが使われており、Googleも暗号化された資格情報の中身を読めない – Passkey support on Android and Chrome | Google for Developers
  9. Microsoftのサポートページでも、パスキーの保存先として「このWindowsデバイス」を選んだ場合はWindows Helloによりデバイスにローカル保存されると明記されており、端末を使える全員がアクセスできるリスクがある – Create and save a passkey | Microsoft Support
  10. W3CのWebAuthn仕様では、パスキーはそれを作成したRPのoriginでのみ使える制限がある。ブラウザとOSがこの制限を強制するため、別ドメインのフィッシングサイトでは同じパスキーが機能しない。これがパスキーのフィッシング耐性の技術的な根拠になっている – Web Authentication API – MDN Web Docs