TOTPコード生成・検証(2段階認証)
秘密鍵(Base32)から、Google Authenticatorなどと同じ方式(RFC 6238)の6桁コードを生成します。otpauth://形式のURIを貼り付けると設定も読み込みます。実装のデバッグ・動作確認用で、実際の2段階認証の登録・運用には認証アプリをお使いください。ブラウザ内で処理され、鍵がサーバーに送信されることはありません。内部ではHMACを使っています(HMAC署名生成)。
🔒 ブラウザ内で完結・入力データはサーバーに送信されません
現在のコード
次のコード:
注意事項
- コードの計算には端末の現在時刻を使います。端末の時計がずれていると、サーバー側のコードと一致しません。
- 検証では、時刻のずれを考慮して前後1つぶんのコードも有効として扱います。
- 本物のアカウントの秘密鍵を入力するのは避け、検証用の鍵で試すことをおすすめします。入力内容は保存・送信されませんが、画面共有などにご注意ください。
用語解説
TOTP
Time-based One-Time Password。共有した秘密鍵と現在時刻から、30秒ごとなど一定間隔で変わる使い捨てコードを計算する方式です(RFC 6238)。
Base32
A-Zと2-7の32種類の文字でデータを表す形式です。認証アプリに登録する秘密鍵は、この形式で表示されるのが一般的です。
otpauth:// URI
QRコードに埋め込まれる、秘密鍵・発行者・桁数・更新間隔などをまとめたURIです。認証アプリはこれを読み取って登録します。
よくある質問
サーバー側のコードと一致しないのはなぜですか?
多くの場合、端末の時計のずれが原因です。TOTPは現在時刻から計算するため、数十秒ずれるだけで別のコードになります。そのほか、アルゴリズム(SHA-1が標準)・桁数・更新間隔の設定が実装側と合っているかも確認してください。
otpauth://のURIはどこで手に入りますか?
2段階認証の設定画面に表示されるQRコードの中身がこのURIです。QRコードリーダーなどで読み取った文字列をそのまま貼り付けると、鍵・桁数・更新間隔が自動で入力されます。
認証アプリの代わりに使えますか?
このツールは実装のデバッグ・動作確認用です。実際のアカウントの秘密鍵を入力して運用することはおすすめしません。ブラウザのタブを閉じればコードは確認できなくなるため、日常のログインには認証アプリをお使いください。
検証で「1つ前」「1つ先」のコードが有効になるのはなぜですか?
端末とサーバーの時計の小さなずれを許容するため、多くのサービスは前後1つぶんのコードも有効として扱います。このツールの検証も同じ動作です。
このページをシェア
