SMS認証を廃止しパスキーへ!NISTが制限する脆弱性と中継フィッシングの罠

ネタ・雑学
STΛCKHUB ANALYSIS2026.09.21 17:01
📌 30秒でわかるこの記事の要点
⏱ 読了目安: 約5分
  • 事実と背景:NIST SP 800-63B第4版でもSMS認証は『制限付き』とされ、SIMスワップや通信傍受による突破リスクが改めて警告されている。
  • 技術的変革:認証アプリのTOTPは通信不要で安全だが、中継フィッシング(AiTM)に対してはSMS同様に構造的な脆弱性を抱えている。
  • 現場への影響:開発者は認証の第一選択肢をパスキーとし、移行期には認証アプリの推奨とバックアップコードの確実な保存をユーザーに促すべきだ。

SMS認証という「動脈硬化」したインフラ

海外出張や旅行の初日、現地のプリペイドSIMに差し替えた瞬間に訪れる絶望を想像してほしい。銀行アプリや社内ツールにログインしようとすると、画面には無慈悲にも「SMSで確認コードを送信しました」の文字が表示される。手元にあるのは、机の上に置かれた日本のSIMカード。電波が届かないのだから、コードが届くはずもない。この「本人なのにシステムから締め出される」という可用性の欠如は、我々開発者が設計時に見落としがちな極めて生々しいバグである。

SMS認証が抱えるセキュリティリスクは、単なる可用性の問題に留まらない。第一の脅威は「SIMスワップ」だ。2024年、日本国内でも偽造マイナンバーカードを用いて携帯ショップの本人確認を突破し、SIMカードを再発行させてSMS認証を乗っ取る事件が多発した。標的となったのは、氏名や住所などの個人情報が公開されやすい地方議員らであった。第二の脅威は「電話網(SS7)の傍受」である。SMSはエンドツーエンドで暗号化されておらず、通信事業者間の古い信号プロトコルであるSS7の脆弱性を突かれれば、国家レベルの攻撃者や高度なハッカーによって通信を横取りされるリスクが常につきまとう。

米国NISTのデジタルアイデンティティガイドライン「SP 800-63B」では、第3版に続き2025年に改訂された第4版でも、電話網(SMS・音声)を用いた認証を「制限付き(restricted)」と位置づけている。これは「使うな」という意味ではないが、組織がリスクを許容し、SIM変更の監視や10分以内の有効期限設定など、厳格な運用を求めるものだ。我々エンジニアは、SMS認証がもはや「安全な多要素認証(MFA)」ではなく、「パスワード単体よりはマシな、リスクを孕んだレガシーインフラ」であることを自覚しなければならない。

TOTPの美しさとAiTMという絶望

一方で、同じ海外の地でも、Google Authenticatorなどの認証アプリは機内モードですら正確に6桁の数字を吐き出し続ける。なぜ通信もしていないのに、サーバーとスマホで同じ数字が同期するのか。その答えは、RFC 6238で定義されたTOTP(Time-based One-Time Password)の極めて美しい数学的調和にある。

TOTPの仕組みは驚くほどシンプルだ。登録時にQRコードを介して「共有シークレット」を一度だけスマホに保存する。以降は、スマホ側で「共有シークレット」と「現在時刻を30秒で割った整数(エポックタイム)」をインプットとし、HMAC-SHA1を計算する。そのハッシュ値から特定の4バイトを切り出し、10進数6桁に丸めるだけだ。Pythonの標準ライブラリであるhmacやhashlibを用いれば、わずか20行足らずで実装できる。サーバー側も全く同じ計算を行い、クライアントから送られてきた値と一致するかを検証する。ネットワーク遅延や端末の時計のズレを考慮し、前後1ステップ(前後30秒)の猶予を持たせるのが一般的だ。

しかし、この美しく完成されたTOTPすら、現代の攻撃手法の前には無力化する。それが「Adversary-in-the-Middle(AiTM:中継フィッシング)」だ。Evilginxなどのプロキシツールを用いた攻撃では、攻撃者が本物のサイトとユーザーの間に偽サイトを挟み込む。ユーザーがIDとパスワード、そして認証アプリが表示した「正しい6桁」を偽サイトに入力すると、偽サイトはそれをリアルタイムで本物のサイトに転送する。本物のサイトは認証を成功させ、セッションクッキーを発行するが、偽サイトはそのクッキーを奪取する。結果として、ユーザーがどれだけ正確にTOTPを入力しようとも、セッションそのものが乗っ取られてしまうのだ。TOTPの致命的な弱点は、「その6桁のコードが、どのドメインに対して入力されているか」をコード自身が関知できない点にある。

パスキーへの移行と我々が下すべき決断

では、我々エンジニアはこの「中継フィッシング」というデッドロックからどうやって抜け出すべきなのか。その唯一の構造的解決策が「パスキー(FIDO2/WebAuthn)」である。各認証方式の特性を比較すると、その差は歴然だ。

認証方式 フィッシング耐性 オフライン利用 主なセキュリティリスク
SMS認証 なし 不可 SIMスワップ、SS7傍受、中継フィッシング
認証アプリ (TOTP) なし 可能 中継フィッシング (AiTM)
パスキー (FIDO2) あり (構造的) 可能 デバイス自体の紛失・盗難

パスキーがTOTPやSMSと決定的に異なるのは、認証プロセスに「オリジン(ドメイン)の検証」が組み込まれている点だ。パスキーは、公開鍵暗号方式を用いてデバイス内の秘密鍵で署名を作成する。この際、ブラウザやOSが現在アクセスしているドメイン(RP ID)を厳格にチェックし、署名対象に含める。仮にユーザーが偽サイトに騙されてアクセスしても、デバイスは本物のサイト用の鍵を呼び出さない。また、仮に署名が作られたとしても、ドメインの不一致によりサーバー側で検証エラーとなる。中継フィッシングが構造的に成立しないのだ。

我々開発者が明日から取り組むべきアクションは明確だ。新規プロダクトの設計においては、MFAの第一選択肢として「パスキー」をデフォルトに据えること。既存システムにおいては、SMS認証からTOTP(認証アプリ)への移行を促しつつ、最終的なゴールとしてパスキーの導入ロードマップを策定することだ。また、TOTPを採用する場合は、端末紛失時のアカウントロックを防ぐため、バックアップコードの生成と安全な保存(パスワードマネージャーの推奨など)をユーザーに徹底させる設計が不可欠である。

最後に、我々自身に問いかけたい。ユーザーの利便性を犠牲にし、フィッシング耐性もない「6桁の数字を打ち込ませる儀式」を、我々はいつまでシステムに実装し続けるのだろうか。レガシーな認証方式に固執することは、技術的負債を抱えるだけでなく、ユーザーを危険に晒し続けることに他ならない。今こそ、パスキーというモダンなセキュリティ標準へ舵を切る決断の時だ。

🏷 関連トピック・技術タグ:
#SMS認証#TOTP#パスキー#セキュリティ#NIST
Published at 17:01

コメント

タイトルとURLをコピーしました