認証・パスワード

TOTP (時間ベースワンタイムパスワード)

約 4 分で読めます

TOTP とは

TOTP (Time-based One-Time Password) とは、現在時刻と共有秘密鍵を組み合わせて、一定時間 (通常 30 秒) ごとに新しい 6 桁のワンタイムパスワードを生成するアルゴリズムです。RFC 6238 で標準化されており、二要素認証の実装方式として広く採用されています。

Google Authenticator、Microsoft Authenticator、Authy などの認証アプリがこの仕組みを利用しています。サービスへのログイン時にパスワードに加えて、認証アプリに表示される 6 桁のコードを入力することで、パスワードが漏洩しても不正ログインを防止できます。

TOTP の仕組み

TOTP の動作原理はシンプルですが堅牢です。

  1. 秘密鍵の共有: サービスに TOTP を設定すると、サーバーが秘密鍵 (通常 Base32 エンコードされた 160 ビットの値) を生成する。この鍵は QR コードとして表示され、認証アプリで読み取ることでアプリ側にも保存される
  2. 時間カウンターの計算: 現在の Unix タイムスタンプを 30 秒で割った整数値をカウンターとして使用する。サーバーとアプリが同じ時刻を参照するため、同じカウンター値が得られる
  3. HMAC-SHA1 による生成: 秘密鍵とカウンター値を HMAC-SHA1 アルゴリズムに入力し、ハッシュ値を生成する。このハッシュ値から動的に 6 桁の数値を抽出する
  4. 検証: サーバー側でも同じ計算を行い、ユーザーが入力したコードと一致するか検証する。時刻のずれを考慮して、前後 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 スワップ攻撃に脆弱。電波が必要。電話番号があれば利用可能で導入が容易。

関連用語

関連記事