HOTPジェネレーター

Base32のシークレットから、任意のカウンターのHOTPワンタイムパスワードを生成。SHA-1/256/512、6〜8桁に対応し、今後のコードも一覧表示。RFC 4226のベクターで検証済みです。

2FA 設定時にサービスが表示するキーです。スペースや小文字が含まれていても構いません。

HOTP(RFC 4226):8 バイトのカウンターをキーで HMAC し、動的切り詰めの後 10^桁数 で剰余をとります。サーバーとトークンはそれぞれカウンターを持ち、コードを使うたびに進めます。

すべてブラウザ内で実行されます。データがアップロードされることはありません。

HOTPジェネレーターとは?

HOTPは、カウンターが増えるたびに新しいワンタイムパスワードを生成します。YubiKeyのOATH-HOTPや一部のハードウェアトークンで使われています。このツールは任意のカウンター値のコードを計算し、続くコードも一覧表示するので、再同期やサーバーのテストに使えます。

HOTPジェネレーターの使い方

  1. シークレットキー(Base32)を貼り付けるか、新しいランダムなキーをクリックします。
  2. アルゴリズムと桁数を設定します。
  3. カウンターと表示するコード数を入力します。
  4. 最初のコードをコピーするか、カウンター → コードの表を確認します。

例

入力
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や認証アプリの設定画面で使われるのと同じ形式です。

他のカテゴリを見る