ハネソル株式会社
パスキーの仕組みと構造全部わかる基礎解説

パスキーの仕組みを正しく本質から理解しよう

本ページは、パスキー(Passkey)の仕組みを初学者でも理解できる順序で整理した技術解説です。本質(なぜ安全なのか/なぜ運用が楽になるのか)を中心に説明します。

1. パスキーとは何か?

1-1. パスキーとは一言でいうと何か

パスキー(Passkey)とは、パスワードを使わずに、安全かつ簡単にログインするための新しい認証方式です。

従来のログインでは、ユーザーが「覚えた文字列(ID・パスワード)」を入力し、サービス側がその文字列を照合する、という仕組みが一般的でした。

一方、パスキーでは次のように発想が変わります。

  • ユーザーが何かを覚える必要はありません
  • サービス側に秘密情報を預ける必要もありません
  • ユーザーは「ログイン」ではなく「本人であることの確認」を行います

つまりパスキーは、

「知っているもの」で本人確認する仕組みから、「持っているデバイスで本人確認する仕組み」への転換を実現する技術です。

パスワード認証とパスキー認証の違い(概念図)

1-2. パスワード認証・OTP認証との違い

パスワード認証の課題

パスワード認証は長年使われてきましたが、構造的な弱点を抱えています。

  1. パスワードは人が覚える必要がある
  2. 同じパスワードを複数サービスで使い回してしまう
  3. フィッシングサイトに入力してしまう可能性がある
  4. サービス側がパスワードを管理・保護し続ける必要がある

結果として、「人のミス」や「だまされること」を前提にした仕組みになっています。

ワンタイムパスワード認証の限界

SMSやメールによるOTP(ワンタイムパスワード)は、パスワードより安全な「二要素認証」として広く使われています。

しかし、OTPにも次のような課題があります。

  • フィッシングサイトにOTPを入力してしまう
  • SMSの遅延・未着
  • SIMスワップ攻撃
  • 利用者・管理者ともに運用コストが高い

つまり、OTPは「パスワードを補強する仕組み」であり、パスワードの根本的な問題を解決するものではない、という位置づけになります。

パスキーが解決するポイント

  1. 入力する秘密情報が存在しない
  2. サービスごとに異なる認証情報を使う
  3. フィッシングサイトでは使えない

という特性を持ちます。そのため、パスワード+OTPで対策していた多くの問題を、構造的に解消できます。

観点 メリット 限界
パスワード 導入が簡単 使い回し/漏えい/フィッシング/リセット対応が発生
OTP 2要素で強化 入力が必要=フィッシングに弱い/SMS未着等の運用問題
パスキー 秘密を送らない 初回登録(発行)を慎重に設計する必要がある

1-3. 「FIDO2」という国際標準規格

パスキーは独自技術ではない

パスキーは、どこか一社が独自に作った技術ではありません。その基盤になっているのがFIDO2(ファイドゥー)という国際標準規格です。

FIDO2は、Apple、Google、Microsoft、金融機関、大手IT企業などが参加するFIDO Allianceによって策定されています。

FIDO2を構成する2つの要素

FIDO2は、大きく次の2つから構成されています。

  • WebAuthn(Web Authentication):Webブラウザとサービス間の標準API
  • CTAP(Client to Authenticator Protocol):デバイスと認証器の通信ルール

これにより、Webサービス、Webブラウザ、OS・デバイスが共通ルールで安全に連携できるようになっています。

FIDO2の構成(WebAuthn / CTAP)

なぜ標準規格が重要なのか

標準規格であることにより、特定ベンダー依存を避けやすく、将来のOS・ブラウザでも使い続けられ、金融・行政・大規模SaaSでも採用できる、というメリットがあります。

つまりパスキーは、一時的な流行ではなく、今後10年以上使われることを前提に設計された認証基盤と言えます。

1-4. この章のまとめと次章へのつながり

この章では、次のポイントを押さえました。

  1. パスキーは「覚える認証」から「持つ認証」への転換
  2. パスワードやOTPの弱点を構造的に解決する
  3. FIDO2という国際標準に基づく仕組みである

ただし「なぜ安全なのか?」を本当に理解するためには、パスキーの内部で使われている仕組みを知る必要があります。次章では、公開鍵・秘密鍵、なぜ秘密情報を送らなくてよいのか、といったパスキーの中核となる考え方を解説します。

2. 公開鍵暗号方式の超基礎

2-1. なぜ「秘密の文字列」を送らなくてよいのか

従来のログイン方式では、ユーザーが「ID・パスワード」や「OTP」といった秘密の文字列を入力し、それをネットワーク越しにサービスへ送信していました。

