crypto.getRandomValuesで、英字、数字、記号からランダムなパスワードを作ります。
TOTP/HOTP コード生成ツール
ツール自体は英語ですが、このページではお客様の言語でその使い方を説明しています。
TOTP/HOTP コード生成ツール を使用してください
機能の説明
認証アプリと同様に、Base32形式のシークレットに対して、時間ベース(TOTP)またはカウンターベース(HOTP)のワンタイムパスワードを生成し、コードが一致するかどうかを確認します。独自の2FA設定をテストするのに役立ちます。
すべてブラウザ上で動作します。入力した内容は一切アップロードされません。
TOTP/HOTP コード生成ツール の使い方
- シークレットを入力する. 自分のテスト用アカウントのBase32シークレットをSecret key (Base32)に貼り付けるか、Randomを押して新しい32文字のシークレットを作ります。
- アプリの設定に合わせてください. コードの種類(TOTP:時間ベース、またはHOTP:カウンターベース)、アルゴリズム、および桁数を選択してください。ほとんどの認証アプリでは、TOTP、HMAC-SHA-1、および6桁が使用されています。
- コードを表示する. TOTPの場合は、「Start TOTP」を押してください。コードがカウントダウンとともに表示され、1秒ごとに再計算されます。HOTPの場合は、カウンターを設定して「Show HOTP code」を押してください。「Next」を押すと、次のカウンターに移動します。
- コードを確認する. アプリやサーバーから取得したコードを「コードの検証」に入力し、「検証」をタップしてください。判定結果には、コードが一致したかどうか、およびどのタイムステップまたはカウンターに対応するかが表示されます。
- 停止してクリア. 作業が終わったら「停止」を押してください。最後のコードが画面に残ります。秘密のフィールドはご自身で空にしてください。
例
RFC 6238のテスト用シークレット
GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ412568これは、RFC 6238で公開されているテストキー「12345678901234567890」をBase32形式で表記したものです。 このページには、現在の6桁のコードと次のコードが表示されるまでの秒数が表示されています。これは、認証アプリがこのシークレットに対して表示するコードと同じものです。HOTPに切り替えてカウンターを0に設定すると、RFC 4226の最初のテスト値である「755224」が表示されます。
チェック対象
| シグナル | その意味 |
|---|---|
| コード | タイムステップ(TOTP)またはカウンタ(HOTP)のHMACで、RFC 4226およびRFC 6238に準じて6桁または8桁に短縮されたものです。タイプ、アルゴリズム、桁数がすべて一致する場合にのみ、アプリとの照合が成立します。 |
| 更新間隔(Ns) · 時間ステップ N | 現在の30秒間の残り秒数と、デバイスの時計に基づいて算出されたステップ番号が表示されます。時計の時刻がずれている場合、前のコードまたは次のコードが表示されます。 |
| カウンターN · 「次へ」を押す | HOTPモードでは、コードはそのカウンターに紐づいています。各コードは1回のみ使用され、その後、サーバーは次のカウンターを待ち受けます。 |
| Base32ではありません:... | パスワードには、A~Zおよび2~7以外の文字(0、1、8、9など)が含まれています。スペース、ハイフン、および「=」は無視され、小文字も使用可能です。 |
| 秘密はNビットのみである | この秘密鍵は、RFC 4226で求められている128ビット(26 Base32文字)よりも短いものです。コードは表示されますが、このような秘密鍵は推測されやすくなります。 |
| 有効:...と一致する | フィールド内に、現在の時間ステップまたはHOTPカウンタに対応するコードが見つかったことを確認してください。 |
| 前または次のステップで有効 | このコードは、現在時刻の前後30秒間のいずれかのステップに属しています(黄色で表示)。通常、2つのデバイス間にはわずかな時刻のずれがあります。 |
| 一致する結果はありません | 確認した時間ステップもカウンタも一致しません。シークレット、クロック、アルゴリズム、および桁数を確認してください。 |
その他の例
RFC 4226 テストキー、HOTP
GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQコードタイプをHOTP、HMAC-SHA-1、6桁、カウンター0に設定した場合、コードは755224となります。次に、カウンター1の場合、RFC 4226で公開されているテスト値である287082が得られます。
1つ先のコードを確認する
GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQHOTPモードでカウンタが0の状態で、「コードの確認」に287082と入力すると、次のようなメッセージが表示されます。「カウンタ1に対して有効です。カウンタフィールドより1つ先です。」
Base32形式のシークレットではない
0189「Base32 ではない」というエラーメッセージが表示されました:「0」、「1」、「8」、「9」。Base32 では、A~Z の英字と 2~7 の数字のみが使用されるためです。
よくある質問
具体的に何を計算しますか?
現在の時刻から30秒刻みで生成されるTOTPコード(RFC 6238)または、ユーザーが設定したカウンターに基づくHOTPコード(RFC 4226)。HMAC-SHA-1、SHA-256、またはSHA-512を使用し、桁数は6桁または8桁であること。 ほとんどの認証アプリでは、SHA-1および6桁が使用されています。コードの検証では、現在の時刻ステップとその前後1ステップ、またはHOTPカウンターとその後の9ステップを対象とし、A-Zおよび2-7以外の文字を含むシークレットは、メッセージを表示して拒否されます。
TOTPコードでフィッシングを防げますか?
完全には防げません。中間者型(AitM)のフィッシングキットは、入力されたコードをその場で本物のサイトに中継するため、コードはパスワードと一緒に盗まれます。パスキーやFIDO2のセキュリティキーは本物のドメインに結び付けられているため、これに耐性があります。
シークレットはどこかへ送信されたり保存されたりしますか?
いいえ。コードはWeb Crypto APIを使用してブラウザ内で計算されるため、シークレットがアップロードされたり保存されたりすることは一切ありません。TOTPはデバイスの時計に依存しているため、時計の時刻がずれていると異なるコードが生成されます。
RFCと照らし合わせてコードを確認するにはどうすればよいですか?
テストキー「12345678901234567890」を使用してください。Base32表記では「GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ」となります。 HOTP モードでは、カウンタ 0 は 755224、カウンタ 1 は 287082 となります (RFC 4226)。 RFC 6238 では、1970年1月1日 00:00 UTC から 59 秒後の 8 桁の値として 94287082 が記載されています。TOTP モードでは、常に現在の時刻が使用されます。
TOTPとHOTPの違いは何ですか?
HOTP(RFC 4226)は使用回数をカウントします。各コードには、1ずつ増加するカウンターが割り当てられています。TOTP(RFC 6238)は、カウンターが現在の30秒単位の時間ステップに設定されたHOTPであり、そのためコードは時刻に合わせて変化します。
アプリに異なるコードが表示されるのはなぜですか?
まず時計を確認してください。30秒の誤差があるとコードが変わってしまうからです。次に、シークレットに誤字がないか、またそのアカウントがSHA-256、SHA-512、8桁、あるいは時間の代わりにカウンターを使用しているかを確認し、ここで同じオプションを設定してください。
本物の2FAシークレットをここに貼り付けてもよいですか?
避けてください。シークレットはブラウザ内にとどまりますが、それを見たりコピーしたりした人は、そのアカウントの2FAをリセットするまであなたのコードを生成できます。2FAを新しいスマートフォンに移すには、アカウント自体の移行またはリセットの機能を使ってください。