HOTPジェネレーター
Base32のシークレットから、任意のカウンターのHOTPワンタイムパスワードを生成。SHA-1/256/512、6〜8桁に対応し、今後のコードも一覧表示。RFC 4226のベクターで検証済みです。
2FA 設定時にサービスが表示するキーです。スペースや小文字が含まれていても構いません。
HOTP(RFC 4226):8 バイトのカウンターをキーで HMAC し、動的切り詰めの後 10^桁数 で剰余をとります。サーバーとトークンはそれぞれカウンターを持ち、コードを使うたびに進めます。
すべてブラウザ内で実行されます。データがアップロードされることはありません。
HOTPジェネレーターとは?
HOTPは、カウンターが増えるたびに新しいワンタイムパスワードを生成します。YubiKeyのOATH-HOTPや一部のハードウェアトークンで使われています。このツールは任意のカウンター値のコードを計算し、続くコードも一覧表示するので、再同期やサーバーのテストに使えます。
HOTPジェネレーターの使い方
- シークレットキー(Base32)を貼り付けるか、新しいランダムなキーをクリックします。
- アルゴリズムと桁数を設定します。
- カウンターと表示するコード数を入力します。
- 最初のコードをコピーするか、カウンター → コードの表を確認します。
例
Secret GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ, SHA-1, 6 digits, counter 0
755224 (then 287082, 359152, 969429, 338314 for counters 1–4)
RFC 4226 付録Dのテスト値です。
HOTPジェネレーターを使うべき場面
HOTP実装のテスト、トークンのカウンターの再同期、ワンタイムパスワードの導出方法の学習に使います。ほとんどのアプリが使う時間ベースのコードには、TOTPジェネレーターを使ってください。
HOTPジェネレーターの仕組み
HOTP(K, C) = Truncate(HMAC(K, C)) mod 10^桁数 で、Cは8バイトのビッグエンディアンのカウンターです。動的切り捨ては、HMACの最後のバイトの下位4ビットで示されるオフセットから4バイトを取り、最上位ビットをクリアします。HMACはWeb Crypto APIで計算され、RFC 4226の付録Dの値はすべて再現されます。
一般的な使用例
- HOTPログイン実装のテスト
- 同期がずれたハードウェアトークンのカウンターの特定
- RFC 4226のテスト値の再現
- 動的切り捨てのステップの説明
よくある質問
HOTPとTOTPの違いは何ですか?
HOTPはコードを生成するたびに増えるイベントカウンターを使い、TOTPは現在時刻を周期で割った値をカウンターとして使います。
カウンターの同期がずれるとどうなりますか?
サーバーは通常、数個先までのカウンター値を受け付ける先読み範囲を持ち、一致したものに再同期します。
どのシークレット形式が必要ですか?
Base32(RFC 4648)です。otpauth:// URIや認証アプリの設定画面で使われるのと同じ形式です。