1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【セキュリティ】Passkey(パスキー)とは

Posted at

はじめに

近年、セキュリティ業界の「最近の推しメン」といえば Passkey(パスキー)
Apple・Google・Microsoft の三巨頭が揃って推していることから、
パスワードはもう古代遺跡
と言われる時代が到来しようとしている。


1. Passkey とは何か?

Passkey とは、

公開鍵暗号(Public Key Cryptography)を使った、パスワード不要の認証方式。

FIDO2(WebAuthn + CTAP)の標準に基づき、
以下の特徴を持つ:

  • パスワードを使わない
  • 秘密鍵は端末に残る(サーバに送らない)
  • 生体認証(Face ID / Touch ID / Windows Hello)で解錠
  • フィッシング不可能
  • 漏洩耐性が非常に高い

もう一歩踏み込むと:

サーバには 公開鍵だけ を保存し、ログイン時は
「秘密鍵で署名されたチャレンジを公開鍵で検証」
して本人確認する仕組み。


2. パスキーの基礎:公開鍵暗号(超簡単版)

Passkey の核心はこれ一つだけ:

秘密鍵(private key)で署名したものは、対応する公開鍵(public key)でしか検証できない。

秘密鍵は端末内から出ないため、
漏洩のリスクがほぼゼロになる。


3. Passkey 登録フロー(図解)

ユーザー登録(MakeCredential)
---------------------------------------
1. クライアントが秘密鍵・公開鍵を生成
2. 公開鍵をサーバへ送信
3. サーバは公開鍵を保存

概念図:

[Client] 生成 → (publicKey, privateKey)
   ↓  publicKey を送信
[Server] 公開鍵をDBに保存

秘密鍵は端末内に固定化(Secure Enclave / TPM / Keystore)


4. Passkey 認証フロー(図解)

ログイン(GetAssertion)
---------------------------------------
1. サーバ → challenge(ランダム文字列)送信
2. クライアントは秘密鍵で challenge + authenticatorData を署名
3. サーバが公開鍵で署名を検証
4. OK → ログイン成功

図:

[Server] --- challenge ---> [Client]

Client:
  署名 = Sign(privateKey, challenge + authenticatorData)

[Client] --- 署名 + AuthData ---> [Server]

Server:
  Verify(publicKey, 署名)
-----------------------------------
OK → 認証成功

5. Passkey のタイプ:同期型 vs 端末限定型

① 同期型(Sync Passkey)

Apple / Google / Microsoft が
クラウドに end-to-end で暗号化して同期するタイプ。

プラットフォーム 同期先
Apple iCloud Keychain
Google Google Password Manager
Microsoft Microsoft Cloud (Entra)

メリット:

  • 新デバイスに即復元
  • 同一アカウント間でシームレス
  • 使い勝手最強

デメリット:

  • アカウントロックで詰む
  • エンタープライズ用途では好まれない場合あり

② 端末限定(Device-bound Passkey)

秘密鍵が端末専用。同期しない

例:

  • YubiKey
  • Windows Hello のローカルキー
  • Android ローカル Passkey

メリット

  • 企業ポリシー的に強固
  • クラウドに出ない

デメリット

  • 壊れたら復旧不可(設計通り)

6. クロスデバイス Passkey(UX の革命)

Apple の Passkey → Android ログイン
Android → Mac
Windows → iPhone

全部可能。

仕組み:

  • Bluetooth の近接確認
  • QR コードによる暗号化チャネル
  • CTAP 2.2 の Hybrid フロー

※ 同期ではなく “一時認証”


7. サーバ側で何を検証しているか?(技術者向け)

サーバは 署名だけを検証しているわけではない
実は多項目チェック。

1. 署名検証(ECDSA / ES256)

Verify(publicKey, challenge + authenticatorData, signature)

2. RP ID のハッシュチェック

  • example.com の鍵を evil.com で使うのを防ぐ

3. Challenge がサーバのものと一致?

4. User Presence(UP)

ユーザーがタップしたか?

5. User Verification(UV)

生体認証したか?

6. Sign Count(counter)

クローン防止
(偽造端末が同じ key を使って連続ログインすると検出)


8. Passkey が強い理由(攻撃モデル視点)

Passkey により以下の攻撃がすべて無効化される:

攻撃手法 Passkey の防御
パスワード漏洩 そもそもパスワードがない
キーロガー 秘密鍵は打たない・送らない
フィッシング domain binding により不可能
認証情報再利用 秘密鍵がサイトごとに異なる
ブルートフォース 無意味
中間者攻撃(MITM) サーバの challenge が検証される

Passkey は、“攻撃者の商売を根こそぎ潰す存在”。


9. Passkey の弱点

Passkey = 完璧ではない。

アカウントロック問題(同期型)

Apple ID/Google アカウント失効 →
全部失う
(これは重大)

デバイス紛失時の復旧 UX が未成熟

  • iCloud Keychain で E2EE 有効化が必要
  • Windows の復旧は企業依存

企業のゼロトラスト構成だと“管理”が複雑

  • device-bound をどう配布?
  • ローテーションどうする?
  • バックアップポリシーは?

10. Passkey の実装(WebAuthn API 基礎コード)

登録(create)

const cred = await navigator.credentials.create({
  publicKey: {
    challenge: serverChallenge,
    rp: { name: "Example Inc." },
    user: {
      id: userIdBuffer,
      name: "test",
      displayName: "Test User"
    },
    pubKeyCredParams: [{ type: "public-key", alg: -7 }],
    authenticatorSelection: {
      authenticatorAttachment: "platform"
    }
  }
});

認証(get)

const assertion = await navigator.credentials.get({
  publicKey: {
    challenge: serverChallenge,
    allowCredentials: [{
      id: credentialIdBuffer,
      type: "public-key"
    }]
  }
});

11. エンタープライズ導入のポイント

項目 注意点
デバイス紐付け device-bound を優先?
復旧ポリシー Sync だけに依存しない
認証器管理 FIDO2 キー管理が必要
プライバシー 生体情報は送らない
監査 SignCount の取り扱い

12. Passkey の未来

  • ブラウザ互換性はほぼ完成
  • 銀行・保険・通信キャリアも採用開始
  • OAuth + Passkey の併用が主流に
  • メール+SMSコードは淘汰予定

認証基盤のスタンダードになるのは確実。


まとめ

Passkey は単なる“便利ログイン”ではなく:

  • 秘密鍵は端末から出ない
  • サーバには公開鍵だけ
  • フィッシング不能
  • パスワード破り不可
  • 同期型で UX 最強

という パスワードの弱点を根こそぎ潰す仕組みです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?