相互認証(双方向認証)は、接続の両側が互いの身元を確認するときに発生します。
この記事を読み終えると、以下のことができるようになります。
関連コンテンツ
是非、Cloudflareが毎月お届けする「theNET」を購読して、インターネットで最も人気のある洞察をまとめた情報を入手してください!
記事のリンクをコピーする
相互認証とは、一方だけが他方を確認するのではなく、通信チャネルの両側が互いに本人であることを確認することです。相互認証は、プロセスが双方向に進むため、「双方向認証」とも呼ばれます。
タクシーアプリを利用する場合、通常、ナンバープレートや車の特徴を確認し、乗車する車が正しいものかどうかを確認します。乗車すると、ドライバーは乗客に名前を聞いて、正しい人物を迎えに来たかどうかを確認します。乗客とドライバーは互いにやりとりして目的の相手であるかを確認した上で、ドライバーは正しいサービスを提供し、乗客は目的地に向かう車に乗り、そしてタクシーアプリで確認した相手と一緒にいることを確認します。
同様に、相互認証ではデジタル通信チャネルにおける両方の当事者を検証します。例えば、相互認証を使用するクライアントとサーバーは、クライアントのみがサーバーを認証するのではなく、互いの身元を独立して検証するための手順を踏みます。 Internet of Things(IoT) デバイス間のようなデバイス間接続にも、多くの場合、相互認証が使用されます。
相互認証は、Transport Layer Security(TLS) プロトコルに関連して使用されることが最も一般的ですが、他のプロトコルや他のコンテキストでも使用することができます。 相互TLSについてご覧ください。
通信チャネルの両端を相互に認証する方法には、主に次の3つの方法があります:
1.公開鍵認証:この方法は、公開鍵暗号に依存します。鍵は、データの暗号化や電子署名に使用できるデータ列です。公開鍵暗号は、公開鍵と秘密鍵の2つの鍵を使用します。公開鍵で暗号化されたデータは、秘密鍵で復号化されます。
公開鍵相互認証では、通信の両側が公開鍵を伝達し、双方がその公開鍵に付随する秘密鍵を持っていることを証明する必要があります。たとえば政府発行のIDカードを見せて名前を確認するようなものです。それぞれの側からデジタル署名を相手側に送信します。公開鍵で署名が検証できれば、正しい秘密鍵が使われたことになり、署名を送った側は正当であると言うことができます。
2.証明書認証方式: この方法は公開鍵認証方式と似ていますが、両当事者は単なる公開鍵ではな、公開鍵証明書を持つ点が異なります。証明書には、証明書と公開鍵の発行者、証明書が適用される相手、証明書の有効期限など、関係者の身元を確認するのに役立つ情報が追加されています。双方がTLS証明書を所有している場合、この種の相互認証に使用することができます。
3.ユーザー名とパスワード:名前に反して、この相互認証方法でもやはりサーバー側の証明書を使用します。サーバーはクライアントに証明書を提示し、クライアントはその証明書を検証します。クライアント側では、一般的なユーザー名/パスワード認証と同じようにクライアントがユーザー名とパスワードの組み合わせをサーバーに送信し、サーバーがその証明書を検証します。
一方向認証は、インターネット上では常に行われています。誰かがHTTPSを使用するWebサイトを読み込むたびに、そのデバイスはサーバのTLS証明書を確認してWebサーバが同一のものであることを認証します。他の例として、ユーザーがアプリケーションのアカウントにサインインする場合、アプリケーションはユーザーを認証します。
相互認証は、一部のセキュリティ上の欠陥をなくし、ある種の攻撃をはるかに困難にする一方で、情報交換にかかる時間と計算能力を増加させます。また、通信の両側で認証情報、公開鍵・秘密鍵ペア、公開鍵証明書(使用する認証の種類による)が必要になるなど、事前のセットアップも必要です。このため、一般的なユーザーにとって相互認証の実装は難しく、TLSの一部として一般的でないのはこのためです。
相互認証の主なユースケースは次の通りです:
オンパス攻撃:オンパス攻撃では、攻撃者は2者間の接続の途中に存在します。攻撃者は、双方向の通信を傍受し、会話の両端を交互に互いになりすまします。相互認証を行うことで攻撃者は通信の両端を認証することができなくなるため、この種の攻撃を阻止するのに役立ちます。
スプーフィングおよびなりすまし:攻撃者はこれらの攻撃を用いてサーバーやユーザーを騙し、自分が既知の信頼できる関係者であると思い込ませます。攻撃者は、ユーザーから見たWebサーバーになりすますことも、その逆も可能です。双方が認証を行わなければならない場合にこのような攻撃を仕掛けることは、非常に困難です。
資格情報の盗難:相互認証の形式にはパスワードベースのものもあり、これらはやはり資格情報の盗難(攻撃者が正当なユーザーのパスワードを盗むこと)の対象となる可能性があります。しかし、相互認証は通常公開鍵ベースであり、盗むべき資格情報が存在しないため盗難の可能性はありません。これにより、フィッシング攻撃の効果を阻止することができます。
これらのネットワークプロトコルには、相互認証が組み込まれているか、相互認を使用する次のようなオプションが提供されています:
Secure Shell Protocol(SSH):SSHは、リモートサーバーやデバイスへのセキュリティで保護された接続を実現するトンネリングプロトコルです。SSHには、公開鍵認証方式または証明書認証方式のいずれかを使用することができます。言い換えると、SSHでは公開鍵認証方式または公開鍵証明書方式のいずれかを使用して相互認証を実現することが可能です。
TLS:TLSは既定値としては接続の両側を認証しないものの、この目的のために使用できます。Mutual TLS(mTLS)は、最も一般的に適用される相互認証のタイプの1つです。mTLSでは、接続の両側がTLS証明書を持ちます。mTLSは、APIセキュリティ、IoTセキュリティ、Zero Trustセキュリティの用途で多く使用されます。
相互認証は、Cloudflareが提供する数あるZero Trustセキュリティソリューションの中核をなすものです。Cloudflare Zero Trustは、アプリケーションのアクセス制御とインターネットブラウジングのためのプラットフォームであり、ユーザーとデバイスを検証するためのmTLSを提供しています。Cloudflare API Shieldは、API認証とセキュリティのためにmTLSをサポートしています。