TOTPとは、時間ベースのワンタイムパスワード(Time-based One-Time Password)の略称です。これは、認証アプリに表示される多くの6桁のコードの基盤となっている技術です。TOTPコードは、秘密のセットアップキーと現在の時刻から算出され、短時間の後に有効期限が切れます。

TOTPは、二要素認証の2番目のステップとして一般的に使用されています。認証アプリはメッセージを待つのではなく、ローカルでコードを計算するため、モバイル通信が利用できない状況でも機能します。

TOTPコードはどのような情報から生成されるのでしょうか?

重要な入力情報は2つあります。共有秘密鍵と時間カウンタです。アカウントプロバイダーは設定時に秘密鍵を生成し、QRコードまたは手動入力用のキーを通じて認証アプリに提供します。その後、双方が時間を等間隔の区間に分割し、同じ暗号計算を実行します。

秘密鍵、アルゴリズム、および時間ウィンドウが一致すれば、双方が同じ短いコードを生成します。ログインのたびに秘密鍵そのものを送信する必要はありません。

Four-stage TOTP process from secret and time to code validation
認証アプリとサービスは、同じ秘密鍵と時間ウィンドウを用いて、それぞれ独立して値を計算します。

TOTPはどのように機能するのでしょうか?

  1. プロバイダーは、認証アプリの登録用に一意のシークレットを作成します。
  2. ユーザーは、信頼できるデバイスでセットアップ用QRコードをスキャンするか、手動で秘密鍵を入力します。
  3. 認証アプリは、シークレットと現在のタイムウィンドウを組み合わせて計算を行います。
  4. その結果は、通常 6 桁の短い数値コードに変換されます。
  5. プロバイダーは予想されるコードを計算し、それをユーザーが入力したコードと比較します。

RFC 6238 では、TOTP を HOTP の時間ベースのバリエーションとして定義しています。一般的な設定では、30 秒間隔、6 桁、HMAC-SHA-1 が使用されますが、他にもサポートされているアルゴリズムや設定があります。

TOTP コードには有効期限があるのはなぜですか?

有効期間が短いことで、コピーされたコードが再利用される期間を制限しています。時間ウィンドウが変化すると、認証ツールは別の値を生成します。サービスによっては、ネットワークの遅延やわずかな時計のずれを考慮して、時間ウィンドウの許容範囲を少し広げることもありますが、許容範囲が広くなると、コードが受け入れられる期間も長くなります。

カウントダウンの開始直後に新しいコードを入力してください。コードが繰り返し拒否される場合は、「機能しない2FAコードの修正方法」ガイドに従ってください。

TOTPとHOTPの比較

TOTPとHOTPは関連する計算式を使用しますが、進み方が異なります:

  • TOTPは時間ステップに応じて変化するため、認証アプリの時計を同期させる必要があります。
  • HOTPは、ボタンを押したときや正常に使用したときなど、カウンタが前進した際に更新されます。

TOTPは、時間が自動的に変化する要素となるため、ソフトウェア認証アプリで一般的に使用されています。HOTPは、一部のハードウェアトークンや特殊なシステムで現在も使用されています。

TOTP 対 SMS コード

TOTPアプリはデバイス上でコードを計算し、通常はオフラインでも動作します。SMSは、コードを配信するために電話回線に依存しています。SMSは便利ですが、SIMスワップ、番号の再割り当て、傍受、配信失敗などの影響を受ける可能性があります。

通常のTOTPもSMSも、フィッシング攻撃に対して完全に耐性があるわけではありません。説得力のある偽のログインページであれば、現在のコードをキャプチャして転送することが可能です。重要なアカウントについては、対応している場合、パスキーやFIDOセキュリティキーの方が一般的に強固です。認証アプリとSMSの詳細な比較についてはこちらをご覧ください。

TOTPのシークレットとは何ですか?

この「シークレット」とは、その登録に基づく今後のすべてのコードの基盤となる、長期有効な認証情報です。これを入手した者なら誰でも、別の認証アプリを設定し、一致する値を生成することができます。設定用QRコードのスクリーンショットは、通常このシークレットが含まれているため、機密情報となります。

当社のガイドでは、手動による2FA設定キーの場所や、パスワードや復旧コードとの見分け方について解説しています。

TOTPはオフラインでも機能しますか?

はい。一度設定されれば、認証アプリはシークレットと正確な時計さえあればよく、インターネット接続は不要です。ただし、ログインを検証するサービス側は、保存されている登録情報へのアクセスが必要です。

TOTPジェネレーターを安全に使用する方法

  • 管理権限のあるアカウントに属するシークレットのみを使用してください。
  • シークレットを入力する前に、ウェブサイトのアドレスと端末を確認してください。
  • チャットやサポートフォームを通じて、シークレットや設定用QRコードを送信しないでください。
  • 復旧コードは、普段使用している認証アプリとは別に保管してください。
  • シークレットが漏洩した可能性がある場合は、登録情報を再生成してください。

承認されたテストの場合、Get2FA.dev TOTPジェネレーターがブラウザ上で標準コードを計算します。重要なアカウントでの日常的な使用には、信頼できる認証アプリまたはハードウェアベースの方法を優先してください。

よくある質問

TOTPコードの有効期間はどのくらいですか?

30 秒が一般的なデフォルトですが、プロバイダは別の期間を設定することもできます。カウントダウンは特定の時間枠内で行われ、コードを表示したりコピーしたりしても再スタートすることはありません。

TOTPコードは通常6桁なのはなぜですか?

6桁である理由は、利便性と取り得る値の数が限られていることとのバランスを取っているためです。コードの組み合わせ自体が限られているため、レート制限や短い有効期間の設定が重要となります。

2台のデバイスで同じTOTPコードを表示することはできますか?

はい、両方が同じ秘密鍵を持ち、同じ設定を使用し、時計が同期されていれば可能です。登録の複製が適切かどうかは、セキュリティポリシーによって異なります。

TOTPは2FAと同じですか?

いいえ。TOTPは認証方法の一つにすぎません。2FAの意味や、その他の認証方法がどのように機能するかについては、こちらをご覧ください。