この構造には、根本的な問題があります。

秘密情報を送る以上、盗まれるリスクをゼロにはできないという点です。

通信が暗号化されていても、偽サイト(フィッシング)やマルウェア、誤操作などにより、ユーザー自身が秘密情報を差し出してしまう可能性が残ります。

パスキーは、この前提をひっくり返します。「秘密は送らない」という前提で設計されている。それを可能にしているのが公開鍵暗号方式です。

2-2. 公開鍵と秘密鍵の役割

公開鍵暗号方式では、必ずペアで使われる2つの鍵があります。

  • 公開鍵(Public Key)
  • 秘密鍵(Private Key)

この2つは、次のような性質を持っています。

公開鍵

名前の通り「公開してよい鍵」。サービス側(RP)が保持する。盗まれても問題ない

秘密鍵

本人しか持ってはいけない鍵。デバイスの中に安全に保管される。絶対に外へ出ない

公開鍵と秘密鍵のペアの関係

重要なのは、公開鍵から秘密鍵を逆算することはできないという点です。

2-3. 「秘密鍵は外に出ない」という重要な考え方

パスキー認証では、サービス側:公開鍵だけを保存、ユーザー側:秘密鍵をデバイス内に保存、という役割分担になります。

ログイン時に起きていることを簡略化すると、次の流れです。

  1. サービスが「この人は本人ですか?」という問い(チャレンジ)を出す
  2. デバイスが秘密鍵を使って、その問いに署名する
  3. サービスは公開鍵で「正しい署名かどうか」を確認する

この流れでは、秘密鍵そのものは送られず、ネットワークを流れるのは「署名結果」だけです。

秘密鍵が外に出ない認証フロー

つまり、盗まれるべき「秘密情報」がネットワーク上に存在しないという状態を作っています。

2-4. なぜフィッシングに強いのか

公開鍵暗号方式を使ったパスキーがフィッシングに強い理由は、次の2点にあります。

  1. 秘密鍵は入力できない
    → 騙して入力させること自体が不可能
  2. 使える相手(サービス)が決まっている
    → 鍵は特定のRP向けに生成され、偽サイトでは署名が成立しない

正規サイトとフィッシングサイトの違い(概念図)

2-5. パスキーにおける公開鍵暗号の使われ方

ここまでの内容をパスキーに当てはめると、次のようになります。

  • ユーザーは秘密鍵を「覚えない」
  • サービスは秘密情報を「預からない」
  • ネットワークには秘密が「流れない」

つまりパスキーは、「人が秘密を扱わない」ことを前提にした認証方式と言えます。この設計こそが、高いセキュリティ・高い利便性・運用負荷の低減を同時に成立させています。

2-6. この章のまとめと次章へのつながり

この章で押さえるべきポイントは3つ。

  1. 公開鍵暗号方式は「秘密を送らない」仕組み
  2. 秘密鍵はデバイスの外に出ない
  3. フィッシングが成立しない構造を持つ

ただし、ここで一つ疑問が残ります。

「その秘密鍵は、誰が・どこで管理しているのか?」

次章では、User(利用者)・RP(サービス)・Authenticator(認証器)という3者の役割分担を整理しながら、パスキー全体の構造を図解で解説します。

3. パスキーを構成する3者の関係

3-1. パスキーは「3者の役割分担」で成り立っている

パスキー認証は、単に「パスワードを入力しない」というだけではなく、役割を3者に分けて責任範囲を整理することで成立しています。ここでいう3者とは次のとおりです。

3者 役割
User 利用者 本人確認(顔/指紋/PIN 等)を行う主体
RP(Relying Party) サービス側 認証結果を検証し、ログイン可否を判断する主体
Authenticator 認証器 秘密鍵を安全に保管し、署名を生成する主体

重要なのは、従来のパスワード方式と異なり、RPが「秘密情報」を保管しない設計になっている点です。Userは秘密の文字列を入力しないため、フィッシング耐性が上がり、Authenticatorは秘密鍵を外に出さないため、ネットワーク上に盗む対象が存在しません。

User / RP / Authenticator の関係図

3-2. User(利用者)の役割

Userが行うことはシンプルです。基本的には「ログイン」ボタンを押し、端末に表示される本人確認(顔/指紋/PIN など)を通すだけです。

  • パスワードを覚えない
  • ワンタイムパスワード(以下、OTP)を入力しない
  • 秘密鍵の管理・バックアップ・再発行をユーザーが意識しない

User視点では、従来よりも「楽になる」方向に設計されています。ただし、裏側では安全性が上がっており、これがパスキーの大きな特徴です。

