解説
2FAとは?30秒ごとに変わるあのコードは、いったいどう動いているのか?
やさしい日本語による完全解説:二段階認証とは何か、6桁の TOTP コードの背後にある暗号技術、 どのアカウントにどの要素を設定すべきか、そして二段階認証で二度とロックアウトされないための方法。
パスワードだけではなぜ失敗するのか
あらゆるログインはパスワードを必要とします。そしてパスワードには、3つの構造的な問題があります。使い回されること、 流出済みのデータベースを突かれて推測されること(クレデンシャルスタッフィング)、そしてフィッシングで騙し取られること。二段階認証(2FA)は「人間が最も弱いリンク」という単純な真実を受け入れ、攻撃者が 同時に手にしなければならない第二の独立したものを追加します。2FAがあれば、漏えいしたパスワードだけでは もうあなたのアカウントに入り込めません。
現在、大手サービスのほとんどは二段階認証を提供するか義務化しています。GitHub は2023年以降これを強制し、 暗号資産取引所(Binance、Coinbase、Kraken)は相場の急落のたびに有効化を促し、Microsoft、Google、Apple は アカウントセキュリティの標準機能として組み込みました。
3つの認証要素
認証要素は3つのカテゴリに分けられます。
- 知っているもの — パスワード、PIN。導入が安価で、フィッシングされやすい。
- 持っているもの — コードを生成する認証アプリ、ハードウェアセキュリティキーやパスキー、 SMSを受け取るスマホ。2FAの担い手はここです。
- 自分であること — 指紋、顔認証。便利ですが、端末上で登録するものであり、リモート認証の主役という位置づけではありません。
本当の二要素認証は、異なるカテゴリの技術を組み合わせます。パスワード+スマホのパターンロックは2FAでは ありません。パスワード+ローテーションする認証コードなら、2FAです。
TOTPの仕組み、ステップバイステップ
- 登録。サービスで2FAをオンにすると、ランダムなシークレットが生成され、一度だけあなたと 共有されます — QRコードとして描画されるか、Base32 のセットアップキーとして表示される形で。セキュリティの観点では、 この一瞬がすべてのリスクを背負う場面です。だからこそ、鍵を表示させるのは信頼できる場所だけにすべきなのです。
- 時間が進む。現在時刻は30秒単位の「ステップ」に区切られます:
step = floor(unixTime / 30)。30秒に特別な意味はありません。RFC 6238 は15秒、30秒、60秒の いずれも認めています。 - HMAC。認証アプリは、シークレットを鍵として、ステップ値の上に HMAC ハッシュを計算します (多くのサービスは SHA-1、まれに SHA-256/512)。HMAC は一方向の構成であり、結果を見てもシークレットに ついて何も分かりません。
- 桁の取り出し。HMAC 出力の4バイトが末尾のニブルで選択され、最上位ビットをクリアした結果を 10n で割った余りがコードになります — 通常は
n= 6、まれに7桁や8桁です。 - 検証の許容範囲。サーバーは現在と直前のステップで同じ値を再計算し(わずかな時計のずれを 許容するため)、一致した証拠はログインとして受理されます。
これらすべてはマイクロ秒のうちに、完全に端末内で完了します。だからこそ、2FA COUNTERのようなクライアントサイドのツールがすべての処理をローカルで行えるのです — ページを読み込んでネットから切断しても、 コードは30秒ごとに、永遠に流れ出し続けます。
シークレットとQRコード
Base32 文字列は、けして何かの中間形式ではありません。シークレットという生のバイト列を、スマホとの相性が良い アルファベット(A–Z と 2–7。紛らわしい 0/1 を意図的に除外した、どのキーボードでも安全な文字だけ)で符号化したもの です。プラットフォームが「スキャンできない場合」を提示するとき、表示される文字列には QR コードが符号化しているのと同じプライベートな情報が入っています。どちらの形式を保存しても、意味はまったく同じです。
otpauth://totp/GitHub:you%40example.com?secret=JBSWY3DPEHPK3PXP&issuer=GitHub
otpauth://totp/Binance:me?secret=JBSWY3DPEHPK3PXP&digits=6&period=30&algorithm=SHA1
otpauth://hotp/Steam:sda?secret=...&counter=5 ← カウンタ方式(HOTP)のバリアントモダンなジェネレーターは、あらゆるパラメータを尊重します。桁数、周期、ハッシュアルゴリズム、HOTP カウンタ — SHA-256 を指定するサービスは、デフォルトの SHA-1 で作られたコードを依然として拒否するからです。Base32 の鍵だけを 渡した場合のデフォルトは6桁・30秒・SHA-1で、大多数のサービスがこのデフォルトを使っています。
TOTP vs. SMS vs. ハードウェアキー
- SMSコードは電話回線を横切ります。SIMスワップ攻撃を仕掛けられれば、攻撃者はあなたの電話番号を乗っ取り、すべてのコードを受け取れます。SMS は米国の標準(NIST SP 800-63B)では認証手段として非推奨です。
- TOTPは何も送信しません — コードはローカルで計算され、30秒で失効します。無料で、標準に基づき、あらゆる場所で対応しています。弱点は、有効期間中にフィッシングされ得ることです。
- セキュリティキーとパスキー(WebAuthn/FIDO2)は正確なドメインに暗号的に紐付くため、偽の類似ページは自動的に失敗します。最強の選択肢ですが、対応範囲は限られ、キーを買うコストがかかります。
実践的な階梯:SMS はどうしても必要なときだけ、TOTP をデフォルトに、最も大事なアカウントには ハードウェアキーかパスキーを。
トレードオフについては、専用記事で深掘りしています: TOTP vs. パスキー — どの要素をどこへ配置すべきか、 SIMスワップ攻撃はどう SMS コードを破るのか、そして アプリのクラウド同期がシークレットキーに何をもたらすのか。
2FAで解決できないこと
二段階認証が解決するのはパスワードの盗難です。セッションクッキーの盗難(あなたの端末で既に動いている マルウェア)、過剰な権限を持つブラウザ拡張、管理を失ったリカバリー用メール、そして攻撃者が30秒の有効期間中に 新しいコードを読み上げさせるソーシャルエンジニアリングまでは防げません。ブラウザは常に最新に保ち、拡張機能は 容赦なく整理し、「コードを読み上げて」といった狼狽した要求は、疑似画面と同じく赤い旗として扱いましょう。
二度とロックアウトされない方法
- リカバリーコードを保存する。すべてのサービスは、2FAを有効にしたときに一回限りのリカバリー コード一式を表示します。印刷するか、暗号化してオフラインに保管しましょう。
- ツールだけでなく、鍵を残す。Base32 の鍵をパスワードマネージャーの金庫に書き留めておけば、 どの認証アプリでも — スマホのアプリでも、ブラウザのジェネレーターでも — その日使える端末でコードを再生成できます。
- 端末は2台登録する。鍵は、信頼できる2台の端末に同時に置いて安全です。TOTP は決定論的です。 同じシークレットなら、同じコード。
- 時計を確認する。コードが繰り返し拒否されるなら、まず端末の時刻同期を直しましょう — 「コードが無効です」エラーの最有力原因であり、どんなツールにも回避策はありません。
FAQ
2FAとは何ですか?
2FA(二段階認証)とは、2種類の異なる証拠で「自分であること」を証明する仕組みです。知っているもの(パスワード)に加えて、持っているもの(30秒ごとに変わるコード、セキュリティキー、スマホ)を組み合わせます。パスワード単体は漏えいしたり推測されたりする恐れがありますが、第二の要素が加われば、漏えいしたパスワードだけではアカウントを開けられなくなります。
2FAがこれほど重要なのはなぜですか?
パスワードが、絶えず同じ経路で破られてきたからです。数十億件の実在するパスワードが情報流出事件で公開済みであり、攻撃者はそれを使って昼夜を問わず他人のアカウントへのログインを試みます(クレデンシャルスタッフィング)。Microsoft の報告によれば、2FAは自動化されたアカウント乗っ取り攻撃の99.9%以上を防ぎます。現実に起こる脅威から、メール・銀行・SNS・ゲーム・暗号資産のアカウントを守れるのです。
2FAは何に使われていますか?
ログインを狙われるあらゆる窓口を守ります。メールとクラウド(Google、Microsoft、Apple)、銀行・金融、暗号資産取引所(Binance、Coinbase、Kraken)、開発者向けプラットフォーム(GitHub、AWS)、ゲーム(Steam、Discord、Twitch)、SNS(X、Instagram)など。職場でも VPN、メール、管理コンソールに使われています。サービスに「認証アプリ」の選択肢がある限り、2FAが最適な手段です。
2FAの仕組みはどうなっていますか?
パスワードの入力後、サービスは本人確認の第二の証明を求めてきます。最も一般的な方式(TOTP)では、認証アプリが共有シークレットと現在時刻から新しい6桁のコードを算出し(RFC 6238 標準)、サーバー側でもまったく同じ計算を行って結果を照合します。コードは30秒ごとに再生成され、二度と再利用できないため、パスワードだけを手にした攻撃者はログインできません。
TOTPコードはどのように生成されますか?
ウェブサイトがシークレットキーを発行します(通常はQRコードの形、または Base32 文字列の形)。認証アプリはそのシークレットを使い、現在の30秒単位の時間窗口に対して HMAC(SHA-1、まれに SHA-256/SHA-512)を計算し、その結果から6桁の数字を読み出します。ウェブサイト側でまったく同じ計算と比較が行われます。両者がすでにシークレットを共有しているため、ネットワーク通信は一切不要です。
2FAを導入するにはどうすればいいですか?
保護したいアカウントから始めます。設定を開き、「セキュリティ」や「ログインとセキュリティ」の中から「二段階認証」や「2段階認証(2ステップ認証)」の項目を探します。認証アプリの選択肢を選び、QRコードを読み取るか(または「スキャンできない場合」からセットアップキーを表示させて)、認証アプリに表示されたコードを入力して確定します。スマホなしでコードを取得する手順は、ステップバイステップの解説記事 /ja/how-to-get-2fa-code/ をご覧ください。
2FAを有効にするにはどうすればいいですか?
手順は4つです。1) サービスのアカウント設定またはセキュリティ設定を開き、「二段階認証」を選択する。2) 「認証アプリを使う」を選ぶ(可能なら SMS は避けましょう)。3) 認証アプリでQRコードを読み取るか、「スキャンできない場合」からセットアップキーを保存する。4) ライブコードを入力して完了したら、表示されるリカバリーコード(バックアップコード)をダウンロードまたは印刷します。Google、GitHub、Discord、Binance などのサービス別ガイドは /guides/ で公開しています。
2FAの強度はどのくらいですか?
第二の要素に何を使うかで決まります。SMSコードが最も弱く、SIMスワップ攻撃で電話番号を乗っ取られるとコードも横取りされます。TOTP認証コード(30秒ごとに切り替わるタイプ)は計算量的に強固で、オフラインの攻撃者には導出できず、ライブコードは数秒で失効します。ハードウェアセキュリティキーとパスキーが最強で、フィッシング耐性があり、本来のドメインに暗号的に紐付いています。
2FAは100%安全ですか?
いいえ。100%安全なセキュリティ対策は存在せず、誠実な2FA解説はそう明言しています。2FAは盗まれたパスワードをほぼ無力化しますが、コードそのものは有効な30秒の間に偽サイトへ入力されればフィッシングに悪用され得ますし、端末で既に動いているマルウェアはセッションを盗めますし、SMSを第二要素にしていればSIMスワップは現実の脅威です。それでも、2FAを有効にすれば、パスワードだけのアカウントよりはるかに攻撃されにくくなります。
2FAは義務ですか?
法律で義務化しているわけではありませんが、強制にするサービスは増え続けています。GitHub は2023年以降コードの投稿者に必須としており、多くの銀行や暗号資産取引所は強制にしており、職場のログインで求められるのも一般的です。それ以外では任意ですが、強く推奨されます。実際には、最も価値のあるアカウント — まずメール — では2FAを必須として扱いましょう。受信箱を乗っ取られると、それ以外のすべてのパスワードをリセットされてしまいます。
なぜ今はどこも2FAを使うのですか?
パスワードだけの時代が失敗したからです。大規模な情報流出事件で数十億件の認証情報が晒され、クレデンシャルスタッフィング攻撃は自動化されてほぼ無償で行えるようになり、プラットフォーム側も乗っ取られたアカウントのコストを負担するようになりました。規制も後押ししています。米国 NIST の標準は SMS 認証を非推奨とし、EU の PSD2 は強力な顧客認証を義務付けています。数社の大手が2FAを普通にしてしまえば、他のサービスが続くのは自然の成り行きです。
TOTP、HOTP、OTPの違いは何ですか?
OTP は「ワンタイムパスワード(使い捨てのパスワード)」を指す総称です。TOTP(時間ベースのOTP、RFC 6238)は現在時刻からコードを算出するため、30秒ごとに変わります。HOTP(RFC 4226)はカウンタ方式で、コードを一度使うごとにカウンタが進みます。認証アプリを受け付けるサービス — Google、Microsoft、Discord、GitHub — はほぼすべて TOTP を使っています。
TOTPは SMS の2FAよりなぜ優れているのですか?
SMSコードは電話回線を通るため、傍受されたり SIM スワップ攻撃で盗まれたりする恐れがあり、配信自体が単純に失敗することもあります。TOTPコードは端末上で計算され、一切送信されず、数秒で失効します。NIST をはじめとするセキュリティ機関は、認証手段としての SMS を非推奨としています。
TOTPコードはフィッシングサイトに盗まれますか?
はい — 有効なコードを30秒の有効期間の間にフィッシングページへ入力してしまうと、攻撃者は一度分の有効なログインを手にします。だからこそ、フィッシング耐性のある要素(本来のドメインに暗号的に紐付くハードウェアセキュリティキーとパスキー)が、対応しているサービスでは最強の選択肢なのです。TOTPが上回っているのは SMS とパスワードであって、ハードウェアキーではありません。
2FAのシークレットキーはどこに保管すべきですか?
暗号化されたパスワードマネージャーの金庫に、マスターコピーとして保管しましょう。そうすれば、スマホが使えないときでも、信頼できるどの端末でもコードを再生成できます — 2facounter.com のようなブラウザツールを使ってでも。また、2FAを有効にしたときに各サービスが表示するリカバリーコード(バックアップコード)も必ず保存してください。それこそが本当のエアバッグです。