本文へスキップ
totonoe.tech

セキュリティを整える

中級

2段階認証(TOTP)を整える。

= スマホの認証アプリが出す6桁の数字の正体

TOTP が初めての方は、先に そもそも TOTP とは・どんな場面で使うか をどうぞ。

アニメで見る — 2段階認証(TOTP)のしくみ 開くと1ステップずつ動きます
📱

端末・アプリ

Authenticator

🔑 秘密鍵
🕐 いまの時刻
🔢 123 456
🖥️

サービス

サーバ

🔑 同じ秘密鍵
🕐 同じ時刻
🔢 123 456
📱

あなた

ログイン画面

🔢 123 456
🖥️

サービス

サーバ

🔢 正解 123 456
✅ 一致=本人

STEP 1

※ イメージ図です。下の「ライブ生成」と「仮想ログイン」で、実際に動かして確かめられます。

秘密鍵(Base32)

認証アプリの「設定キー」を貼り付けます。空白・ハイフン・大小は気にしなくて大丈夫。 この鍵はブラウザの外に出ません。

▸ QRコード(otpauth://)から取り込む — 上級・任意

otpauth:// は、2段階認証を登録するときに表示される QRコードの中身(秘密鍵や発行元が入った文字列)です。 スマホでQRを読めないときに、PCでこの文字列から秘密鍵を取り込むために使います。 分からなければ空欄でOK — 上の「秘密鍵」だけで動きます。

いまの6桁コード

この6桁は「秘密鍵」と「いまの時刻(30秒のコマ)」だけから計算されます。 だからサーバと通信せずに、あなたのスマホのアプリと同じ数字が出ます。30秒ごとに変わるのは、時刻のコマが進むから。

そもそも TOTP とは

パスワードのほかに、30秒ごとに変わる「もう一つの鍵」を持つ仕組み。

TOTP は Time-based One-Time Password(時間ベースのワンタイムパスワード) の略で、認証アプリに表示される6桁の数字のことです。スマホの認証アプリとサービス側が同じ「秘密の種」と現在時刻から計算するので、通信しなくても同じ数字が出て、30秒ほどで切り替わります。

たとえるなら、パスワードが「家の鍵」、TOTP は「鍵を開けるたびに変わる合言葉」です。鍵を盗まれても、手元のスマホにしか出ない合言葉がなければ入れません。仕組みは RFC 6238 という公開された規格で決まっています。

どこで・どんな場面で使うか

  • Google・Microsoft などのアカウントを守るとき

    メールや書類が入った大事なアカウントほど、パスワードだけにしないのが基本です。認証アプリでのコード入力が選べます。

  • 社内システム・VPN にログインするとき

    リモートワークで社内に入る入口は、狙われやすい場所です。パスワードにコードを足して、入口を固めます。

  • クラウドや GitHub の管理者アカウント

    サーバーやソースコードを預けているアカウントは、乗っ取られると被害が大きくなります。多くのサービスが TOTP に対応しています。

  • 自社サイト・ネットショップの管理画面

    WordPress などの管理画面にも、プラグインで2段階認証を足せます。運営する側の入口を守る使い方です。

  • SNS やショッピングサイトのアカウント

    SMS で届くコードより、認証アプリのほうが選べるサービスが増えています。まずは大事なものから設定します。

知らないと何が困るか

  • 機種変更で入れなくなる。認証アプリの中身は新しいスマホに自動では移らないことがあります。バックアップコードや引き継ぎの手順を先に確認しておかないと、自分のアカウントに入れなくなります。
  • パスワードだけで「十分」と思ってしまう。使い回したパスワードが他のサービスから漏れると、そのまま突破されます。もう一つの鍵があれば、それだけでは入れません。
  • 秘密の種を軽く扱ってしまう。設定時のQRコードや文字列は、そのままコードを作れる情報です。画面写真をチャットに貼る、といった扱いは避けます。

上のツールで秘密鍵を入れて、6桁のコードが30秒ごとに切り替わるようすを確かめてみてください。

体験:ログインしてみる(仮想)

その6桁で、本当にログインできる?

「サーバ役」になりきって、ログイン時の答え合わせを再現します。上で出ている6桁を入れれば成功、 違う数字や時間切れのコードなら失敗。本物のログインで起きていることが、そのまま見えます。 この照合もすべてブラウザ内。どこにも送信されません。

demo-login.example

コードを入れて
「ログイン」を押すと
ここに結果が出ます

2つ目の鍵、3つの選び方。

2FA は「パスワード(知っている)+ もう1要素」。その「もう1要素」に何を使うかで強さが変わります。

方式 強さ 仕組み 弱点・注意
SMS
ショートメール
弱 ログイン時に届く数字を入力 SIM スワップ(番号乗っ取り)や、画面の盗み見・偽サイトでの中継に弱い。それでも「なし」よりはずっと安全。
認証アプリ
TOTP・本ツールで実演
中 秘密鍵+時刻から30秒ごとの6桁を端末内で生成(通信不要) 標準(RFC 6238)。通信を介さず SMS より安全。ただし偽サイトに自分でコードを入力してしまうと中継される。機種変時は移行を忘れずに。
パスキー
FIDO2 / WebAuthn
強 公開鍵暗号+生体認証。サイトのドメインに紐づくため偽サイトでは動かない フィッシング耐性が高いのが最大の利点。入力する数字がないので盗み見・中継も困難。対応サービスはまずこれを選ぶのがおすすめ。

スマホをなくしたときの備え

2段階認証は、スマホをなくした「あと」のことまで決めて初めて完成します。

認証アプリの6桁コードは端末の中の秘密鍵から作られます。端末を失くすと、その鍵ごとログインの手段も無くなります。登録したその場で備えておくのが一番確実です。細かい仕様はサービスによって違います。

  • バックアップコード

    設定時に表示される、使い捨ての予備コードです。印刷するか、パスワードマネージャーに保管します。Google の場合は1セット10個で、使うと無効になり、新しいセットを作ると古いセットは使えなくなります。表示されるかどうか・個数はサービスによって違います。

  • アプリの移行・複数端末への登録

    同じ秘密鍵を2台目の端末にも登録しておけば、1台を失くしても使えます。ただし、サービスによっては QR コードを読む登録の場面でしかできません。後から鍵を見直せないことが多いので、登録時にやっておきます。アプリ側にも移行・同期の機能があります(Google Authenticator は Google アカウントでの同期、またはQRコードでの書き出し/読み込み)。

  • 端末を失くしたときの手順

    1. 別の端末、またはバックアップコードでログインする。
    2. 古い端末の登録を無効にする(サービスの設定、または端末のリモート消去)。
    3. 新しい端末で、認証アプリを登録し直す。
  • 会社のアカウント・復旧用の連絡先

    会社や学校のアカウントは、自分では戻せないことがあります。まず管理者に連絡してください。個人のアカウントも、復旧用のメールアドレスと電話番号を最新にしておきます。

設定前に確かめる

チェックはこの端末のブラウザにだけ残ります(送信しません)。

ログイン画面の守りを全体で整えるなら ログイン画面の守りを整える もどうぞ。

出典(公式ヘルプ): Google「バックアップコードでログインする」 / Google「Google 認証システムの利用」 / Microsoft「Microsoft Authenticator アプリに関する一般的な質問」

この6桁の作りかた(TOTP)

通信なしで「同じ数字」が出る、その仕組み。

  1. 1

    秘密鍵を、サーバとスマホで共有しておく

    登録時の QR コード(や設定キー)が、その共有の秘密鍵。これ以降は通信せず、両者が「同じ鍵」を持っている状態になります。

  2. 2

    いまの時刻を「30秒のコマ」に切る

    現在の Unix 時刻 ÷ 30 の整数部が「何コマ目か」。世界中で時計が合っていれば、サーバもスマホも同じコマ番号になります。

  3. 3

    鍵 × コマ番号 を「ハッシュ」にかける

    HMAC-SHA1(鍵, コマ番号) で 20 バイトの値を計算。鍵が同じ・コマ番号が同じなら、必ず同じ結果になります。

  4. 4

    そこから6桁を切り出す

    決められたルール(動的トランケーション)で 4 バイトを取り出し、÷ 1,000,000 の余りで6桁に。これが画面の数字です。次のコマに進めば、別の6桁に変わります。

⚠ 大事なポイント

ログイン側は、サーバが自分でも同じ計算をして照合するだけ。コード自体を送って答え合わせするので、秘密鍵がネットを流れることはありません。だからこのページも、秘密鍵をサーバに送らず同じ数字を出せます。

💡 規格は RFC 6238(TOTP)/ RFC 4226(HOTP)。本ツールは Web Crypto API でブラウザ内計算しており、既知のテストベクタ(秘密鍵 = "12345678901234567890" の Base32、時刻 59 秒 → 287082)と一致することを確認済みです。秘密鍵・コードは保存も送信もされません。

このツールについて

パスワードの「もう一押し」が2段階認証。SMS・認証アプリ・パスキーの違いを整理し、認証アプリが出す6桁コード(TOTP)が何者かを、実際にブラウザ内で再現します。秘密鍵を貼り付けると、お使いのアプリと同じ数字が30秒ごとに回ります。送信ゼロ。

認証アプリの6桁コードの正体を、秘密鍵を貼って実際にブラウザ内で再現。SMS・TOTP・パスキーの強さの違いも一目で。秘密鍵は送信されません。

🔰 かんたんに言うと

アプリに出る「30秒で変わる6桁の数字」の正体です。2段階認証のしくみを実際に動かして確かめられます。

主な機能

  • Base32 秘密鍵 / otpauth:// URI から TOTP を生成
  • アプリと同じ30秒ごとの6桁を実時間で更新+カウントダウン
  • ワンクリックでコードをコピー
  • SMS / 認証アプリ / パスキーの強さ比較表
  • 秘密鍵は送信ゼロ(Web Crypto・RFC6238準拠)

よくある質問

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の「#」以降に入るためサーバーには送信されません。リンクを開くと同じ状態を復元します。

続けて整える

このツールの解説記事

totonoe.tech を運営する株式会社Koinobori は、法人向けの研修サービス「NOBORIBA®」も運営しています。 ここで手を動かした内容を、講師から教わる形の研修です。このページの道具は無料のまま、登録もいりません。

運営サイト

私たちが運営するサイト