ワンタイムパスワード (TOTP/HOTP) とランダムな確認コードを生成する方法
Base32形式のシークレットからRFC準拠のTOTPおよびHOTPワンタイムパスワードを生成する方法を解説。設定手順やパラメーターの注意点も網羅。
Base32形式のシークレットキーを入力し、モード(TOTPまたはHOTP)と桁数、更新期間やカウンター値を指定することで、認証用のワンタイムパスワードを即座に生成できます。初期状態では6桁、30秒更新のTOTPが設定されています。
TOTPとHOTPの違いと生成の仕組み
二要素認証(2FA)で広く使われる認証コードには、主に時間同期型のTOTP(RFC 6238)とカウンター同期型のHOTP(RFC 4226)の2種類があります。OTPジェネレーターは、Base32形式の秘密鍵からHMAC-SHA1アルゴリズムを用いて認証コードを計算します。TOTPは現在時刻を基準に周期ごとに新しいコードへ変わり、HOTPは指定した整数カウンターの値に応じてコードが切り替わります。
ワンタイムパスワードを生成する手順
- Base32形式のシークレットキーを入力します。文字列内の前後の空白や大文字小文字は自動で調整されます。
- モードを時間基準の「TOTP」またはカウンター基準の「HOTP」から選択します。
- コードの桁数を「6」または「8」から選びます(既定値は6)。
- TOTPの場合は更新期間(秒)を指定します(既定値は30秒)。HOTPの場合は整数でカウンター値を入力します。
- 実行すると、生成されたコードとTOTPモード時の残り有効秒数が表示されます。
二次元コード形式での登録や共有を行いたい場合は、QRコード生成ツールの併用が便利です。
具体的な生成例
シークレットキー「JBSWY3DPEHPK3PXP」を使用し、モードを「TOTP」、桁数を「6」、更新期間を「30」秒として実行すると、現在の時刻ステップに基づいた6桁の数字コードと、その周期の残り秒数が算出されます。
制限事項
- シークレットキーが有効なBase32形式でない場合、計算は行われません。
- パラメーター(桁数、期間、カウンター)には整数値のみ使用可能です。
よくある間違い
- 期間やカウンターに小数や文字列、負数を入力するとエラーになります。
- 端末の時計が大きくずれている環境では、TOTPの有効判定が一致しない場合があります。
よくある質問
入力したシークレットキーは保存されますか?
ツール上で計算処理のみが行われ、結果画面にもシークレットは出力されません。
HOTPのカウンター値はどのように指定しますか?
0以上の整数を指定します。認証を試行するたびにカウンター値を1ずつ増やして計算します。
Base32の小文字やパディング文字は使えますか?
はい。大文字への変換や不要なスペースの除去が自動で行われます。