二段階認証 (2FA: Two-Factor Authentication) とは、パスワードに加えて第 2 の認証要素を要求することで、アカウントのセキュリティを強化する手法です。「知識」(パスワード)、「所持」(スマートフォン)、「生体」(指紋・顔) の 3 要素のうち 2 つ以上を組み合わせるのが基本原理で、電話番号宛ての SMS コードが「所持」要素として最も広く使われています。
SMS 認証の仕組みは単純です。ログイン時にパスワードを入力すると、登録済みの電話番号に 4〜6 桁の確認コードが SMS で送信されます。このコードを入力することで、「その電話番号を持つ端末を所持している」ことが証明されます。銀行、SNS、メールサービス、EC サイトなど、ほぼすべての主要サービスが SMS 認証に対応しており、追加のアプリやハードウェアが不要な手軽さが普及の理由です。
しかし、SMS 認証には重大な脆弱性があります。SIM スワップ攻撃で電話番号を乗っ取られると、SMS コードが攻撃者に届きます。SS7 (電話網の信号制御プロトコル) の脆弱性を突いた SMS の傍受も技術的に可能です。さらに、スミッシングで偽のログインページに誘導し、リアルタイムで SMS コードを入力させる中間者攻撃も報告されています。米国の NIST (国立標準技術研究所) は 2016 年の時点で SMS 認証を「非推奨」と位置づけており、より安全な代替手段への移行を推奨しています。
より安全な認証方法として、認証アプリ (Google Authenticator、Authy、Microsoft Authenticator) は端末内で時刻ベースのワンタイムパスワード (TOTP) を生成するため、通信経路での傍受リスクがありません。ハードウェアキー (YubiKey、Titan Security Key) は物理的な USB/NFC デバイスで、フィッシング耐性が最も高い認証手段です。パスキー (FIDO2) は生体認証と暗号鍵を組み合わせた最新の方式で、パスワード自体を不要にします。SMS 認証しか選べないサービスでも、二段階認証を無効にするよりは有効にしておく方が安全です。二段階認証と電話番号のリスクで各認証方式の比較を確認できます。