認証・認可の分類と今後の展望
モチベーション
パスキー認証やゼロトラストアーキテクチャの導入が進んでいる中、自分の知識を整理したいなと思いました。この記事では認証・認可技術の基本的な技術からマイナーな技術までまとめてみました。
また、セキュアな認証を構築する方法や今後の動向についても記述しています。
各技術の詳細な仕様については触れません。
認証と認可の違い
認証(Authentication)とは、ユーザーが誰であるかを確認するプロセスです。これは、ユーザーがシステムにアクセスする前に、適切な資格情報(例:ユーザー名、パスワード、生体情報)を提供して自分の身元を証明することを意味します。
一方、認可(Authorization)は、認証が成功した後に、そのユーザーが特定のリソースや機能にアクセスできるかどうかを判断するプロセスです。つまり、認証が「誰か」であることの確認、認可が「何をできるか」を決定するプロセスとなります。
認証 (Authentication)の分類
NIST SP800-63によって「知識情報」「所持情報」「生体情報」の三つに分類されます。
知識情報 (Knowledge-Based Authentication)
ユーザーが「知っている」情報を使用した認証
技術名 | 説明 |
---|---|
Basic認証 | ユーザー名とパスワードを利用した認証方式 |
秘密の質問 | パスワードの再設定を依頼するときなどにパスワードの代替手段として使われる |
所持情報 (Possession-Based Authentication)
ユーザーが「持っている」ものを使用した認証
技術名 | 説明 |
---|---|
JWT | トークンを利用して、ユーザーの認証情報を保持 |
SAML | SSOで使用され、トークンベースで所持を証明 |
TOTP | 時間ベースのワンタイムパスワードを生成するデバイスを所持 |
FIDO2 / WebAuthn | ハードウェアトークンを使ったパスワードレス認証 |
Kerberos | チケットを発行し、それを所持して認証を行う |
OpenID Connect | OAuth 2.0ベースの認証で、トークンを所持して認証する |
生体情報 (Biometric-Based Authentication)
ユーザーの「身体的特徴」を使用した認証
技術名 | 説明 |
---|---|
生体認証 | 指紋、顔認証など、生体情報を使用した認証方式 |
FIDO2 / WebAuthn | 生体認証もサポートし、パスワードレス認証が可能 |
認証とは少し異なりますが、CAPTCHAはボット攻撃を防ぎ、人間とコンピュータを区別するための技術としてよく使用されます。reCAPTCHA v3などは無人認証技術で、ユーザーエクスペリエンスに影響を与えずにボット攻撃を検出します。
セキュアな認証を構築するには?
MFA
基本的には単純なPINやパスワードと物理トークンの組み合わせよりも、生体情報を含む認証がセキュリティの高いものとして評価されます。
技術名 | 認証要素の組み合わせ | 説明 |
---|---|---|
PIN + スマートフォン | 記憶 (Something You Know) + 所持 (Something You Have) | ユーザーがPINを入力し、スマートフォンを使用して認証を行う多要素認証。 |
パスワード + SMSコード | 記憶 (Something You Know) + 所持 (Something You Have) | ユーザーがパスワードを入力し、SMSで送信されたコードを入力する多要素認証。 |
パスワード + 認証アプリ | 記憶 (Something You Know) + 所持 (Something You Have) | パスワードに加え、Google Authenticatorなどの認証アプリによるコードを使用。 |
パスワード + セキュリティキー (FIDO2) | 記憶 (Something You Know) + 所持 (Something You Have) | パスワードとセキュリティキー(物理トークン)を組み合わせた認証。 |
顔認証 + PIN | 生体情報 (Something You Are) + 記憶 (Something You Know) | 顔認証に加えてPINコードを入力する多要素認証。 |
指紋認証 + パスワード | 生体情報 (Something You Are) + 記憶 (Something You Know) | 指紋認証とパスワードの組み合わせによる多要素認証。 |
顔認証 + SMSコード | 生体情報 (Something You Are) + 所持 (Something You Have) | 顔認証に加え、SMSで送信されたコードを使用して認証。 |
指紋認証 + スマートフォン | 生体情報 (Something You Are) + 所持 (Something You Have) | 指紋認証とスマートフォンのワンタイムコードを組み合わせた認証。 |
パスワード + TOTP (ワンタイムパスワード) | 記憶 (Something You Know) + 所持 (Something You Have) | パスワードに加えて、TOTP (タイムベースワンタイムパスワード)を使用した認証。 |
パスワード + 音声認証 | 記憶 (Something You Know) + 生体情報 (Something You Are) | パスワードに加えて、音声認証を使用した多要素認証。 |
•生体情報(指紋や顔認証)と、所持情報(スマートフォンやワンタイムパスワード)の組み合わせが最もセキュアです。これにより、ユーザーが物理的に持っているデバイスに加え、ユニークな身体的特徴を使ってセキュリティを強化します。
•パスワード + 認証アプリやパスワード + SMSコードは広く使われており、比較的強固ですが、フィッシング攻撃やSIMスワップ攻撃などのリスクがあります。
•PINを使った認証は、短い数字の組み合わせが攻撃されやすいため、最もシンプルで脆弱な方法の一つです。
リスクベース認証
リスクの高い状況(例: 地理的に異なる場所からのログイン、異常なアクセスパターン)では、追加の認証手段を要求するリスクベースのアプローチが効果的です。
トラストバウンダリ
セキュリティ強化のため、トラストバウンダリ(信頼境界)を明確にすることが推奨されます。ゼロトラストアーキテクチャと同様に、すべてのアクセスを信頼せず、毎回認証と認可を行うアプローチです。
Federated Identity (フェデレーションID)
異なるシステムやドメイン間で認証を共有するために、フェデレーションIDが使われます。これにより、シングルサインオン(SSO)を実現するだけでなく、複数の組織間での認証が可能となります。OAuth 2.0やSAMLなどのプロトコルが使用されます。
認可 (Authorization)
認可についてはNIST SP800-63のようなものはありません。
代表的な技術としては以下のようなものが挙げられます。
技術名 | 説明 |
---|---|
OAuth 2.0 | 認可のためのプロトコル、リソースへのアクセス制御を提供 |
RBAC | ユーザーの役割に基づいたアクセス制御方式 |
ABAC | ユーザーやリソースの属性に基づいたアクセス制御方式 |
MAC | 管理者が中央から制御するアクセス制御方式 |
IAM | クラウド環境でのユーザー認証とアクセス制御の統合管理 |
OAuth 2.1
OAuth 2.0の改善版としてOAuth 2.1が登場しており、セキュリティが強化され簡素化されています。たとえばOAuth 2.0で存在していた暗黙的フローが廃止され、PKCE(Proof Key for Code Exchange)が必須となり、フィッシングやリプレイ攻撃に対する耐性が強化されています。今後、認可のデファクトスタンダードになる可能性があります。余分な認証フローを排除し、より使いやすい仕様が特徴です。
Consent Management (同意管理)
認可プロセスの一環として、ユーザーがリソースへのアクセスを他のアプリケーションに許可する場合、ユーザーの同意を管理する仕組みが重要です。特にGDPRやCCPAのようなプライバシー法に基づき、ユーザーがアクセス権を管理できる必要があります。
ファイングレインアクセス制御 (Fine-Grained Access Control)
クラウド環境では、アクセス制御をきめ細かく設定することが重要です。ファイングレインアクセス制御では、個々のリソースやAPIへのアクセスを細かく制御し、ユーザーごとに異なるアクセス権を設定できます。ファイングレインアクセス制御は、AWS IAMポリシーやAzureのRBACでよく見られます。これにより、ユーザーやサービスアカウントごとに詳細な権限を付与し、たとえば特定のS3バケット内のファイルにのみアクセスできるように設定できます。いつも何気なく設定していたIAMはここに分類されます
ポリシーベースアクセス制御 (PBAC)
ポリシーに基づいてアクセス制御を行う方式で、RBACやABACに比べてより柔軟なアクセス制御が可能です。動的なポリシーによって、アクセスルールがリアルタイムに適用されます。
今後の流れ
セキュリティを保ちつつ高いUXを提供してくれる技術や認証基盤を分散化させる技術などが提案されています。
パスキー認証
パスワードに依存しない認証技術が今後さらに普及すると予測されます。FIDO2やWebAuthnにより、パスワード自体のリスク(フィッシング、漏洩など)を軽減する技術が進展しています。
AppleやGoogleは、パスキー認証をサポートし始めており、これによりスマートフォンやPC間でのシームレスなログインが可能です。たとえば、AppleのiCloud Keychainを使って、ユーザーがiPhoneでログインすると、同じパスキーがMacでも利用できるようになります。
ゼロトラストアーキテクチャ
伝統的なネットワーク境界ベースのセキュリティモデルではなく、ゼロトラストアーキテクチャが注目されています。このモデルでは、システムやデバイス内でのすべてのアクセスリクエストに対して認証と認可を行い、継続的な検証を行います。多要素認証(MFA)やコンテキストベース認証の採用が進んでおり、たとえばデバイスの位置情報やネットワーク情報に基づいて認証の厳格さを変えることができます。
Googleの「BeyondCorp」モデルはゼロトラストアーキテクチャの代表例であり、従来の境界セキュリティに依存せず、すべてのアクセスリクエストを厳密に認証・認可します。具体的には、各ユーザーやデバイスがどこからアクセスしているかに関わらず、常に検証を求める仕組みを取り入れています。
Decentralized Identity (分散型アイデンティティ)
Decentralized Identifiers (DID)やVerifiable Credentials (VC)はブロックチェーン技術を利用した分散型アイデンティティで、中央集権型の認証からの移行が進んでいる技術です。自己主権型のデジタルアイデンティティを構築することにより、個人が自身のアイデンティティを管理し、特定のサービスに対して必要な情報だけを提供することが可能です。
Microsoftが頑張っている印象です
まとめ
ざっとまとめてみましたが要件によって組み合わせるパターンが多く、全て覚えるというよりもセキュリティと利便性はトレードオフから選定する審美眼を鍛える必要があります。また、今後の流れを反映したアーキテクチャの導入も検討する必要があります。
Discussion