3-3. RP(Relying Party:サービス側)の役割

RP(Relying Party)は、「認証結果を信頼してアクセスを許可する側」、つまりサービス提供者です。RPの役割は、次の3点に集約できます。

  1. 登録時に、Authenticatorから渡される公開鍵をユーザーに紐づけて保存する
  2. ログイン時に、使い捨ての問い(チャレンジ)を発行する
  3. 返ってきた署名を公開鍵で検証して、本人性を判断する

ここで押さえておきたいのは、RPは秘密鍵を保存しないという点です。RPが漏えいしても「秘密」が奪われにくくなるため、セキュリティ事故の性質が大きく変わります(被害が局所化しやすい)。

3-4. Authenticator(認証器)の役割

Authenticator(認証器)は、秘密鍵を安全に保管し、本人確認が通ったときだけ署名を作る主体です。ここがパスキーの要であり、セキュリティの根幹になります。

Authenticatorの動きをもう少し具体化すると、次のようになります。

  • 秘密鍵をセキュア領域に保管(OS / ハードウェア保護)
  • Userの本人確認(顔/指紋/PIN)を通過した場合のみ、秘密鍵の使用を許可
  • チャレンジに対して署名を生成し、RPへ返す(秘密鍵そのものは返さない)

Authenticatorが担う役割(秘密鍵保管と署名生成)

4. 「RPごとに生成される鍵ペア」という設計思想

4-1. なぜサービスごとに鍵が違うのか

パスキーは、RP(サービス)ごとに別々の鍵ペアを作成します。つまり、同じUserでも「Aサービス用の鍵」と「Bサービス用の鍵」は別物になります。

この設計は、従来の「同じパスワードを複数サービスで使ってしまう」問題を根本から断ち切る考え方です。ユーザーの運用努力(注意力)に依存せず、仕組みとして使い回せないようにしています。

RPごとに鍵ペアが分かれる(同一ユーザー・複数RP・複数鍵)

4-2. 同じユーザーでもRPが違えば別の鍵

ここでの「別の鍵」というのは、単に保存場所が違うという意味ではありません。暗号学的に完全に別のペアが生成されます。よって、Aサービスで使っていた認証情報がBサービスへ流用されることはありません。

4-3. 鍵の使い回しができない理由

パスワードの使い回しは、人間の習性として避けるのが難しい一方、パスキーでは構造上それが起きません。これにより、次のメリットが得られます。

  • 1つのサービスが侵害されても、他サービスへ連鎖しにくい(被害の局所化)
  • フィッシングで「入力させて奪う」という攻撃が成立しない
  • “強いパスワードを各サービスで管理する”という運用が不要になる

4-4. この設計がもたらすセキュリティ効果

パスキーは、ユーザーが頑張って「安全に使う」のではなく、安全に使わざるを得ない構造を作っています。これは、セキュリティ設計として非常に大きな転換点です。

5. OSベンダーが提供するFIDO認証器

5-1. OSが「Authenticator」を持つ時代

現在のパスキーは、専用ハードウェアだけに依存せず、OSやスマホそのものがAuthenticatorとして動作します。OSが認証器を担うのは、次の理由があります。

  • 生体認証やPINなど、本人確認手段をOSが直接制御できる
  • 秘密鍵を安全に保持できる領域(セキュアエンクレーブ等)をOSが利用できる
  • アプリ/ブラウザに秘密鍵を渡さずに処理できる

5-2. Windows Hello

Windowsでは、Windows Hello が本人確認(PIN/顔/指紋)を担い、秘密鍵の使用を制御します。ユーザーはPINを入力しますが、これは「サービスのパスワード」ではなく、端末内での本人確認です。PINは端末外へ送られません。

5-3. Android と Googleパスワードマネージャー

Androidでは、Googleパスワードマネージャー等がパスキー基盤として動作し、端末ロック解除(顔/指紋/PIN)を利用して署名を生成します。ユーザー体験としては「端末のいつものロック解除」とほぼ同じ操作になります。

5-4. iPhone と iCloudキーチェーン

iPhoneでは、iCloudキーチェーンがパスキーを保持し、Face ID / Touch ID / 端末パスコードによって秘密鍵の使用が制御されます。ここでも、生体情報がサービスへ送られることはなく、端末内で完結します。

5-5. なぜOSベンダーが担うのか

OSベンダーが担うことで、ユーザーは「鍵を管理する負担」から解放されます。一方で、RP(サービス)側は、OSベンダーに認証を“丸投げ”するのではなく、自社のログイン要件・初回登録の厳格さ・監査ログなどを設計する必要があります。

