MS_MicrosoftPassport - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki

Microsoft Passport

概要

Microsoft Passport(旧 Next Generation Credential)

  • ID + パスワードの枠を超えた、Windows 10 のより強固な
    公開鍵暗号(PKI)ビルトイン サービス
  • Windows 10 だけでなく Web サービスへも、
    「PIN コード / 生体認証」を使用してサインインできる。
  • Windows 10 で以下を行うと有効になる。
    • Microsoft アカウントでセットアップ
    • Azure AD 参加を「組織アカウント」
      (Windows 10 では「職場または学校アカウント」)でセットアップ

移行メモ(名称の変遷): この製品名は何度も変わっており、
現在「Microsoft Passport」という呼称は使われていない。

時期 名称
〜2015 Next Generation Credential(開発名)
2015 Microsoft Passport
2016〜 Windows Hello for Business に統合・改称

さらに紛らわしいことに、1999年頃の「Microsoft Passport」
(後の Windows Live ID → Microsoft アカウント)とは別物である。
同じ名前が全く違う技術に再利用されたため、
検索時に混同しやすい点に注意が要る。

現在の呼称と対応は次のとおり。

本ページの用語 現在
Microsoft Passport Windows Hello for Business(の鍵管理部分)
Windows Hello Windows Hello(生体認証の UI 部分)

認証の仕組み

2 要素認証

  • デバイスに関連付けられたキーまたは証明書と、
  • ユーザが知っているもの(PIN コード)、
    またはユーザを示すもの(生体認証情報

PINコード

  • 4 桁以上の PIN コードでサインインできるようになった。
  • 「PIN コード」と「デバイス」をひも付けることで
    単純なパスワードよりも強固なセキュリティを実現している。
    • PIN コードを生成する際に、秘密鍵がデバイス側に登録される
    • サービスの登録時に、公開鍵がサービス側に登録され
    • サービスへのログイン時に、
      • クライアント側の PIN コードで秘密鍵によるアサーション生成が行われ、
      • サーバー側で公開鍵によるアサーション検証が行われる。
  • アカウント ロックアウト後、ユーザーは PIN をリセットする必要がある。
    PIN をリセットすると、キーと証明書は削除される。

補足(「PIN は 4 桁でも安全」の根拠): 直感に反するが、
PIN はパスワードより安全である。理由は次の 2 点に尽きる。

パスワード PIN
通用する範囲 どの端末からでも使える その端末でしか使えない(ローカル)
送信されるか ネットワークを流れる(漏洩しうる) 端末外に出ない
総当たり サーバー側で試行可能 TPMがロックアウトする

つまり PIN は**「秘密鍵を取り出すための鍵」であって、
認証情報そのものではない。
漏れても
その物理デバイスが無ければ意味が無い**(所有要素との組み合わせ)。

これが「4 桁で足りる」理由であり、
FIDOWebAuthnと同じ設計思想である。

生体認証

  • Windows Helloの生体認証のための前提システムとしても機能する。
  • このため、Windows Hello を利用するには、PIN を設定しておく必要がある
    • [設定]→[アカウント]→[サインイン オプション]
    • [暗証番号(PIN)]の[追加]で PIN を設定
    • 生体認証デバイスが認識されていれば[Windows Hello]の[セットアップ]が表示される

補足(生体情報は送信されない): 誤解が多い点だが、
指紋や顔のデータがサーバーに送られることは無い

生体認証 → [端末内で照合] → OK なら TPM 内の秘密鍵を使わせる
                             → 署名(アサーション)を作る
                             → 署名だけがサーバーへ

生体情報は TPM / セキュア領域に留まり
ネットワークに出ない。
PIN も生体認証も「秘密鍵を解錠する手段」という点では同じ役割である。

キーまたは証明書

キー(ハードウェアまたはソフトウェア)またはキーを含む証明書を、
ハードウェアまたはソフトウェアで使ってデバイスの身元を確認できる。

方式 内容
証明書ベース PKIを保有している企業は、引き続き PKI と組み合わせて使用できる
キー ベース PKI を使わない、または証明書管理の負荷を避けたい企業向け
  • キー ベースの資格情報
    • TPMによって生成されるハードウェア ベースのキー
    • ソフトウェア ベースのキー(TPM を利用できない場合のフォールバック)

キーペアの生成タイミング

  • AIKTPMの Attestation Identity Key):
    Windows Helloをセットアップしたタイミングだと思われる。
  • 署名用のキーペア:
    KeyCredentialManager.RequestCreateAsync 実行時に、
    AIK を使用した追加の署名用のキーペアが発行されるものと思われる。

キーストアの分離

Microsoft Passport は、公開鍵暗号(PKI)ビルトイン サービスである。
このキーストアは以下のように分離される。

単位 内容
ユーザ ユーザー毎に別のキーストアを持つ
アプリ さらにアプリ毎にコンテナが分割される。Web の場合はドメイン毎
keyName ユーザアカウント名を使用するのが慣例である模様

補足(ドメイン毎の分離がフィッシング耐性になる): 「Web の場合は
ドメイン毎にコンテナが分割される」という性質が決定的に重要である。

  • bank.example.com 用の鍵は、bank-example.evil.com からは使えない
  • ブラウザ(OS)がオリジンを機械的に判定するため、
    ユーザーが見間違えても関係ない。

パスワードは「ユーザーが URL を見て判断する」しかなく、
だからフィッシングが成立する。
WebAuthn構造的にフィッシング耐性を持つ
言われるのは、この仕組みによる。

そういうことで、Microsoft Passport は、

  • FIDO 1.0(UAF)のデバイス(Windows)側の実装に近いものであって、
  • 且つ、この PKI は、FIDO 1.0(U2F)や FIDO 2.0 でも利用可能。
  • これにより、サービスへのログインに「PIN コード / 生体認証」を
    使用できるようになる。

という、FIDO との関係を持っている。

API

種別 API
Native Windows.Security.Credentials
KeyCredential / KeyCredentialManager / KeyCredentialAttestationResult / UserConsentVerifier
Web Web Authentication API

移行メモ(最新化:FIDO2 認定を取得した): 本ページ執筆時は
「FIDO に近いもの」という位置づけだったが、
Windows Hello は 2019年に FIDO2 認定を取得している。

現在
Windows Hello FIDO2 認定のプラットフォーム認証器
使える場面 WebAuthn 対応サイト全般(Google / Microsoft / GitHub 等)
パスキー Windows 11 では**パスキー(Passkey)**として同期・管理される

つまり「Windows 独自の仕組み」から
**「標準規格の一実装」**へと位置づけが変わった。
独自 API(Windows.Security.Credentials)ではなく、
WebAuthn を使えば同じことができる
というのが現在の実装指針である。

SSO

Active Directory、Microsoft アカウント、
Azure AD(組織アカウント)との統合も可能。

  • Windows Hello for Business
    • 「PIN コード / 生体認証」経由で対応サービスへの横断的なアクセスが可能。
    • 企業でのセキュリティ強化や運用バリエーションのオプションが複数用意。
    • Windows Hello 以外にも IC チップを内蔵したスマートカードの利用
  • Web Account Manager API(WebAccountManager API)などを使用するらしい。

参考

Microsoft Learn


Tags: 移行, Windows, 認証基盤, セキュリティ, FIDO, 生体認証

⚠️ **GitHub.com Fallback** ⚠️