ssecutils
Security / Browser-native guide

MFA、TOTP、FIDO2、Passkey の違い

多要素認証の方式ごとの強み、フィッシング耐性、復旧手段を比較して選び方を整理します。

7Zero tracking reading surface

「2段階認証」で何が変わるのか

パスワードは漏れます。フィッシングで、データ侵害で、使い回しで、あらゆる経路で漏れます。仮に エントロピーの高いパスワード を使っていても、サービス側が ハッシュ保存をサボっていた瞬間にあなたのパスワードは攻撃者の手元に渡ります。

この前提に立つと、「パスワードだけで守る」モデルはもう破綻している。だから現代の認証は、パスワードに加えて別の要素で確認する MFA(Multi-Factor Authentication, 多要素認証)が標準になりつつあります。

3つの「要素」

MFA の「Multi-Factor」は性質の異なる要素を組み合わせるという意味です。同じ性質を2つ重ねても本当の意味では多要素になりません:

要素意味
知識(Something you know)本人だけが知っているものパスワード、PIN、秘密の質問
所有(Something you have)本人だけが持っているものスマホ、ハードウェアトークン、IC カード
生体(Something you are)本人の生体的特徴指紋、顔、声紋、虹彩

「パスワード + 秘密の質問」は両方とも知識要素なので、MFA とは呼びません。「パスワード + スマホへの SMS」は知識 + 所有なので MFA。「パスワード + 指紋」は知識 + 生体で MFA。

方式1: SMS / 音声通話による OTP

最も普及しているが、セキュリティ的にはおすすめしない方式。日本の銀行・通販サイトで未だに主流ですが、米 NIST は 2016 年から非推奨化しています。

弱点:

  • SIM スワップ詐欺: 通信キャリアに身分を偽って SIM を再発行させ、SMS を奪う。実際にイーロン・マスクや暗号資産取引所幹部などが被害に遭っています
  • SS7 プロトコル攻撃: 携帯網のシグナリングプロトコルの脆弱性で、SMS が傍受される
  • フィッシング耐性ゼロ: 偽サイトで6桁のコードを入力させれば即時に攻撃成立

とはいえ「パスワードだけ」より遥かに安全なので、選択肢が SMS しかないなら有効化すべき。SMS が選べる時は TOTP も選べる場合が多いので、その時は TOTP を選びましょう。

方式2: TOTP(Google Authenticator系)

スマホアプリ(Google Authenticator / Authy / 1Password)が30秒ごとに6桁の数字を生成する方式。RFC 6238 で標準化されており、各社互換。

仕組みはシンプル:

  1. 登録時にサーバが 共有秘密鍵(Base32 文字列) を発行し、QR コードでアプリに渡す
  2. アプリはその秘密鍵と現在時刻(30秒単位に丸めた値)を HMAC-SHA1 して6桁の数字を作る
  3. サーバ側も同じ計算をして照合
TOTP = HMAC-SHA1(secret, floor(unix_time / 30))[truncated to 6 digits]

サーバ・アプリ間の通信は最初の登録時のみ。日常的な認証ではネットワーク不要。SMS と違って「時計が合っていれば動く」のが利点。

SMS 比の改善点:

  • SIM スワップで奪われない(秘密鍵はスマホ内)
  • 通信キャリアの脆弱性を経由しない
  • サービス側の追加コストゼロ(SMS 送信費用がかからない)

弱点:

  • フィッシング耐性は低い: 偽サイトで6桁を入力させれば突破される。SMS 同様に Real-time Phishing Proxy(攻撃者がリレー)に弱い
  • スマホを失くすと終わる: バックアップコードをサービスごとに保管する必要あり
  • 共有秘密鍵がサーバ侵害で漏洩する: サーバ側に平文または可逆暗号で保管されるため、DB 漏洩で TOTP 偽造可能になる

方式3: FIDO2 / WebAuthn / Passkey

2010年代後半に標準化された公開鍵暗号ベースの認証。「パスワードレス」「Passkey」と呼ばれているのはこの方式の一部です。用語が混乱しやすいので整理:

