TOTP(時間ベースOTP)とは

時刻と共有秘密鍵を組み合わせ、30秒ごとに新しい6桁のワンタイムパスワードを生成する認証方式。RFC 6238で標準化されており、Google AuthenticatorやMicrosoft Authenticatorが採用している。

TOTPの仕組み

TOTPを設定するとき、サーバーは秘密鍵(Base32でエンコードされた文字列)をQRコードで提示します。 ユーザーがアプリでQRコードをスキャンすると、サーバーとアプリが同じ秘密鍵を共有します。 以降、アプリは「秘密鍵 + 現在時刻(30秒単位に丸めたUnixタイム)」をHMAC-SHA1でハッシュ化し、 6桁の数値を生成します。サーバーも同じ計算を行い、一致すれば認証成功です。 ネットワーク通信なしにコードを生成できるため、オフライン環境でも動作します。

主なTOTPアプリ

  • Google Authenticator: Android/iOS対応のシンプルなアプリ。バックアップ機能は限定的。
  • Microsoft Authenticator: クラウドバックアップ対応。Microsoft Entra IDとの連携に強い。
  • 1Password / Bitwarden: パスワードマネージャーにTOTP機能を統合。
  • Authy: マルチデバイス対応のバックアップ機能を持つTOTPアプリ。

メリット

  • SMS不要のためSIMスワップの影響を受けない
  • オフラインで動作するため、通信障害の影響を受けない
  • コードの有効期間が30秒と短く、傍受されてもリプレイ攻撃が困難
  • RFC標準のため、多数のサーバーサイドライブラリが利用可能

デメリット

  • 認証アプリのインストールが必要で、非技術系ユーザーには負担になる場合がある
  • デバイス紛失時にバックアップ手段がないとアカウントから締め出される
  • フィッシングサイトにリアルタイムで入力させる中間者攻撃(MiTM)には脆弱
  • 端末の時刻がずれると認証失敗する(通常はNTPで自動補正)

SMS認証との比較

SMS認証と比べて、TOTPはSIMスワップリスクがなく、 通信コストもかかりません。一方、ユーザーにアプリインストールを求めるため、 スマートフォンに不慣れなユーザー向けサービスではSMS認証の方が普及率が高い場合があります。 FIDO2パスキーのような フィッシング完全耐性を持つ方式への移行も検討に値します。

関連用語

  • OTP — TOTPはOTPの一種
  • FIDO / FIDO2 — TOTPよりさらに強力なパスワードレス認証

電話番号ベースの認証を探している開発者へ

TOTPはアプリ必須ですが、pauth.meの着信認証はアプリ不要で電話番号の本人確認が可能。固定電話にも対応。

認証方式を比較する