OSベンダーの認証器(Windows / Android / iOS)とRPの関係

6. 生体認証・PINはどう使われているのか

6-1. 顔認証・指紋認証・PINの正体

顔認証・指紋認証・PINは、サービスのログイン情報ではありません。これらは端末内で「秘密鍵を使ってよいか」を判断する本人確認です。

よくある誤解として「顔や指紋がサービスに送られて照合されている」と思われがちですが、実際には逆です。サービスは顔や指紋を受け取らず、Authenticatorが「本人確認が通った」と判断した場合のみ署名が生成されます。

6-2. 「本人確認」と「認証」の違い

ここで整理しておきたいのが、本人確認(User Verification)と認証(Authentication)の違いです。

役割 相違点
本人確認 端末内で「持ち主本人か」を確認する(顔/指紋/PIN)
認証 サービス側で「正しい鍵の持ち主か」を確認する(署名の検証)

パスキーは、この2段階をきれいに分離します。結果として、ユーザー体験は簡単になる一方、セキュリティは高くなります。

6-3. 端末ごとに最適な手段が自動選択される仕組み

「PIN/顔/指紋が自動判定される」と感じるのは、OSが利用可能な本人確認手段を提示しているためです。ユーザーは“いつもの解除”を行い、裏側で署名が生成されます。

6-4. PINはなぜ安全なのか(パスワードとの違い)

PINは短い数字で不安に見えるかもしれません。しかし、PINは端末内でのみ通用する本人確認で、サービスへ送られません。つまり、仮にサービス側が侵害されてもPINは奪えません。これはパスワードと決定的に異なる点です。

7. クロスデバイス認証とは何か

7-1. PCにパスキーがなくてもログインできる理由

クロスデバイス認証とは、PCなどログイン端末に鍵が存在しない場合でも、スマホ等の別デバイスをAuthenticatorとして用いて認証できる仕組みです。

典型例は次の流れです。

  1. PCのブラウザでログインを開始する
  2. PCにQRコードが表示される
  3. スマホでQRコードを読み取り、本人確認(顔/指紋/PIN)を行う
  4. スマホが署名を作り、PC側のログインが成立する

クロスデバイス認証(PC ↔ スマホ)の概念フロー

7-2. QRコード・Bluetooth・近接通信の役割

クロスデバイス認証は便利ですが、「離れた場所の他人が勝手に承認できる」設計ではありません。近接通信(Bluetoothなど)を使ってその場にいることを確かめるなど、複数の条件で安全性を担保します。

役割 実施内容
QRコード 認証要求(セッション情報)の受け渡し
Bluetooth等 近接確認(なりすまし防止)
ネットワーク 署名結果の返却

7-3. 利便性とセキュリティの両立

クロスデバイス認証は、利便性を上げながらも「秘密鍵を送らない」前提を守ります。つまり、便利になっても安全性の根本設計は崩れません。

8. Apple・Google・Microsoftについて

8-1. Apple・Google・MicrosoftとRPとの違い

パスキーの文脈でBig3(Apple/Google/Microsoft)が頻繁に登場するため、「彼らがプラットフォームを握っているのでは?」と感じることがあります。しかし、彼らの主な役割はAuthenticator(認証器)基盤の提供です。

一方、RP(サービス)が提供する価値は、認証器そのものではなく、次のような領域にあります。

  • 業務要件に合わせた登録・ログイン設計(本人確認強度、制限、例外処理)
  • 監査ログ、承認フロー、権限設計、セキュリティポリシー
  • 他サービス連携(Webhook、API、IdP連携など)

8-2. Big3の役割は「認証器基盤」

Big3が担うのは「鍵を安全に保持して署名を作る」役割です。RPが担う「その署名をどう使って業務を成立させるか」は別領域となります。

8-3. SaaS・業務システム側が担う領域

RPを提供する企業(例:ハネソル)の運用では、誰がどの端末を使えるか、どこまでを許容するか、退職時にどう無効化するかなど、多くの設計要素があります。パスキーは「安全な部品」ですが、企業で使うには運用設計が重要です。

9. パスキーの登録プロセス

9-1. 初回登録の流れ

パスキーは、最初に「登録(発行)」が必要です。登録は、単なる設定ではなく、新しい本人確認手段の発行に相当します。登録時の流れは次のとおりです。

  1. RPが登録を開始し、登録用のチャレンジを生成する
  2. AuthenticatorがRP向けに鍵ペアを生成し、秘密鍵を安全領域に保存する
  3. 公開鍵(および識別情報)がRPへ渡り、ユーザーに紐づけて保存される

