📝

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 2058RFC 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