ITを整える
中級2段階認証(TOTP)を整える。
= スマホの認証アプリが出す6桁の数字の正体
パスワードの「もう一押し」が2段階認証。SMS・認証アプリ・パスキーの違いを整理し、認証アプリが出す6桁コード(TOTP)が何者かを、実際にブラウザ内で再現します。秘密鍵を貼り付けると、お使いのアプリと同じ数字が30秒ごとに回ります。送信ゼロ。
TLDR — 30秒で分かる
認証アプリの6桁コードの正体を、秘密鍵を貼って実際にブラウザ内で再現。SMS・TOTP・パスキーの強さの違いも一目で。秘密鍵は送信されません。
主な機能を見る
- Base32 秘密鍵 / otpauth:// URI から TOTP を生成
- アプリと同じ30秒ごとの6桁を実時間で更新+カウントダウン
- ワンクリックでコードをコピー
- SMS / 認証アプリ / パスキーの強さ比較表
- 秘密鍵は送信ゼロ(Web Crypto・RFC6238準拠)
端末・アプリ
Authenticator
サービス
サーバ
あなた
ログイン画面
サービス
サーバ
STEP 1
※ イメージ図です。下の「ライブ生成」と「仮想ログイン」で、実際に動かして確かめられます。
秘密鍵(Base32)
認証アプリの「設定キー」を貼り付けます。空白・ハイフン・大小は気にしなくて大丈夫。 この鍵はブラウザの外に出ません。
▸ QRコード(otpauth://)から取り込む — 上級・任意
otpauth:// は、2段階認証を登録するときに表示される QRコードの中身(秘密鍵や発行元が入った文字列)です。 スマホでQRを読めないときに、PCでこの文字列から秘密鍵を取り込むために使います。 分からなければ空欄でOK — 上の「秘密鍵」だけで動きます。
いまの6桁コード
この6桁は「秘密鍵」と「いまの時刻(30秒のコマ)」だけから計算されます。 だからサーバと通信せずに、あなたのスマホのアプリと同じ数字が出ます。30秒ごとに変わるのは、時刻のコマが進むから。
体験:ログインしてみる(仮想)
その6桁で、本当にログインできる?
「サーバ役」になりきって、ログイン時の答え合わせを再現します。上で出ている6桁を入れれば成功、 違う数字や時間切れのコードなら失敗。本物のログインで起きていることが、そのまま見えます。 この照合もすべてブラウザ内。どこにも送信されません。
コードを入れて
「ログイン」を押すと
ここに結果が出ます
2つ目の鍵、3つの選び方。
2FA は「パスワード(知っている)+ もう1要素」。その「もう1要素」に何を使うかで強さが変わります。
| 方式 | 強さ | 仕組み | 弱点・注意 |
|---|---|---|---|
| SMS ショートメール | 弱 | ログイン時に届く数字を入力 | SIM スワップ(番号乗っ取り)や、画面の盗み見・偽サイトでの中継に弱い。それでも「なし」よりはずっと安全。 |
| 認証アプリ TOTP・本ツールで実演 | 中 | 秘密鍵+時刻から30秒ごとの6桁を端末内で生成(通信不要) | 標準(RFC 6238)。通信を介さず SMS より安全。ただし偽サイトに自分でコードを入力してしまうと中継される。機種変時は移行を忘れずに。 |
| パスキー FIDO2 / WebAuthn | 強 | 公開鍵暗号+生体認証。サイトのドメインに紐づくため偽サイトでは動かない | フィッシング耐性が高いのが最大の利点。入力する数字がないので盗み見・中継も困難。対応サービスはまずこれを選ぶのがおすすめ。 |
この6桁の作りかた(TOTP)
通信なしで「同じ数字」が出る、その仕組み。
- 1
秘密鍵を、サーバとスマホで共有しておく
登録時の QR コード(や設定キー)が、その共有の秘密鍵。これ以降は通信せず、両者が「同じ鍵」を持っている状態になります。
- 2
いまの時刻を「30秒のコマ」に切る
現在の Unix 時刻 ÷ 30 の整数部が「何コマ目か」。世界中で時計が合っていれば、サーバもスマホも同じコマ番号になります。
- 3
鍵 × コマ番号 を「ハッシュ」にかける
HMAC-SHA1(鍵, コマ番号) で 20 バイトの値を計算。鍵が同じ・コマ番号が同じなら、必ず同じ結果になります。
- 4
そこから6桁を切り出す
決められたルール(動的トランケーション)で 4 バイトを取り出し、÷ 1,000,000 の余りで6桁に。これが画面の数字です。次のコマに進めば、別の6桁に変わります。
⚠ 大事なポイント
ログイン側は、サーバが自分でも同じ計算をして照合するだけ。コード自体を送って答え合わせするので、秘密鍵がネットを流れることはありません。だからこのページも、秘密鍵をサーバに送らず同じ数字を出せます。
💡 規格は RFC 6238(TOTP)/ RFC 4226(HOTP)。本ツールは Web Crypto API でブラウザ内計算しており、既知のテストベクタ(秘密鍵 = "12345678901234567890" の Base32、時刻 59 秒 → 287082)と一致することを確認済みです。秘密鍵・コードは保存も送信もされません。
📖 このツールで使う用語
用語集トップへ →分からない用語があれば、クリックして解説をご覧ください。
よくある質問
- Q. 入力した秘密鍵はどこかに送られますか?
- A. いいえ。秘密鍵もコードもサーバには送信されず、すべてお使いのブラウザ内(Web Crypto API)で計算されます。保存もしません。ページを閉じれば何も残りません。
- Q. なぜ通信していないのに、アプリと同じ数字が出るのですか?
- A. TOTP は「共有された秘密鍵」と「いまの時刻(30秒のコマ)」だけから計算するためです。両者が同じ鍵を持ち時計が合っていれば、通信せずに必ず同じ6桁になります。
- Q. コードが30秒ごとに変わるのはなぜですか?
- A. 時刻を30秒ごとのコマに区切り、そのコマ番号を計算に使うからです。コマが進むたびに別の6桁になります。残り時間はリングで確認できます。
- Q. 自分のスマホアプリと数字がずれます。
- A. 多くは端末の時計のずれが原因です。スマホやPCの時刻を自動設定(NTP同期)にしてください。秘密鍵の打ち間違い(O と 0、I と 1 など)でもずれます。
- Q. SMS・認証アプリ・パスキーのどれを選べばいいですか?
- A. 対応していれば最も安全なパスキーが第一候補です。なければ認証アプリ(本ツールの TOTP)、それも無理なら SMS。SMS でも「2段階なし」よりはずっと安全です。
- Q. 認証アプリ(TOTP)は完全に安全ですか?
- A. SMS より安全ですが万能ではありません。偽サイトに自分でコードを入力してしまうと中継される恐れがあります。フィッシングまで防ぎたい場合はパスキーが有効です。
- Q. otpauth:// の URI とは何ですか?
- A. 認証アプリの登録 QR コードに埋め込まれている文字列で、秘密鍵や発行元が含まれます。スマホで QR を読めないときに、PC でこの文字列から秘密鍵を取り込むために使います。分からなければ空欄で問題ありません(上の「秘密鍵」だけで動きます)。
- Q. 「仮想ログイン」で少し前のコードでも成功するのはなぜ?
- A. 実際のログインサーバは、端末とサーバの時計が数秒ずれていてもログインできるよう、前後1コマ(約±30秒)までを「正しい」と認めるのが一般的です。本ツールの仮想ログインもこれを再現しているため、直前のコードでも成功することがあります(その場合は「1コマ分のズレを許容して一致」と表示します)。さらに古いコードは「時間切れ」になります。
入力値はURLの「#」以降に入るためサーバーには送信されません。リンクを開くと同じ状態を復元します。
RELATED TOOLS
続けて整える