パスキー登録フロー(RP→Authenticator→RP)

9-2. 初回登録は慎重に行う必要があります

パスキーはログインを強固にしますが、前提として「誰のパスキーか」が正しく登録されている必要があります。もし登録時に成りすましが起きると、その後の認証は正しくても犯人を本人と認めてしまうことになります。

  • 登録は「本人確認手段の発行」=最も厳格にすべき工程
  • 既存の強い本人確認(現行ログイン、管理者承認、端末配布、本人確認書類等)と組み合わせて設計する
  • 企業利用では、登録の条件(許可デバイス、台数制限、権限別ルール等)を定義する

9-3. 登録時に強い本人確認を求める理由

「ログインが簡単になるほど、登録が重要になる」
――これがパスキー運用の本質です。登録段階の厳格さが、その後の安全性を決めます。

10. 通常ログイン(認証)プロセス

10-1. ログイン時の全体フロー

登録後のログインは、チャレンジレスポンス方式で行われます。RPは使い捨ての問い(チャレンジ)を出し、Authenticatorは秘密鍵で署名し、RPは公開鍵で検証します。

  1. RPがログイン開始(チャレンジ発行)
  2. ブラウザがAuthenticatorへ要求を渡す(WebAuthn)
  3. Authenticatorが本人確認(顔/指紋/PIN)を要求する
  4. 本人確認が通れば署名を生成し、RPへ返す
  5. RPが公開鍵で検証し、ログインを成立させる

チャレンジレスポンス方式(署名と検証)

10-2. なぜ「盗まれる情報」が存在しないのか

ネットワーク上を流れるのは署名結果であり、秘密鍵は流れません。ユーザーが入力する秘密もありません。従来方式のように「盗んで使う」対象が消えるため、攻撃の成立条件が崩れます。

10-3. OTPとの根本的な違い

OTPは「本人確認の強化」にはなるものの、入力式である以上、フィッシングに弱い構造が残ります。パスキーは、入力式の秘密を排し、RPごとの鍵ペアで“正しい相手にしか使えない”認証を実現します。

観点 OTP パスキー
ユーザー操作 コードを受け取り、入力する 端末で本人確認し、ボタンで完了
盗難対象 コードが盗まれうる 秘密鍵は外に出ない(盗めない)
フィッシング耐性 入力するため弱い 偽RPでは成立しない

11. User・ブラウザ・FIDO2サーバの関係

11-1. Webブラウザの役割(WebAuthn API)

Webブラウザは、RP(サーバ)とAuthenticator(端末)をつなぐ橋渡しをします。RPはブラウザに対してWebAuthn APIで「登録して」「認証して」と依頼し、ブラウザがOSの機能(Authenticator)を呼び出します。

ポジション 役割
RP(サーバ) 登録/認証の開始、チャレンジ発行、検証を行う
WEBブラウザ WebAuthn APIで処理を仲介する
Authenticator(端末) 秘密鍵保管、本人確認、署名生成を行う

11-2. FIDO2サーバが保持する情報

FIDO2サーバ(=RP側の認証基盤)が保持するのは、原則として公開情報と検証に必要な情報です。秘密鍵は保持しません。

  • 公開鍵(public_key)
  • credential_id(識別子)
  • ユーザー紐づけ情報(user_id 等)
  • カウンタ等の検証補助情報(実装により)
  • 監査ログ(いつ・誰が・どのデバイスで等)

User・ブラウザ・Authenticator・RP(FIDO2サーバ)の関係図

11-3. 秘密鍵はどこにも送られない(再確認)

この章のまとめとしてもう一度強調すると、秘密鍵は端末内に留まり、外部へ送られません。これがパスキーのセキュリティの基盤です。

12. ハネソルはパスキーの導入支援が可能です

12-1. パスキーを使うシーン

パスキーは「ログインのための技術」に見えますが、本質は本人性の証明を、安全かつ簡単に実行できることです。つまり、ログイン以外にも、重要操作の承認や決裁の確認といった行為にも転用できます。

12-2. パスキー導入でお悩みならご相談ください

パスキーを使ったシステムはFIDO2/WebAuthn仕様に沿って開発すれば、自営での導入が可能です。しかし、これまで説明してきたように、フロントエンド(JavaScript)、バックエンド(PHP)、データベース(MySQL)等の多くのプログラムを構築が必要です。

ハネソルでは、パスキーを平易に既存システムに導入できるAPIをご用意しています。自営のシステム設置で技術的な壁を感じておられる事業者様は、ぜひハネソルにご相談ください。

最後までお読みくださりありがとうございます。