多要素認証

パスワードに加えて追加の認証要素を要求し、アカウントの不正アクセスを防ぐセキュリティ手法

認証セキュリティ

多要素認証とは

多要素認証 (Multi-Factor Authentication, MFA) は、認証時にパスワード (知識要素) に加えて、追加の認証要素を要求するセキュリティ手法である。パスワードが漏洩しても、追加の要素がなければログインできないため、不正アクセスリスクを 99.9% 低減する (Microsoft の調査)。

認証の 3 要素

要素 説明
知識 (Something you know) 本人だけが知っている情報 パスワード、PIN、秘密の質問
所持 (Something you have) 本人だけが持っている物 スマートフォン、ハードウェアキー
生体 (Something you are) 本人の身体的特徴 指紋、顔認証、虹彩

MFA は 2 つ以上の異なる要素を組み合わせる。パスワード + SMS コードは「知識 + 所持」の 2 要素認証 (2FA) だ。

MFA の方式

方式 セキュリティ 利便性 推奨度
FIDO2 / WebAuthn 最高 (フィッシング耐性) 高い 最推奨
TOTP (認証アプリ) 高い 中程度 推奨
SMS コード 中程度 (SIM スワップ攻撃のリスク) 高い 許容
メールコード 低い (メール漏洩リスク) 高い 非推奨

TOTP (Time-based One-Time Password)

Google Authenticator や Authy が生成する 6 桁のコード。30 秒ごとに変わる。

import { authenticator } from 'otplib';

// シークレットの生成 (ユーザー登録時)
const secret = authenticator.generateSecret();
const otpauth = authenticator.keyuri(email, 'MyApp', secret);
// → QR コードとして表示

// コードの検証 (ログイン時)
const isValid = authenticator.verify({ token: userInput, secret });

FIDO2 / WebAuthn

ハードウェアキー (YubiKey) やデバイスの生体認証を使う。フィッシングサイトでは認証が成功しないため、最も安全だ。

  • OFF: MFA なし
  • OPTIONAL: ユーザーが任意で有効化
  • ON: 全ユーザーに MFA を強制

AWS IAM での MFA

IAM ユーザーと root アカウントには MFA を必ず設定する。IAM ポリシーで MFA を強制できる。

{
  "Condition": {
    "BoolIfExists": { "aws:MultiFactorAuthPresent": "true" }
  }
}

パスキー (Passkey) の台頭

パスキーは FIDO2/WebAuthn をベースにした次世代認証で、パスワードそのものを不要にする。Apple、Google、Microsoft が対応し、パスワード + MFA の組み合わせを 1 ステップの生体認証に置き換える。

全体像を把握するには関連書籍も有用。

関連用語