端くれプログラマの備忘録 Webサービス [Webサービス] MFA(多要素認証)の種類と実装の難易度まとめ

[Webサービス] MFA(多要素認証)の種類と実装の難易度まとめ

MFA(多要素認証)は、アプリケーションにアクセスする際に複数の認証要素を必要とすることで、セキュリティを強化します。以下は、一般的なMFAの種類とその実装難易度のリストです。

1. SMSベースのワンタイムパスワード(OTP)

  • 説明: ユーザーがSMSで受け取るワンタイムパスワードを入力してログインします。
  • 実装難易度: 中程度
    • 考慮点: SMSゲートウェイとの連携が必要です。送信制限の管理や、SMSの確実な配信が重要です。

2. メールベースのOTP

  • 説明: ユーザーがメールで受け取るワンタイムパスワードを使用して認証します。
  • 実装難易度: 低〜中程度
    • 考慮点: 既存のメールインフラを利用できるため実装は比較的簡単ですが、ユーザーのメールアカウントのセキュリティに依存します。

3. TOTP(時間ベースのワンタイムパスワード)

  • 説明: ユーザーがGoogle AuthenticatorやAuthyなどの認証アプリを使ってワンタイムパスワードを生成します。
  • 実装難易度: 中程度
    • 考慮点: 時間ベースのアルゴリズムとQRコード生成の実装が必要です。また、ユーザーが対応する認証アプリを持っていることが前提です。

4. プッシュ通知

  • 説明: ユーザーが登録したデバイスにプッシュ通知を受け取り、それを承認または拒否することでログインを認証します。
  • 実装難易度: 高い
    • 考慮点: プッシュ通知を送信するサービスの構築または統合が必要です。また、デバイスの登録とサーバー間の通信のセキュリティを確保する必要があります。

5. 生体認証

  • 説明: 指紋認証や顔認証など、生体情報を使ってユーザーが認証します。
  • 実装難易度: 高い
    • 考慮点: デバイスの生体認証APIとの統合が必要です。プラットフォームごとに実装が大きく異なる場合があります(例: iOS、Android、Web標準のWebAuthnなど)。

6. ハードウェアトークン(例:YubiKey)

  • 説明: ユーザーがハードウェアトークン(USBデバイスなど)を使って物理的に認証を行います。
  • 実装難易度: 高い
    • 考慮点: FIDO2/WebAuthnなどの標準に基づいた統合が必要です。デバイスの登録、ユーザーの操作、フォールバックシナリオの対応も考慮する必要があります。

7. セキュリティ質問

  • 説明: ユーザーが事前に設定したセキュリティ質問に答えることで追加の認証を行います。
  • 実装難易度: 低い
    • 考慮点: 実装は簡単ですが、セキュリティが低くなる傾向があります。また、ユーザーが覚えにくい質問や、簡単に推測される質問は避けるべきです。

8. アプリベースのMFA(カスタムモバイルアプリ)

  • 説明: ユーザーが自社開発のカスタムモバイルアプリを使用して認証を行います。
  • 実装難易度: 非常に高い
    • 考慮点: カスタムアプリの開発と、アプリとバックエンド間のセキュアな通信の処理が必要です。

推奨:
セキュリティと実装のバランスを考えると、TOTP(認証アプリを使用)が最適です。広くサポートされており、セキュリティが高く、SMSやメールのように第三者のサービスに依存する度合いが少ないです。