認証 (Authentication)

認証とは、パスワード、トークン、生体認証などの資格情報を確認することにより、ユーザー、デバイス、またはシステムの身元を検証するセキュリティプロセスです。

二要素認証(2FA)は、ユーザーの本人確認のために2つの異なる認証要素を要求することでセキュリティを強化する多要素認証(MFA)方法です。これらの要素は通常、ユーザーが知っているもの(例:パスワード、PIN)、ユーザーが持っているもの(例:物理的なトークン、スマートフォン、スマートカード)、ユーザー自身であるもの(例:指紋、顔スキャン)の3つのカテゴリに分類されます。一般的な実装では、パスワード(知識要素)と、認証アプリによって生成されるかSMS経由で送信されるワンタイムパスワード(OTP)(所持要素)が組み合わされます。プロセスは、ユーザーが通常はパスワードである最初の認証情報を入力することから始まります。最初の要素の検証が成功すると、システムは2番目の要素を要求します。次に、2番目の要素の有効性が、事前に登録された値または時間ベースのアルゴリズムに対してチェックされます。両方の要素が正常に認証されると、アクセスが許可されます。2FAの主な利点は、フィッシング、クレデンシャルスタッフィング、ブルートフォース攻撃などの一般的な攻撃ベクトルに対する耐性であり、単一の要素を侵害しても不正アクセスを達成するには不十分です。ただし、トレードオフには、ユーザーの操作性の低下、2番目の要素の紛失または盗難の可能性、および2番目の要素の配信メカニズム(例:SMS傍受)のセキュリティへの依存が含まれます。高度な実装では、場所、デバイス、または時間帯などのコンテキストに基づいて、要求される要素の数または種類を動的に調整するリスクベース認証が含まれる場合があります。

        graph LR
  Center["認証 (Authentication)"]:::main
  Rel_authorization["authorization"]:::related -.-> Center
  click Rel_authorization "/terms/authorization"
  Rel_mfa_multi_factor_authentication["mfa-multi-factor-authentication"]:::related -.-> Center
  click Rel_mfa_multi_factor_authentication "/terms/mfa-multi-factor-authentication"
  Rel_single_sign_on_sso["single-sign-on-sso"]:::related -.-> Center
  click Rel_single_sign_on_sso "/terms/single-sign-on-sso"
  classDef main fill:#7c3aed,stroke:#8b5cf6,stroke-width:2px,color:white,font-weight:bold,rx:5,ry:5;
  classDef pre fill:#0f172a,stroke:#3b82f6,color:#94a3b8,rx:5,ry:5;
  classDef child fill:#0f172a,stroke:#10b981,color:#94a3b8,rx:5,ry:5;
  classDef related fill:#0f172a,stroke:#8b5cf6,stroke-dasharray: 5 5,color:#94a3b8,rx:5,ry:5;
  linkStyle default stroke:#4b5563,stroke-width:2px;

      

🧒 5歳でもわかるように説明

それは、特別な宝箱を開けるために2つの鍵が必要なようなものです。1つはあなたが知っている鍵(秘密のコードのようなもの)、もう1つはあなたが持っている鍵(特別なオモチャのようなもの)です。

🤓 Expert Deep Dive

二要素認証(2FA)は、プライマリ認証情報(通常はパスワードまたはパスフレーズ)の上に、追加の検証メカニズムをレイヤー化することで、根本的にセキュリティを強化します。このプロセスは多要素認証(MFA)の原則に従い、特に次のカテゴリから2つの異なる要素を要求します。

  1. あなたが知っているもの: パスワード、PIN、セキュリティの質問への回答。
  2. あなたが持っているもの: 物理的なトークン(例:YubiKey、RSA SecurID)、認証アプリケーションを実行しているスマートフォン(例:Google Authenticator、Authy)、またはSMSベースのOTP用のSIMカード。
  3. あなた自身であるもの: 指紋、顔スキャン、虹彩パターンなどの生体データ。

一般的な実装には、RFC 6238で標準化された時間ベースのワンタイムパスワード(TOTP)が含まれます。TOTPアルゴリズムは、共有シークレットキー(初期セットアップ中にプロビジョニングされる)と現在の時間(多くの場合NTPで同期される)に基づいて、30〜60秒ごとに新しいコードを生成します。サーバーサイドの検証には、指定された時間ウィンドウの期待されるOTPを再計算し、ユーザー提供のコードと比較することが含まれます。

もう1つの一般的な方法は、RFC 4226で定義されているHMACベースのワンタイムパスワード(HOTP)であり、使用ごとにインクリメントされるカウンターに基づいてコードを生成します。サーバーとクライアントは同期されたカウンターを維持する必要があります。

より高度な実装では、公開鍵暗号化を活用するUniversal 2nd Factor(U2F)とその successorであるFIDO2が使用されます。登録中、セキュリティキー上に一意の公開/秘密鍵ペアが生成され、公開鍵がサービスに登録されます。認証には、サーバーがチャレンジを送信し、FIDOデバイスがその秘密鍵で署名し、サーバーが登録された公開鍵を使用して検証します。これにより、キーがデバイスから離れることがなく、ウェブサイトの特定のオリジン(ドメイン)に紐付けられるため、フィッシング攻撃に対する強力な耐性が提供されます。

📚 出典