0

TOTPジェネレーター — ライブ2FA認証コード

Base32のTOTPシークレットを貼り付けると、本物の6桁認証コードが30秒ごとに更新される様子を、ブラウザ上で完全オフラインで確認できます。

🔒 ブラウザ内で完全に処理されます。ここに入力した内容はアップロードされません。

- -

30

処理中... 0%

結果

このツールは、Base32のシークレットから、Google AuthenticatorやAuthyといったアプリが表示するのと同じ6桁のローテーションコード、すなわち標準準拠のタイムベースワンタイムパスワード(TOTP)を生成します。二要素認証の設定時に発行されたシークレット(通常はQRコードの背後に隠されている文字列)を貼り付けると、スマートフォンアプリ内とまったく同じように、ライブコードがカウントダウンして30秒ごとに更新されます。このツールは、ご自身が所有または管理する2FAシークレットのテスト・検証を目的としています。たとえば、構築中のログインフローのデバッグ、プロビジョニング用QRコードを破棄する前の予備コードの確認、シークレットが正しく入力されたかの再確認などにご利用いただけます。

内部では、これはRFC 6238(TOTP)をRFC 4226(HOTP)に基づいて正しく実装したものであり、表面的なカウントダウンではありません。Base32シークレットはRFC 4648に従って生の鍵バイトにデコードされ、現在のUnix時刻をタイムステップで除算して移動カウンターを取得し、そのカウンターを8バイトのビッグエンディアンバッファとしてエンコードします。ブラウザのネイティブWeb Crypto API(crypto.subtle)が、選択されたハッシュ(SHA-1は既存の認証アプリとの互換性のためにほぼ普遍的なデフォルトであり、SHA-256とSHA-512はより強力なバリアントをサポートする環境向けに提供されます)で、そのバッファのHMACを計算します。次にRFC 4226の動的トランケートにより、HMAC出力からその最終バイトで指定されたオフセット位置の4バイトを抽出し、最上位ビットをマスクして、結果を10^6または10^8で割った剰余を求め、6桁または8桁のコードを生成します。これは、お手持ちのスマートフォンの認証アプリが内部で実行しているのとまったく同じ計算です。

すべての処理はローカルで行われます。サーバーコンポーネントはなく、シークレットを運ぶアナリティクスのビーコンも、いかなる種類の外部API呼び出しもありません。フィールドに貼り付けられたBase32テキストは、タブ内で動作するJavaScriptによって直接解析され、そこから出ることはありません。そのため、信頼できるマシン上で2FAシークレットを健全性チェックする安全な方法ではありますが、認証情報を扱う他のあらゆるツールと同様に、共有PCや公共のコンピューターにシークレットを貼り付けることは避け、ご自身が所有するか、テストが明示的に許可されたアカウントに結びついたコードにのみ使用すべきです。

アルゴリズム、桁数、タイムステップの各コントロールが存在するのは、実際のTOTPのデプロイが完全には均一でないためです。ほとんどのコンシューマー向けサービスはSHA-1、6桁、30秒ステップを使用しますが、一部のエンタープライズ向けツールや開発者ツールではSHA-256やSHA-512のシークレットを発行したり、8桁コード、または15秒や60秒といった非標準のタイムステップを採用したりしています。これらの設定をプロビジョニングURIやセットアップページの指定に合わせることで、認証アプリが表示するのとまったく同じコードを再現できます。これは、独自のTOTP検証サーバーを実装している際に、比較対象となる信頼できるオフラインのリファレンスが必要な場合に非常に役立ちます。