TOTP(ワンタイムパスワード)ジェネレーター

Base32形式のTOTPシークレットから、Google Authenticator等と同じ6桁のワンタイムパスワード(RFC 6238)をブラウザ内だけで生成します。シークレットは一切送信されません。

このツールはシークレットをサーバーへ一切送信しません。Base32のデコードとHMAC計算はすべてお使いのブラウザ内(Web Crypto API)で完結するため、認証情報を安心して入力できます。

TOTPアルゴリズムについて

TOTP(Time-based One-Time Password)は RFC 6238 で規定された、時刻に基づくワンタイムパスワード生成アルゴリズムです。共有シークレットと現在時刻を一定間隔ごとのカウンタに変換し、HOTP(RFC 4226)と同じ動的切り捨てアルゴリズムで数字コードを導出します。

HMACアルゴリズム SHA-1(デフォルト)、SHA-256、SHA-512から選択可能
コード桁数 6桁(Google Authenticator等の主要な2FAアプリと同じ標準桁数)
更新周期 30秒ごとに新しいコードへ切り替わります

Tips

  • シークレットは2要素認証(2FA)の初回登録時にQRコードの下などに表示される「セットアップキー」の文字列です。すでにスマートフォンの認証アプリに登録済みの場合は、そのシークレットをこのツールに入力すれば同じコードを確認できます。
  • ハッシュアルゴリズムはサービスによってSHA-1以外(SHA-256・SHA-512)を採用している場合があります。生成されたコードが実際のアプリと一致しない場合は、アルゴリズムを切り替えて試してください。
  • コードは30秒ごとに自動更新され、プログレスバーで残り時間が一目でわかります。切り替わり直前にコードをコピーすると、認証先に届くまでに無効になってしまうことがあるため注意してください。
  • このツールはブラウザのタブを閉じるとシークレットが完全に破棄され、どこにも保存されません。バックアップコードとして使う場合は、別途安全な場所(パスワードマネージャー等)にシークレット自体を保管してください。

よくある質問

はい。Base32のデコードとHMAC計算はすべてブラウザ内のWeb Crypto APIで実行され、サーバーへは一切送信されません。ネットワーク通信を監視しても入力したシークレットが送信されないことを確認できます。

ハッシュアルゴリズムの不一致(多くはSHA-1ですが一部サービスはSHA-256/SHA-512を使用)や、端末の時刻がずれている可能性があります。まずはアルゴリズムを切り替えて試し、それでも一致しない場合はデバイスの時刻設定(自動時刻同期)を確認してください。

TOTPの方が一般的に安全とされています。SMSは電話番号の乗っ取り(SIMスワップ詐欺)で第三者に傍受されるリスクがありますが、TOTPはデバイス内で完結するため、その種の攻撃を受けません。

多くのサービスは2FA登録時に「リカバリーコード」を発行しています。シークレット自体を紛失した場合は、サービス側のアカウント復旧手続き(本人確認)を通じて2FAを再設定する必要があります。
ツールくん

余談ですが ― 2段階認証が「6桁」に落ち着いた理由

TOTPの仕様(RFC 6238)を策定したOATH(Initiative for Open Authentication)は、HOTP(RFC 4226)の動的切り捨てアルゴリズムをそのまま流用し、コード桁数を実装側で自由に選べる設計にしました。それにもかかわらず6桁が事実上の業界標準になったのは、Google Authenticatorが2010年の初期実装でこの桁数を採用し、以降多くのサービス・ライブラリがそれに追従したためです。

6桁という長さは絶妙なバランス点でもあります。100万通り(10の6乗)の組み合わせがあれば、30秒という短い有効期限と組み合わさることでブルートフォース攻撃は現実的に不可能になる一方、ユーザーが暗記して手入力するにはこれ以上長いと実用性が落ちてしまいます。SMS認証コードの多くも同じく6桁を採用しているのは偶然ではなく、この「短時間で使い捨てる数字コード」というジャンル全体で収束した経験則です。

TOTPの前身であるHOTP(RFC 4226、2005年)は「カウンタ」を使う方式で、コードを使うたびにカウンタを1つ進める必要がありました。しかしユーザーがボタンを押し忘れたりデバイスとサーバーのカウンタがずれたりする運用上の問題が頻発したため、2011年に策定されたTOTPでは「現在時刻」という誰でも同じ値を参照できる基準に置き換えられ、運用が大幅に簡素化されました。