ツール
入力
結果
結果はここに表示されます。二段階認証のログインを実装したりデバッグしたりするとき、スマートフォンを取り出さずにサーバーが期待しているコードを確認したい場面があります。Base32 のシークレットか完全な otpauth:// URI を貼り付けると、このツールは現在の 30 秒枠のコード、その残り秒数、前後の枠のコードを表示します。入力を空のまま実行すると、新しい 160 ビットのシークレットと otpauth:// URI を作成し、必要なら認証アプリで読み取れる QR コードも表示します。計算には、ブラウザ、Node、Deno、Bun で動く保守中の HOTP/TOTP ライブラリ otpauth(hectorm/otpauth、MIT)を使っています。
動作のしくみ
- コードは RFC 6238 に従います。Unix 時刻を周期で割った値をカウンターとし、シークレットで HMAC-SHA1(または SHA-256/512)を計算し、RFC 4226 の方法で 6 桁または 8 桁に切り詰めます。
- otpauth:// URI は独自のアルゴリズム、桁数、周期を持っており、それがドロップダウンより優先されます。Base32 シークレットだけのときは、ドロップダウンと発行者、アカウントから URI を組み立てます。
- 前のコードも表示するのは、多くのサーバーが前後 1 ステップの時刻ずれを許容するためです。端末のコードが「前」と一致する場合、たいていは端末の時計が遅れています。
- QR プレビューは otpauth:// URI 全体をエンコードしたもので、スイッチをオンにしたときだけ qrcode パッケージで描画されます。
データの行き先
どこにも行きません。このツールは完全にブラウザ内で動作します。貼り付けたテキストはページが処理し、サーバーに送信されることも、ログに記録されることもありません。
このツールは鍵や資格情報を扱うため、実行に関する情報は一切保存されません。あなた自身の履歴にも残りません。
必要なポイント
このツールは無料です。ログインもポイントも必要ありません。
よくある質問
- アプリに表示されるコードがこのページと違います。なぜですか?
- ほとんどは時刻かパラメーターの不一致が原因です。まず端末の時刻が自動設定になっているか確認してください。30 秒ずれたスマートフォンは常に 1 つ前のコードを表示します。次にアルゴリズム、桁数、周期を確認します。多くの認証アプリは SHA1、6 桁、30 秒しか扱わず、それ以外の値を黙って無視するため、SHA-256 や 8 桁で設定されたサーバーはアプリのコードを拒否します。
- TOTP のシークレットはどのくらいの長さが必要ですか?
- RFC 4226 は最低 128 ビットを求め、160 ビット(Base32 で 32 文字)を推奨しています。これより短いものはツールが警告します。よく見かけるデモ用シークレット JBSWY3DPEHPK3PXP はわずか 80 ビットなので、実際のアカウントには決して使わないでください。
- 本物の二段階認証シークレットをここに貼っても安全ですか?
- 計算はこのページ内で行われ、送信も保存もされません。ただし、シークレットは第二要素そのものであり、それを持つ人は誰でも有効なコードを永久に生成できます。共有のパソコンに貼り付けたシークレットは漏えいしたものとみなし、不安があればアカウントを登録し直してください。シークレットを平文で含む QR コードも同様です。
- otpauth:// URI には何が含まれますか?
- 形式は Google Authenticator の Key URI ドキュメントに基づき、otpauth://totp/Issuer:account?secret=BASE32&issuer=Issuer に、任意で algorithm、digits、period パラメーターを付けます。発行者が 2 回出てくるのは意図的で、ラベル内のものは古いアプリ向け、パラメーターは新しいアプリ向けです。これでどちらのアプリでも正しい名前が表示されます。
背後にあるオープンソース
このツールは hectorm/otpauth(MIT)の上で動作しています。同じ処理を自分のプログラムに組み込みたい場合は、そのライブラリを使ってください。
hectorm/otpauth別の呼び方
- TOTP 生成
- 二段階認証 コード 生成
- otpauth URI
- Google Authenticator コード 確認
- ワンタイムパスワード テスト
- RFC 6238