🔑

パスキー認証入門: 次世代の安全なログイン方法を理解する

に公開

この記事は生成AIで作成されたものをベースに、投稿者が加筆修正をしたものになります。

はじめに

パスワードを使った認証は、私たちがインターネットを使う上で長年当たり前のものでした。しかし近年、「パスキー認証」という新しい認証方法が注目を集めています。
この記事では、認証技術に詳しくない方でも理解できるよう、パスキー認証とは何か、なぜ安全なのか、従来の認証方法とどう違うのかを、基礎から丁寧に解説します。

1. パスキー認証とは何か

パスキー認証とは、パスワードを使わずに、あなたのスマートフォンやパソコンを使ってログインする新しい方法です。

従来のログイン

  1. ユーザー名を入力
  2. パスワードを入力
  3. SMS認証コードを入力(多要素認証の場合)

パスキー認証でのログイン

  1. ログインボタンをタップ
  2. 指紋認証または顔認証
  3. 完了!

パスワードを覚える必要も、入力する必要もありません。それでいて、従来の方法よりはるかに安全なのです。

2. 従来の認証方法の問題点

なぜ新しい認証方法が必要なのでしょうか?従来の方法には、いくつもの問題がありました。

パスワード認証の弱点

覚えられない・管理できない

  • 安全なパスワードは複雑で覚えにくい
  • 複数のサービスで異なるパスワードを使うべき
  • 結果として、簡単なパスワードを使い回してしまう

盗まれる・漏れる

  • フィッシングサイトで入力してしまう
  • サービス側のデータベースから漏洩する
  • キーロガー(入力を記録するマルウェア)で盗まれる

多要素認証(MFA)でも不十分

パスワードに加えて、SMS認証コードやワンタイムパスワード(TOTP)を使う多要素認証も、完璧ではありません。

SMS認証の問題

  • SIMスワップ攻撃(電話番号の乗っ取り)
  • SMSの傍受
  • フィッシングサイトで入力してしまう

TOTP(Google Authenticatorなど)の問題

  • フィッシングサイトでコードを入力してしまう
  • リアルタイム攻撃で中継される
  • デバイス紛失時の復旧が困難

これらの問題を根本的に解決するのが、パスキー認証です。

3. 公開鍵暗号の基礎知識

パスキー認証を理解するには、「公開鍵暗号」という仕組みを知る必要があります。難しく聞こえるかもしれませんが、概念はシンプルです。

鍵のペア

公開鍵暗号では、2つで1組の鍵を使います。

秘密鍵(Private Key)

  • 自分だけが持つ
  • 絶対に他人に見せない
  • 「署名」を作るために使う

公開鍵(Public Key)

  • 誰に見せても良い
  • サービス側に登録する
  • 「署名」を確認するために使う

鍵と錠前の例え

従来のパスワード = 合鍵を共有

あなた: 「パスワードは"abc123"です」
サービス: 「わかりました。保管しておきます」

問題点:
- サービスが侵害されると、パスワードが漏れる
- フィッシングサイトにパスワードを教えてしまう

公開鍵暗号 = 特殊な錠前

あなた: 「この錠前(公開鍵)を渡します」
サービス: 「保管します」

ログイン時:
サービス: 「この箱に鍵をかけて送ってください」
あなた: (秘密鍵で鍵をかける)→ 送信
サービス: (公開鍵で確認)「本人ですね!」

利点:
- 秘密鍵は自分のデバイスから出ない
- サービスが侵害されても、公開鍵だけでは悪用できない
- フィッシングサイトに秘密鍵を渡すことはない

重要なポイント

公開鍵から秘密鍵は作れない

これが最も重要な特徴です。公開鍵を知っていても、秘密鍵を逆算することは、現代のコンピュータでは事実上不可能です(理論上は数百万年以上かかるほどの計算量になります)。

公開鍵が漏れても問題ない

名前の通り、公開鍵は「公開」されることを前提に設計されています。誰かが公開鍵を手に入れても、それだけではログインできません。

4. パスキー認証の仕組み

この章では、パスキーがどのように生成・保存・検証されるのかを、ステップごとに見ていきます。

初回登録(Registration)

サービスに初めてパスキーを登録するとき:

ステップ1: アカウント作成
あなた: 「example.comに登録したい」
サービス: 「わかりました」

ステップ2: パスキー作成
デバイス(自動的に):
- 秘密鍵と公開鍵のペアを生成
- 秘密鍵をセキュア領域に保存
- 公開鍵をサービスに送信

あなた: (指紋認証または顔認証で承認)

サービス:
- 公開鍵をデータベースに保存
- 登録完了!

このとき重要なのは、秘密鍵はあなたのデバイスから一歩も外に出ないということです。

ログイン時(Authentication)

次回ログインするとき:

