TOTP (時間ベースワンタイムパスワード)
約 4 分で読めます
最終更新: 2026-02-20
TOTP とは
TOTP (Time-based One-Time Password) とは、現在時刻と共有秘密鍵を組み合わせて、一定時間 (通常 30 秒) ごとに新しい 6 桁のワンタイムパスワードを生成するアルゴリズムです。RFC 6238 で標準化されており、二要素認証の実装方式として広く採用されています。
Google Authenticator、Microsoft Authenticator、Authy などの認証アプリがこの仕組みを利用しています。サービスへのログイン時にパスワードに加えて、認証アプリに表示される 6 桁のコードを入力することで、パスワードが漏洩しても不正ログインを防止できます。
TOTP の仕組み
TOTP の動作原理はシンプルですが堅牢です。
- 秘密鍵の共有: サービスに TOTP を設定すると、サーバーが秘密鍵 (通常 Base32 エンコードされた 160 ビットの値) を生成する。この鍵は QR コードとして表示され、認証アプリで読み取ることでアプリ側にも保存される
- 時間カウンターの計算: 現在の Unix タイムスタンプを 30 秒で割った整数値をカウンターとして使用する。サーバーとアプリが同じ時刻を参照するため、同じカウンター値が得られる
- HMAC-SHA1 による生成: 秘密鍵とカウンター値を HMAC-SHA1 アルゴリズムに入力し、ハッシュ値を生成する。このハッシュ値から動的に 6 桁の数値を抽出する
- 検証: サーバー側でも同じ計算を行い、ユーザーが入力したコードと一致するか検証する。時刻のずれを考慮して、前後 1 - 2 ステップ分のコードも許容するのが一般的
秘密鍵はネットワーク上を流れず、生成されたコードは 30 秒で無効になるため、フィッシングサイトにコードを入力してしまっても、攻撃者がそのコードを再利用できる時間は極めて限られます。
SMS 認証との比較
二要素認証の方式として SMS 認証も広く使われていますが、TOTP の方がセキュリティ面で優れています。
- SIM スワップ攻撃への耐性: SMS 認証は攻撃者が携帯キャリアを騙して電話番号を奪取する SIM スワップ攻撃に脆弱。TOTP はデバイス内の秘密鍵で生成するため、電話番号の乗っ取りでは突破できない
- 通信経路の安全性: SMS は SS7 プロトコルの脆弱性により傍受される可能性がある。TOTP はネットワーク通信を必要としないため、傍受のリスクがない
- オフライン動作: TOTP は端末がオフラインでもコードを生成できる。SMS は電波の届かない場所では受信できない
- コスト: SMS 送信にはサービス提供者側にコストが発生する。TOTP はサーバー側の計算のみで完結する
ただし、TOTP にも弱点はあります。リアルタイムのフィッシング攻撃 (攻撃者が入力されたコードを即座に正規サイトに転送する中継型フィッシング) には脆弱です。この攻撃に対しては、パスキーのようなフィッシング耐性を持つ認証方式が有効です。
認証アプリの選び方とバックアップ
認証アプリを選ぶ際の重要なポイントはバックアップ機能です。端末の紛失や故障で認証アプリにアクセスできなくなると、登録した全サービスにログインできなくなるリスクがあります。
- Authy: クラウドバックアップに対応し、複数デバイスで同期可能。端末紛失時のリカバリーが容易
- Microsoft Authenticator: iCloud / Google アカウントへのバックアップに対応。企業環境との親和性が高い
- Google Authenticator: Google アカウントへの同期に対応 (2023 年以降)。シンプルで軽量
- 1Password / Bitwarden: パスワードマネージャーと TOTP を一元管理できる。利便性は高いが、パスワードと TOTP を同じ場所に保管するため、厳密には二要素の独立性が低下する
どのアプリを選ぶ場合でも、TOTP 設定時に表示されるリカバリーコード (バックアップコード) は必ず安全な場所に保管してください。紙に書いて金庫に保管する、暗号化されたファイルに保存するなどの方法が推奨されます。
よくある誤解
- TOTP を設定すればフィッシングを完全に防げる
- TOTP はパスワード漏洩への防御としては有効だが、リアルタイム中継型フィッシング (攻撃者が入力されたコードを即座に正規サイトに転送する手口) には脆弱。完全なフィッシング耐性が必要な場合はパスキーや FIDO2 セキュリティキーを使用する。
- 認証アプリのコードは端末固有なので他人には生成できない
- TOTP のコードは秘密鍵と現在時刻から計算されるため、秘密鍵を知っていれば誰でも同じコードを生成できる。QR コードのスクリーンショットや秘密鍵の文字列を他人に見せてはいけない。
TOTP と SMS 認証の比較
TOTP (認証アプリ)
デバイス内で生成。SIM スワップ攻撃に強い。オフラインで動作。秘密鍵のバックアップが必要。
SMS 認証
電話番号に送信。SIM スワップ攻撃に脆弱。電波が必要。電話番号があれば利用可能で導入が容易。