公開サンプルから始める
本ツールを開いた直後に入力欄に表示されている「JBSWY3DPEHPK3PXP」は,TOTPの動作をすぐに確認できるように用意されたサンプルのシークレットキーです.この文字列は,学習用の公開データであり,画面に表示されている6桁のワンタイムパスワードは,同じキーと同じ30秒の時間区間を使えば,同じ数字が計算されます.
そのため,このサンプルキーを使って実際のアカウントの2要素認証(2FA)を設定することは絶対に避けてください.誰でもコードを算出できる状態では,パスワードとしての役割を果たしません.初めて利用する際は,まずこのサンプルキーのまま画面を観察してください.画面下部の30秒の区間が切り替わるタイミングで,上部に表示されている6桁の数字が自動的に新しいものに切り替わる様子を確認できます.
これがTOTP(Time-Based One-Time Password)の基本的な振る舞いです.シークレットキーの文字列と現在時刻という2つの情報が揃うことで,特定の瞬間にだけ有効なパスワードが導き出されます.計算処理そのものはブラウザ内で実行されるため,入力対象の変換処理そのものにおいて外部のサーバーと通信を行うことはありません.
まずはサンプルを通じて,時間経過と連動したコード生成の仕組みを体験してください.
Base32とランダム鍵
TOTPのシークレットキーには,一般的にBase32というエンコード方式が採用されています.Base32は,アルファベットの大文字(A〜Z)と,一部の数字(2〜7)のみを使用してデータを表現する規格です.数字の0と1は使いませんが,英字のOとIは使います.見間違いに注意し,公開サンプルで文字列の形式を確認してください.
本ツールでは,入力されたBase32文字列に対して,大文字・小文字の正規化や,空白文字の自動除去を行ってから計算に用います.また,末尾のパディング(「=」記号)の妥当性も検証し,不適切な文字が含まれている場合は「Base32キーの形式,またはブラウザのWeb Crypto対応を確認してください.
」というエラーメッセージを表示します.画面上の「ランダムなキーを生成」ボタンを押すと,ブラウザが提供するWeb Crypto APIを使用して,暗号学的に偏りのない160ビットのランダムなデータを生成し,それを32文字のBase32文字列として入力欄にセットします.
安全な乱数を生成できない環境では「安全な乱数を生成できません.Web Cryptoに対応したブラウザで利用してください.」と表示されます.この機能はキーの構造を理解するためのものであり,ここで生成したキーを実際のサービスへ登録する用途には推奨されません.
30秒と6桁の仕組み
本ツールは,RFC 6238で定義された仕様に基づき,HMAC-SHA1アルゴリズムを使用したTOTPを計算します.設定値として「30秒のステップ(更新間隔)」と「6桁のコード長」を固定で採用しています.これは,多くの一般的な認証アプリ(Google Authenticatorなど)で標準的に用いられている構成です.
具体的な処理の流れとして,まず1970年1月1日からの経過秒数を30で割り,現在のタイムステップ(カウンター値)を算出します.このカウンター値と,入力されたBase32キーを元のバイナリデータにデコードしたものを組み合わせて,HMAC-SHA1によるハッシュ計算を実行します.
得られた20バイトのハッシュ値から特定の規則(Dynamic Truncation)に従って4バイトを抽出し,最上位ビットを除いた31ビットの数値にして,それを100万(10の6乗)で割った余りを求めることで,最終的な6桁の数字を得ます.実際の画面上では視認性を高めるために,6桁の数字を「123 456」のように3桁ずつ空白で区切って表示しています.
この一連の計算処理はすべてブラウザの内部メモリ上で完結しており,入力対象の変換がブラウザ内で行われる仕組みとなっています.
時計・設定の一致条件
TOTPによる認証が成功するためには,コードを生成する側(本ツール)と,コードを検証する側(認証先サーバー)で,秘密鍵・計算設定が一致し,検証側が受け付ける時間区間に入っている必要があります.それは「シークレットキー」「計算アルゴリズムの設定」,そして「現在時刻」です.
本ツールはHMAC-SHA1,30秒間隔,6桁という設定で固定されています.もし認証先がSHA-256を要求したり,更新間隔を60秒としていたり,8桁のコードを必要とするシステムであった場合,たとえ同じシークレットキーを入力しても,本ツールの固定設定とは照合の前提が異なります.
また,最も頻繁に起こる不一致の原因が「時計のずれ」です.TOTPは端末のローカル時計を基準にタイムステップを計算します.そのため,お使いのパソコンやスマートフォンの時刻設定が数分,あるいは数十秒ずれているだけでも,異なる時間帯のコードを計算してしまいます.正しいシークレットキーを入力しているにもかかわらず,期待されるコードと異なる結果が表示される場合は,まず端末の時計設定を開き,インターネット上の標準タイムサーバーと自動同期されるように設定を見直してから再度計算結果を確認してください.
コピーと残り秒
生成された6桁のコードは,30秒の区間ごとに計算し直されます.実際の認証先が受け付ける時間範囲は,そのシステムの設定に依存します.本ツールの画面中央にあるカウントダウンバーは,現在の30秒間のタイムステップが終了するまでの残り秒数を視覚的に示しています.残り時間が10秒以下になるとバーが黄色に,5秒以下になると赤色に変化し,コードの有効期限が迫っていることを警告します.
6桁の確認コードは空白を除去してクリップボードにコピーされます.コピー成功を確認するか,拒否・非対応時は手動コピー欄からコードを選択してコピーしてください.コードは30秒ごとに失効するため,失効時は再生成後に改めてコピーボタンを押してください(認証成功は保証されません).
ただし,残り秒数がわずかなタイミングでコピーを行った場合,目的のフォームに貼り付けて送信ボタンを押すまでの間にタイムステップが切り替わり,サーバー側で時間切れとして弾かれる可能性があります.操作に余裕を持たせるため,残り時間が少なくなった場合は,急いで操作せずに次の新しいコードが生成されるのを待ってからコピー操作を行うことを強くお勧めします.
秘密鍵保護と認証機能の境界
TOTPのセキュリティモデルは,「シークレットキーが第三者に知られていないこと」を大前提として成立しています.シークレットキーさえ手に入れば,誰でも,どの端末からでも,全く同じ認証コードを計算することが可能になってしまいます.本ツールは,あくまでTOTPの計算メカニズムをブラウザ上でシミュレーションし,その動作を確認するための学習・検証用ユーティリティです.
入力対象のキーをブラウザ内で変換計算する処理によって,キーが外部のサーバーへ送信されることはありません.しかし,実運用の本物のシークレットキーをむやみに貼り付けることは推奨されません.キーをテキストとしてコピー&ペーストする行為自体に,クリップボードの履歴や画面の覗き見(ショルダーハック)による漏洩のリスクが伴うからです.
また,本ツールには認証サーバーとしての検証機能,QRコードの読み取り機能,ログイン機能,ユーザーアカウントへの2FA登録機能などは実装されていません.対象の文字列に対するブラウザ内でのハッシュ処理結果を提供するのみであり,サイト全体の通信状況を断定したり,実際のシステムにおける安全性を担保するものではない点にご留意ください.