ステップ1: ログインリクエスト
あなた: 「ログインしたい」
サービス: 「ランダムな文字列(チャレンジ)を送ります」
         例: "xyz789random"

ステップ2: 署名の作成
デバイス(自動的に):
- チャレンジを受け取る
- セキュア領域で秘密鍵を使って「署名」を作成
- 署名をサービスに送信

あなた: (指紋認証または顔認証で承認)

ステップ3: 検証
サービス:
- 保存している公開鍵で署名を検証
- 正しければログイン成功!

チャレンジ・レスポンス方式の利点

毎回異なる「チャレンジ」を使うことで:

  • リプレイ攻撃を防ぐ: 盗聴しても、同じ署名は二度と使えない
  • フィッシング耐性: 偽サイトでは異なるドメインが検出され、署名が失敗する

5. なぜパスキーは安全なのか

パスキー認証が従来の方法より優れている理由を、具体的に見ていきましょう。

フィッシング攻撃への高い耐性

従来の認証(パスワード・MFA)

悪意あるサイト: 「こちらで銀行にログインしてください」
            (本物そっくりの偽サイト)
あなた: パスワードとSMSコードを入力
攻撃者: すぐに本物のサイトで使用 → 乗っ取り成功

パスキー認証

悪意あるサイト: 「こちらでログインしてください」
デバイス: (自動的にドメインを確認)
         「このサイトは bank.com ではなく、
          bank-fake.com です」
         → 署名を拒否
あなた: ログインできない = 攻撃失敗

重要なのは、ユーザーがうっかり騙されても、デバイスが自動的に保護してくれるということです。

サーバー侵害への耐性

従来の認証(パスワード)

攻撃者がサービスのデータベースを盗む
  ↓
パスワードハッシュを入手
  ↓
ブルートフォース攻撃で解読
  ↓
ユーザーのアカウント乗っ取り

パスキー認証

攻撃者がサービスのデータベースを盗む
  ↓
公開鍵を入手
  ↓
公開鍵だけでは何もできない
  ↓
攻撃失敗

サーバーに保存されているのは公開鍵だけなので、漏洩しても悪用できません。

中間者攻撃への耐性

従来の認証(SMS、TOTP)

あなた → 攻撃者 → 本物のサービス
        (中継)

攻撃者が間に入ってコードを中継し、
リアルタイムでログインできてしまう

パスキー認証

署名には以下が含まれる:
- チャレンジ(毎回異なる)
- ドメイン名
- その他の検証情報

中継しても、検証で弾かれる

パスワード関連リスクの排除

パスキーではパスワードそのものが存在しないため:

  • ✅ パスワードの使い回しができない(そもそも存在しない)
  • ✅ 弱いパスワードを設定できない
  • ✅ パスワードを忘れることがない
  • ✅ キーロガーで盗まれない
  • ✅ ソーシャルエンジニアリングで聞き出されない

6. 多要素認証(MFA)との比較

「多要素認証を使っているから安全」と思っている方も多いでしょう。しかし、パスキーはさらに進化した仕組みです。

認証の「3要素」

セキュリティでは、認証に3つの要素があるとされています:

1. 知識要素(Something you know)
   例: パスワード、PIN

2. 所持要素(Something you have)
   例: スマホ、セキュリティキー

3. 生体要素(Something you are)
   例: 指紋、顔、虹彩

従来の多要素認証(MFA)

第1段階: パスワード入力(知識要素)
第2段階: SMSコード入力(所持要素)
または: TOTPコード入力(所持要素)

これでも2要素で、かなり安全です。しかし問題は:

  • ❌ 両方ともフィッシング可能
  • ❌ 2段階の手間がかかる
  • ❌ パスワードの問題は残る

パスキー認証

1回の認証で3要素を満たす:

所持要素: デバイスに保存された秘密鍵
生体要素: 指紋認証・顔認証
(知識要素: PIN も選択可能)

しかも:

  • ✅ フィッシング不可能
  • ✅ 1ステップで完了
  • ✅ パスワード不要

比較表

特徴 パスワード パスワード + MFA パスキー
フィッシング耐性
サーバー侵害への耐性
使いやすさ
パスワード管理 必要 必要 不要
デバイス紛失時影響 なし 影響あり 影響あり ※
認証にかかる時間 普通 長い 短い

※ 複数のパスキーを登録することで対策可能

7. デバイスと対応状況

「特別な機器が必要なのでは?」と思うかもしれませんが、実は今お使いのデバイスがすでに対応している可能性が高いです。

対応デバイス

スマートフォン

  • iPhone / iPad(iOS 16以降)
  • Android(Android 9以降)

パソコン

  • Mac(macOS Ventura以降)
  • Windows 10 / 11(Windows Hello対応)

ブラウザ

  • Chrome
  • Safari
  • Edge
  • Firefox

セキュア領域について