用語意味
FIDO2FIDO Alliance による認証規格群の総称
WebAuthnFIDO2 のうち、ブラウザから使う W3C 標準 API
CTAP2FIDO2 のうち、ブラウザ⇔認証器(YubiKey 等)の通信プロトコル
Passkey2022年 Apple/Google/MS が打ち出したマーケティング用語。中身は WebAuthn を一般ユーザーに分かりやすく見せたもの

仕組みは公開鍵暗号:

  1. 登録時、ブラウザ/OS がそのサイト専用の鍵ペアを生成する
  2. 秘密鍵はスマホ/PC/YubiKey に保管、公開鍵はサーバに送信
  3. ログイン時、サーバが乱数チャレンジを送る
  4. 認証器が指紋認証 or PIN で本人確認した上で、秘密鍵でチャレンジに署名
  5. サーバは公開鍵で検証

TOTP / SMS との決定的な違い:

  • フィッシング耐性がある: 鍵ペアが「ドメインに紐付く」ため、偽サイトでは認証器が反応しない(origin check)
  • サーバ漏洩しても安全: サーバには公開鍵しかなく、漏れても攻撃に使えない
  • パスワードレス化が可能: パスワードと組み合わせる必要がなく、認証器単独で認証完結できる
  • 共有秘密鍵が存在しない: 各サイトごとに独立した鍵ペアなので、1サイトの漏洩が他に波及しない

Passkey が「Passkey」と呼ばれる理由

従来の WebAuthn では、秘密鍵は「特定のデバイスから出ない」のが原則でした(YubiKey が代表例)。これだと「スマホ買い替えで全サービスから締め出される」事故が起きるため、2022年から iCloud / Google Password Manager / 1Password 等で同期できる Passkey が登場しました。

現代の Passkey の挙動:

  • iPhone で作った Passkey が iCloud Keychain 経由で Mac/iPad に同期
  • Android で作った Passkey が Google アカウント経由で他 Android に同期
  • 同期に対応していない YubiKey などの「Device-bound Passkey」も併存

ユーザー体験的には「指紋 or 顔認証だけでログイン完了」。パスワード入力もコード入力も不要。これが「パスワードレス」と呼ばれる所以です。

実用的な使い分けガイド

シーン推奨
銀行・暗号資産・メインメールPasskey + ハードウェアキー(Passkey は便利、ハードキーは復旧用)
SaaS / 開発ツール(GitHub 等)Passkey or TOTP
SMS しか選べないサービスSMS でも有効化(無いよりずっとマシ)
会社の業務システムSAML/OIDC + IdP 側で MFA 強制(Okta / Azure AD / Google Workspace)

復旧手段(Recovery)の話

MFA を有効にする時、「アカウント復旧手段」が結局MFA の弱点になるのは知っておくべきです。

例えば:

  • Passkey の復旧に SMS が使われる → SMS の弱さが復旧経由で漏れる
  • 「秘密の質問でパスワードリセット」が残っている → MFA 全部回避される
  • カスタマーサポートに電話で身分を偽って復旧 → ソーシャルエンジニアリング成立

理想は「復旧経路も同じレベルの強度を要求する」。具体的には:

  • サービス登録時にバックアップコード(10〜20桁の使い捨てコード10個程度)を取得し、紙またはパスワードマネージャに保管
  • 重要アカウントはハードウェアキー2本を登録(1本紛失しても困らない)
  • 「秘密の質問」が残っているサービスはランダム文字列で潰す

おわりに

MFA は「とりあえず有効化すれば安全」ではなく、選んだ方式によって耐性レベルが大きく違います

SMS < TOTP < Passkey/WebAuthn

フィッシング攻撃が高度化している現代では Passkey / FIDO2 がベスト。とはいえ「TOTP しかない」「SMS しかない」サービスでも、有効化することで攻撃ハードルは大幅に上がります。本サイトの TOTP Generator ツールで、Authenticator アプリ内部で何が起きているのか実際に動かして確認できます。

Tool companion

この記事と一緒に使えるツール