TOTPジェネレーター
Google 認証システム(Google Authenticator)やAuthyが30秒ごとに変わる6桁のコードを表示するとき、それがTOTPです。共有シークレットと現在のUnix時間から計算されるHMACで、RFC 6238として標準化されています。このジェネレーターは任意のBase32シークレットから同じコードを計算するので、新しい二段階認証(2FA)連携のデバッグ、サービスがコードを拒否する原因の切り分け、パラメーターを変えたときのアルゴリズムの挙動確認に役立ちます。使うのはテスト用シークレットにしてください。コードは当社のサーバーで計算されるため、アカウントを守る本物のシークレットの置き場所はWebページではなく認証アプリです。
このTOTPジェネレーターの使い方
-
1
Base32シークレットを貼り付ける
A~Zの文字と2~7の数字で、otpauth:// QRコードの中で使われる形式です。スペースと小文字は問題ありません。それ以外の文字は無効なBase32として表示されます。
-
2
ハッシュアルゴリズムを選ぶ
ほぼすべてのサービスがSHA-1を使います。SHA-256やSHA-512に切り替えるのは、サービスが明示的に要求している場合だけにしてください。
-
3
桁数と期間を設定する
6桁・7桁・8桁と、30秒または60秒のウィンドウを選びます。標準の組み合わせは30秒ごとの6桁です。
-
4
現在のコードを読み取る
コードは毎秒更新され、カウントダウンが現在のウィンドウの残り秒数を表示します。
-
5
otpauth URIを比較する
設定したパラメーターに対応するotpauth:// URIを表示するので、サービスのセットアップQRコードがエンコードしている内容と照合できます。
アルゴリズムをやさしい言葉で
TOTPはHOTP(HMACベースのワンタイムパスワード、RFC 4226)のカウンターを、現在のUnix時間をタイムステップ(通常30秒)で割った値に置き換えたものです。
counter = floor(unix_time / 30)
hash = HMAC-SHA1(secret, counter_as_8_byte_big_endian)
offset = last byte of hash AND 0x0F
truncated = 4 bytes from offset, with the top bit zeroed
code = truncated mod 10^digits
デバイスとサーバーが同じシークレットと同じ時計で同じ計算をするため、コード自体をどこにも送らずに両者が同じコードにたどり着きます。6桁のコードは、切り詰めたHMACを10^6で割った余りにすぎません。魔法ではなく、ただのハッシュ計算です。
一般的なパラメーター
| サービス | アルゴリズム | 桁数 | 期間 |
|---|---|---|---|
| ほとんどのサイトとアプリ | SHA-1 | 6 | 30秒 |
| GitHub | SHA-1 | 6 | 30秒 |
| Cloudflare | SHA-1 | 6 | 30秒 |
| Microsoftアカウント | SHA-1 | 6 | 30秒 |
| 一部の銀行や企業VPN | SHA-256またはSHA-512 | 8 | 60秒 |
サービスにコードを拒否されたら、まず桁数と期間、次にアルゴリズムを確認してください。また、一部の認証アプリは標準外のパラメーターを黙って無視します(Google 認証システムは歴史的にすべてをSHA-1・6桁・30秒として扱っていました)。必ず、利用者が実際に使うアプリそのもので試してください。
シークレットを安全に保管する
- 2FAシークレットをメールやメッセージで送らない。 受信トレイに入った瞬間から、プロバイダーのログとバックアップに残り続けます。
- 登録はQRコードのスキャンで行う。 QRコードには、シークレット・アルゴリズム・桁数・期間を一つの明確なパッケージにまとめた
otpauth://totp/...URIが入っています。 - 登録した時点でバックアップする。 復元コード、またはシークレットそのものをパスワードマネージャーに保管してください。それが無いままスマートフォンを失うと、締め出されます。
- サービスごとにシークレットは一つ。 どのサービスも設定時に固有のシークレットを発行します。漏えいしたら、そのサービスで2FAを登録し直して古いシークレットを無効にしてください。
時刻のずれ
TOTPは双方の時計が一致している間だけ機能します。このページはサーバーの時計でコードを計算するため、ここのコードがスマートフォンの認証アプリと違う場合、最初に疑うべきはデバイスの時計です。ほとんどの検証システムは前後1ウィンドウ(30~60秒)のずれを許容します。それを超えるなら、シークレットを疑う前にデバイスの時刻をNTPで同期してください。
ここではテスト用シークレットを使う
このツールはコードを当社のサーバーで計算します。入力したシークレットは更新のたびにHTTPSで送信され、ツールのステップを移動するとページのURLにも現れます。使い捨てのシークレットでの開発・デモ・デバッグにはそれで十分です。しかし、メールや銀行口座を守っている本物のシークレットを入れる場所ではありません。それはスマートフォンの専用認証アプリに置くべきものです。もし本物のシークレットを認証アプリの外に貼り付けてしまったなら、そのサービスで2FAを登録し直してシークレットを更新してください。
よくある質問
このページは金庫ではなく、開発・テスト用のユーティリティとして扱ってください。コードはサーバー側で計算されるため、シークレットはHTTPSで当社のサーバーへ送られ、ステップ間ではページのURLに現れることがあります。デモや開発用のシークレットなら自由に使えますが、大切なアカウントの本物のシークレットは決して貼り付けないでください。すでに貼り付けてしまった場合は、そのサービスで2FAを登録し直してシークレットを交換してください。
まずパラメーターを確認してください。アルゴリズム・桁数・期間は、サービスが発行した値と完全に一致している必要があります。次に時計です。このページはサーバーの時計を使うので、ずれている場合はたいてい相手側デバイスの時計が原因です。最後に、一部のアプリが標準外パラメーターを無視することも思い出してください。代表例はGoogle 認証システムです。
Base32のみです。AからZの文字と2から7の数字で、=のパディングは任意です。スペースは取り除かれ、小文字は自動的に変換されます。16進数や生バイトのシークレットは先にBase32へ変換してください。そうでないと無効なBase32シークレットと表示されます。
そのアカウントの2FAから締め出されます。サービスの復旧手続き(復元コード、本人確認、SMSによる代替手段)を使ってください。設定時には、復元コードか最初のQRコードを必ず安全な場所に保管しておきましょう。
使えます。サーバー側で128ビット以上(RFC 4226は160ビットを推奨)のランダムなシークレットを生成し、QRコードとして一度だけ表示し、送信されたコードは同じHMACを計算して検証します。通常は前後1ウィンドウの許容幅を設けます。成熟したライブラリがどのスタックにもあります:pyotp(Python)、otplib(JavaScript)、rotp(Ruby)。
関連ツール
GweiからEtherへの変換ツール
Gwei単位の金額をEther(ETH)に最大18桁の小数で変換します。ガス料金の推定や取引データの読み取りに役立ちます。
チェックサム検証
任意のファイルやテキストの MD5、SHA-1、SHA-256、SHA-384、SHA-512、CRC-32 チェックサムを計算し、公開者が掲載している値と比較して一致・不一致を明確に判定します。
JWTジェネレーター
カスタムのヘッダー、ペイロードのクレーム、HMACまたはRSA署名、有効期限、オーディエンス制限を備えた、署名済みJWTをテスト用に生成します。
HMACジェネレーター
メッセージと秘密鍵から、API認証やWebhook向けのHMAC署名(SHA-256、SHA-384、SHA-512、SHA-1、MD5)を生成します。
MD5ジェネレーター
任意のテキストまたはファイルからMD5ハッシュを生成します。128ビットの出力を16進数で表示し、すべてブラウザー内で計算します。
暗号化識別子
暗号文またはハッシュ値を貼り付けると、識別子からMD5、SHA、bcrypt、AES、RSA、Base64などの推定されるアルゴリズムや符号化方式が示されます。
このツールは他の言語でも利用できます
- ตัวสร้าง TOTP [TH]
- Generador TOTP [ES]
- Generator TOTP [PL]
- Gerador TOTP [PT]
- TOTP-generator [SV]
- Bộ tạo TOTP [VI]
- مولد TOTP [AR]
- Générateur TOTP [FR]
- TOTP-Generator [DE]
- Generator TOTP [ID]
- TOTP 생성기 [KO]
- TOTP-generator [NL]
- TOTP Üretici [TR]
- TOTP 生成器 [ZH]
- TOTP Generator [EN]
- Generatore TOTP [IT]
- Генератор TOTP [RU]