パスキーの秘密鍵は、デバイスの「セキュア領域」に保存されます。

iPhone / iPad

Secure Enclave(セキュアエンクレーブ)
- メインCPUとは物理的に分離された専用チップ
- Face ID、Touch IDのデータも同じ場所に保存
- 取り出すことが物理的に不可能な設計

Android

TEE(Trusted Execution Environment)
- ハードウェアレベルで保護された領域
- 指紋認証データも同じ場所に保存

Windows

TPM(Trusted Platform Module)
- セキュリティ専用のチップ
- 暗号化処理を安全に実行

重要な特徴

これらのセキュア領域は:

  1. 物理的に分離: メインメモリとは別の場所
  2. 暗号化: データは暗号化されて保存
  3. 取り出し不可: 秘密鍵をエクスポートする機能がない
  4. 認証必須: 使用時は生体認証またはPIN が必要

つまり、ハッキングソフトでも秘密鍵を盗み出すことはできないのです。

専用デバイスを使用する

より高いセキュリティが必要な場合、専用のセキュリティキーも使えます:

YubiKey、Titan Security Key など

  • USB接続またはNFC接続
  • 秘密鍵を物理デバイスに保存
  • 企業や重要アカウント向け

ただし、一般的な用途ではスマホやPCで十分です。

8. パスキーの移行と管理

「デバイスを買い替えたらどうなるの?」という疑問にお答えします。

クラウド同期型パスキー

最近のパスキーは、クラウド経由で同期できます。

Apple(iCloudキーチェーン)

iPhone で作成したパスキー
  ↓(自動同期)
iPad、Mac でも使える

Google(Googleパスワードマネージャー)

Androidスマホで作成したパスキー
  ↓(自動同期)
Chrome、別のAndroidでも使える

重要: 同期中もセキュリティは保たれます

  • 転送時は暗号化
  • エンドツーエンド暗号化(E2EE)
  • Google や Apple も中身を読めない

クラウド同期型パスキーのセキュリティリスク

クラウド同期型パスキーを使えば、どの端末でも同じようにログインできます。
この利便性の影には、同期アカウント(例:Apple ID、Google アカウント)乗っ取りによる事実上のパスキー漏洩リスクがあることを理解する必要があります。
利便性と安全性のバランスを取るために、同期アカウントの多要素認証・デバイス管理・信頼済みデバイス設定を確実に行うことが重要です。

デバイス専用パスキー

一部のパスキーは、特定のデバイス専用です:

Windows Hello のパスキー

  • そのPCでのみ使用可能
  • 買い替え時は再登録が必要

セキュリティキー(YubiKey)

  • 物理デバイスそのものを持ち運ぶ
  • 秘密鍵は取り出せない設計

推奨される運用方法

複数のパスキーを登録する

  • メインのパスキー: iPhone(同期型)
  • バックアップ1: Macにも自動同期
  • バックアップ2: セキュリティキー(紛失対策)

多くのサービスは、1つのアカウントに複数のパスキーを登録できます。これにより:

  • ✅ デバイス紛失時も別のデバイスでログイン可能
  • ✅ 機種変更してもスムーズに移行
  • ✅ 複数デバイスで使い分け可能

9. 認証の歴史と未来

パスキーは突然現れたわけではありません。長い歴史と技術の積み重ねがあります。

なぜ今まで普及しなかったのか

実は公開鍵暗号を使った認証自体は、1990年代から存在していました。

過去の試み: クライアント証明書

問題点:
- 証明書の管理が複雑
- 専門知識が必要
- ユーザーエクスペリエンスが悪い
- ブラウザごとに異なる実装

過去の試み: スマートカード

問題点:
- 専用のカードリーダーが必要
- コストが高い
- 企業や政府機関でしか使われなかった

何が変わったのか

2010年代の変化

  1. ハードウェアの進化
    • ほぼ全てのスマホに Secure Enclave 搭載
    • 生体認証センサーが標準装備
    • 専用デバイス不要に
  2. 標準化の完成
    • 2013年: FIDO Alliance 設立
    • 2019年: WebAuthn が W3C 標準に
    • ブラウザAPIで統一的に実装可能に
  3. エコシステムの協調
    • Apple、Google、Microsoft が共同で推進
    • 2022年: 3社が共同声明
    • 各社のOSで一斉対応
  4. ユーザー体験の改善
    • 過去: 証明書ダウンロード → インストール → 設定
    • 現在: 指紋認証1回で完了

パスキーとマイナンバーカードの関係

日本では、マイナンバーカードも電子署名機能を持っています。

マイナンバーカードの仕組み

  • ICチップに秘密鍵を保存
  • 公開鍵は証明書として配布
  • 行政手続きでの電子署名に使用

