AAAと半径と直径
携帯を立ち上げてメールやSNSをみる。アンテナ3本で快適だ。でもよく考えてみると、あらゆる会社の電波が飛び交っているのに、どうやって契約先にだけつながって、使った分だけギガが減るんだろう?
インフラを提供するためには、ネットワークに接続してきたのが誰で、何を使えて、どれくらい使っているのかのチェックが必要だ。そのためには「AAA」と呼ばれる機能が必要になる。
-
認証 (Authentication)
「あなたは誰?」を確認する。ユーザー名やパスワード、デジタル証明書などで本人を確認する。 -
認可 (Authorization)
「この人には何を許可する?」を決定する。認証されたユーザーができることを許可する。 -
アカウンティング (Accounting)
「この人はどれだけ使った?」を記録する。利用時間やデータ量などを追跡し、課金や利用状況分析のために覚えておく。
この AAA を扱うプロトコルとして最初にメジャーになったのが「RADIUS(Remote Authentication Dial-In User Service)」だ。 1990 年前後に主流だったダイヤルアップ接続環境では、たくさんのモデムとシリアルポートで多数のユーザーにサービスを提供していた。RADIUS の登場前は、機器ごとに少しずつ仕様が違うため、ユーザー管理も使用状況の集計も煩雑だった。一元管理するためには統一した仕様が必要になる。1991 年にアメリカの Livingston Enterprises 社が開発した RADIUS には以下のような利点があった。
- シンプルなクライアント・サーバーモデル。
- 通信プロトコルにはシンプルなUDPを使用する。
- EAP(Extensible Authentication Protocol)など、多様な認証方式にも対応できる。
当時の規模と用途であれば、実用性も使い勝手も申し分なかった。一気に普及して業界標準になり、1997年に RFC 2058 や RFC 2138 が、2000年に RFC 2865 が発行された。
しかし、要求されるネットワークの規模は劇的に増大し、課題も明らかになってきた。UDP には到達保証がないため使用量は失われるリスクがある。認証情報は暗号化していたが、通信そのものを暗号化する標準の仕様がなかった。
より信頼できて、よりセキュアな AAA を実現できるプロトコルが必要だった。そこで、RADIUS(半径)に対して Diameter(直径)という名前で、以下のような機能を備えたプロトコルが開発された。 2003 年に最初のペースの仕様として RFC 3588 が、2012 年に改訂版として RFC 6733 が発行されている。
- 通信プロトコルには到達保証、順序保証がある TCP または SCTP を使用する。
- TLS や IPsec などのセキュリティプロトコルを統合して、通信全体のセキュリティを担保する。信全体の機密性、完全性、認証を提供する。
- 32 ビットの AVP(Attribute-Value Pair)識別子で新しいコマンドやアプリケーションIDを簡単に定義できる拡張性を確保する。
- Relay、Proxy、Redirect、Translation Agent といったエージェントを定義して、複雑なネットワーク要件を整理しやすくする。
- RADIUS では限定的だったサーバーからの能動的な通信が標準機能として提供する。
- 通信開始前に CER/CEA メッセージで通信先との互換性を確認して安定に通信できるようにする。
- 詳細なエラーコード(Result-Code AVP)と可読性が高いエラーメッセージ(Error-Message AVP)でにより、問題発生時の原因究明が容易になる。
5G時代においては、従来のモノリシックなアーキテクチャではなく標準仕様を積極的に取り込んだサービスベースアーキテクチャ (SBA) と HTTP/2 が主流となりつつある。しかし、既存のインフラとのネットワークを安価に安定して構築するために今後も RADIUS、Diameter は現役であり続けるだろう。
Discussion