RADIUSとは
RADIUSとは、AAAサービスを実装する認証プロトコルのひとつである。RADIUSの読み方は「ラディウス」で、RFC2865で定義されている。AAAとは、Authentication(認証)、Authorization(認可)、Accounting(課金)の略称。つまり、RADIUSでは、システムに接続するユーザが正しいかを確認し、そのユーザにアクセス許可を与え、ユーザの接続時間や操作などを記録する機能を提供する。RADIUSを導入すると、各ネットワーク機器にユーザアカウント情報を個別に設定するのではなく、 RADIUSサーバで集中管理することができるようになる。
RADIUSの用途
RADIUSは、Remote Authentication Dial In User Service の略称である。これは、RADIUSがダイアルアップサービスのために開発されたプロトコルであることを意味している。近年では、RADIUSをダイアルアップサービスで使うことはほとんどなくなった。替わりに、無線LANなどのワイヤレス・ネットワークの認証や、VPNなどのセキュリティ機器の認証でRADIUSが利用されている。そのため、RADIUSにも以前より強固なセキュリティが求められるようになった。その結果、後述するEAP認証など、証明書や暗号化の技術をRADIUSと組み合わせて利用する手法が開発された。
RADIUS認証の流れ
RADIUSは、サーバ・クライアントモデルで動作する。RADIUSの認証では、認証される人(ユーザ)、ユーザが利用しようとしている機器(RADIUSクライアント)、RADIUSサーバの3つが相互に通信を行う。「RADIUSクライアント」は、NAS(Network Access Server)とも呼ばれる。RADIUS認証は、次のような手順で行われる。
- ユーザからの認証要求(ユーザIDとパスワード)をRADIUSクライアントが受け取る
- RADIUSクライアントは、認証要求(ユーザIDとパスワード)をRADIUSサーバに転送する
- RADIUSサーバは、受け取った情報(ユーザIDとパスワード)を基にユーザ認証を行う
- RADIUSサーバは、RADIUSクライアントに認証結果を返す
- RADIUSクライアントは、認証結果に基づいてユーザへ接続の許可または拒否を行う
また、これ以外にRADIUSでは、課金処理にも対応している。課金処理は、次のような手順で行われる。
- RADIUSクライアントがRADIUSサーバに課金要求を送信する
- RADIUSサーバが課金処理を行い応答を返す
RADIUSプロトコルと課題
RADIUSプロトコルは、UDPで実装されている。RADIUSパケットは、20オクテットのヘッダと属性で構成されている。RADIUSパケットのヘッダには1オクテットの種別コード、1オクテットの識別子、2オクテットのパケット長、16オクテットの認証符号などが記録される。RADIUSの最大の課題は、識別子が1オクテットしかないことである。識別子はクライアント毎に割り振られるため、RADIUSサーバの最大接続は256と限定されてしまう。また、RADIUSはトランスポートレベルでのセキュリティに対応していない。そのため、RADIUSは上位のプロトコルで認証情報を保護する仕組みが必要となる。
最近では、こうした問題を解決したDiameterというプロトコルがRADIUSの後継として使われ始めている。
RADIUSとPPP
RADIUSは、PPPと組み合わせて使うのが一般的である。RADIUSがトランスポートレベルのセキュリティに対応していないため、PPPにも簡易的な認証方式から、拡張認証方式まで様々な方法が用意されている。特に無線LANや認証スイッチで使われる802.1Xの認証では、拡張認証方式を使うことが多い。
PAP認証
PAPは、RADIUSクライアントからRADIUSサーバへ、プレーンテキストのパスワードを送信する認証方式である。RADIUSサーバとクライアントの間で、パスワードが平文のまま交換されるため、盗み見ることが可能だという課題がある。
CHAP認証
CHAPは、RADIUSサーバとクライアントの双方でハッシュ化したパスワードを突き合わせるという認証方式である。CHAPの方がPAPよりも安全ではある。しかし、ハッシュ化するためにはRADIUSサーバ側でもパスワードを平文で記憶しておく必要があり、最近ではそれも危険であると考えられている。
EAP-MD5認証
チャレンジ・レスポンス方式を使用して認証を行う。RADIUSサーバは、チャレンジと呼ばれるランダムなビット列をクライアントに送る。クライアントは、パスワードとチャレンジからレスポンスを計算して、ユーザIDとレスポンスをサーバに送る。RADIUSサーバは、ユーザIDに対応するパスワードをデータベースから引き出し、同じ計算をする。この結果が、送られてきたレスポンスと同じであれば、認証が成功となる。この方法も、RADIUSサーバ側でパスワードを平文で記録しておく必要がある。
EAP-TLS認証
ユーザ名とパスワードではなく、TLS証明書を使って認証を行う。認証装置(クライアント)は、RADIUSサーバの証明書を検査して正しいサーバであることを確認する。RADIUSサーバは、ユーザの持つクライアント証明書を使って、ユーザの認証を行う。利用するには、証明書の発行や管理を行う認証局が必要になる。
EAP-TTLS認証
EAP-TLSをさらに拡張した方法。RADIUSサーバとユーザの証明書で認証した後、RADIUSサーバのTLS証明書を使って通信経路を暗号化し、その経路上でユーザ名とパスワードによる認証を行う。利用するには、証明書の発行や管理を行う認証局が必要になる。
EAP-PEAP認証
RADIUSサーバ側にのみ電子証明書を準備する方法。認証装置(クライアント)は、サーバの証明書を検査して、正しいサーバであることを確認する。そして、サーバ証明書を使ってTLSによる暗号化通信路を作り、クライアント証明書以外の方法で認証を行う。この認証には、ユーザ名とパスワードを使ったり、ワンタイムパスワードを使う場合もある。
EAP-SIM認証
携帯電話などの通信機器のSIM情報を使って認証を行う方法。ユーザ名やパスワードの交換は行わない。利用する端末を限定したい場合に使われ、通信強度が非常に高い。
RADIUSサーバとクライアント間のセキュリティ
RADIUSでは、サーバが不正な認証要求を受けないようにするため、サーバとクライアントの間では、共有鍵(Shared Secret)を利用する。共有鍵は、クライアント毎にあらかじめ取り決めて定義しておく。通信を行う時には、パケットの内容と共有鍵からダイジェスト情報を作成し、それを属性情報として付加する。これによって、詐称や改竄を検知することができる仕組みになっている。
認証データの管理
RADIUSでは、認証のためにユーザ、パスワードだけでなく、それ以外の属性情報も管理する必要がある。多くのRADIUSサーバでは、認証情報を内部データベースとして管理することができる。しかし、RDBなどの外部データベースに認証情報を保管したり、LDAPやActiveDirectoryなどの認証サーバと連携できるようにしている実装も多い。
ローミングとRADIUSプロキシ
認証データを自分で管理せず、他のRADIUSサーバに認証処理を依頼することもできる。このような使い方をRADIUSプロキシと呼ぶ。また、ユーザ名を「user@domain」の形式にして、domainによって認証を依頼するサーバを決める方法が使われることもある。インターネットサービスプロバイダでは、このようなオープンソースソフトウェアを利用していることが多い。
RADIUSサーバのソフトウェア
RADIUSを実装したソフトウェアでは、製品とオープンソースソフトウェアが選択できる。製品のソフトウェアは、GUIで管理ができたり、EAPで利用する認証局の機能を持つものが多い。オープンソースソフトウェアでは、FreeRADIUSがよく利用されている。FreeRADIUSのGUIを提供するdaloRADIUSや、認証局の機能を提供するOpenXPKIなどと共に使うことで、製品のソフトウェアと同等の機能を実現することができる。インターネットサービスプロバイダでは、このようなオープンソースソフトウェアを利用していることが多い。
【カテゴリ】:プロトコル  認証  
【Webセミナー】自社でOSSを採用しよう!今更聞けないOSSの基本セミナー
日程: | 11月22日(金)Webセミナー「BigBlueButton」を使用します。 |
内容: | OSSを導入したいけど、どこから手をつければいいかわからない方必見! |
ご興味のあるかたはぜひご参加ください。 |