パスキーとの違い

  • マイナンバーカード:

    • JPKI(公的個人認証)規格
    • 中央集権型(J-LISが管理)
    • 行政サービス向け
    • カードリーダーまたは専用アプリが必要
  • パスキー:

    • FIDO2/WebAuthn 標準
    • 分散型(各サービスが管理)
    • 一般Webサービス向け
    • ブラウザだけで使える
  • 現状: マイナンバーカードで直接パスキー認証はできません

  • 将来: スマホ搭載マイナンバーが普及すれば、WebAuthn 対応の可能性もあります

これからの認証

短期(2025〜2027年)

  • パスワード + MFA が主流
  • パスキーはオプションとして追加
  • 大手サービスから導入開始

中期(2027〜2030年)

  • パスキーがデフォルトに
  • パスワードはフォールバックとして残る
  • 多くのサービスで対応

長期(2030年以降)

  • パスキーが標準認証方法に
  • パスワードのみ認証は廃止
  • レガシーシステムでのみ MFA が残る

完全に置き換わる?

おそらく**完全には置き換わりません。**理由は:

  • レガシーシステムとの互換性
  • 特定の規制要件
  • フォールバック・バックアップの必要性
  • 全てのユーザーがデバイスを持つわけではない

しかし、新しいシステムではパスキーが第一選択になるでしょう。

10. パスキー認証フロー

実際にパスキー認証を実装する際の基本的なフローを紹介します。

WebAuthn API について

パスキー認証は WebAuthn(Web Authentication)API という Web標準を使って実装します。主要なブラウザすべてが対応しており、JavaScriptから呼び出すことができます。

SimpleWebAuthn ライブラリの推奨

WebAuthn API を使用して手動実装することも可能ですが、必要な実装が多く複雑なため、実際の開発ではWeb標準をラップしたSimpleWebAuthn ライブラリの使用を推奨します。

手動実装との比較:

項目 手動実装 SimpleWebAuthn
Base64変換 手動でコード実装 自動処理
チャレンジ生成 自前の実装 generateXxxOptions()
検証処理 各検証を個別実装 verifyXxxResponse()
エラーハンドリング 細かい実装が必要 統一されたエラー形式
セキュリティ設定 自分で調査・設定 セキュアなデフォルト
TypeScript型定義 自作が必要 完全な型サポート

パスキー登録フロー(Registration)

パスキー認証フロー(Authentication/Login)

実装のポイント

セキュリティ上の重要事項として以下の処理実装が推奨されます:

  1. チャレンジ(Challenge)
    • ランダムに生成される32バイトの値
    • リプレイ攻撃を防ぐための使い捨てトークン
    • 1回のみ有効で、使用後は無効化
  2. Origin(オリジン)検証
    • リクエスト元のドメインを検証
    • フィッシング攻撃を防ぐ重要な仕組み
  3. カウンター値のチェック
    • 認証器の使用回数を記録
    • 値が減少した場合はクローンやリプレイ攻撃を疑う

11. まとめ

パスキー認証の本質

パスキー認証とは:

  • ✅ パスワード不要
  • ✅ デバイスの秘密鍵で認証
  • ✅ 生体認証で本人確認
  • ✅ フィッシング不可能
  • ✅ サーバー侵害にも強い
  • ✅ 使いやすい

なぜ安全なのか

3つの重要な原則

  1. 秘密鍵はデバイスから出ない
    • セキュア領域に保存
    • 取り出し不可能
    • ネットワーク経由で盗めない
  2. 公開鍵暗号の数学的安全性
    • 公開鍵から秘密鍵は作れない
    • サーバー侵害されても悪用不可
    • 盗聴されても意味がない
  3. ドメイン検証の自動化
    • フィッシングサイトでは動作しない
    • ユーザーが騙されてもデバイスが守る
    • 中間者攻撃も防ぐ

従来の認証との比較

パスワード パスワード + MFA パスキー
安全性
使いやすさ
フィッシング耐性 なし 弱い 強い
サーバー侵害への耐性 なし 弱い 強い
管理の手間

誰が使えるのか

必要なもの

  • スマートフォンまたはパソコン(最近のもの)
  • 指紋認証または顔認証機能
  • 対応ブラウザ

特別な知識は不要

  • 難しい設定は不要
  • デバイスが自動で処理
  • ユーザーは生体認証するだけ

パスキー認証を実装するには

  • WebAuthn API の学習
  • SimpleWebAuthn などのライブラリの学習
  • セキュリティ上の重要事項の学習

最後に

パスキー認証は、インターネットの安全性を大きく向上させる技術です。
セキュリティと利便性の両立という、今まで難しかった課題を、ついに解決できる可能性を持っています。
パスワードを覚える苦労から解放され、フィッシング詐欺の心配も不要になる未来が、すぐそこまで来ています。
ぜひ、パスキー対応のサービスを見つけたら、一度試してみてください。その使いやすさと安全性に、きっと驚くはずです。

参考資料

Discussion