RADIUS (概述认证:Authentication) 1. 介绍
RADIUS(Remote Authentication Dial In User Service)定义了如何装载位于网络接入服务器(NAS)与RADIUS认证服务器(RAS&RADIUS Server&3A Server)之间用于认证,授权和配置的信息.其中RADIUS Server对NAS链接作出认证.
RADIUS通过管理用户数据库(包括安全,授权和计费),管理和为用户提供业务(如PPP,SLIP,telnet,rlogin)的详细配置信息来完成如下三方面工作:
1)认证(Authentication):
2)授权(Authorzation):
3)计费(Accounting):
RADIUS特性包括:
1).C/S模型
Client: 网络接入服务器(NAS)
向RADIUS Server 传递用户信息,对应答作出响应.
Server: RADIUS Server
接收用户连接请求,认证用户,向NAS返回所有配置信息(用于NAS向user发送业务).RADIUS Server 可作为代理Client.
2).网络安全
NAS 与RADIUS Server共享secret(不在网络上传送);用户口令在NAS,RADIUS Seerver 间加密.
3).灵活的认证体系
RADIUS提供多种用户认证方法,包括:
通常的username+password
PPP PAP&CHAP
UNIX login
其它认证方法.
4).可扩展协议
RADIUS处理的所有事务包括在Attribute-Length-Value 3元组中.添加新属性不影响原有协议的执行.
2. RADIUS数据包格式
2.1. UDP数据包格式
0 7 8 15 16 23 24 31
+--------+--------+--------+--------+
| Source | Destination |
| Port | Port |
+--------+--------+--------+--------+
| | |
| Length | Checksum |
+--------+--------+--------+--------+
|
| data octets ...
+---------------- ...
2.2. RADIUS数据包格式描述
RADIUS数据包封装在UDP数据域中,要求UDP目的端口号为1812
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Code | Identifier | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
| Authenticator |
| |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Attributes ...
+-+-+-+-+-+-+-+-+-+-+-+-+-
Code
1 Access-Request
2 Access-Accept
3 Access-Reject
4 Accounting-Request
5 Accounting-Response
11 Access-Challenge
12 Status-Server (experimental)
13 Status-Client (experimental)
255 Reserved
Identifier
一字节,用于标记请求与回应数据包的匹配
Length
两字节,用于说明数据包(Code+Identifier+Length+Authenticator+ Attribute)总长度.实际长度小于说明长度的数据包将被丢弃;两字节长度不够,在后面填充.20 <=
Length <= 2^12.因此,还可填充至多2^4个字节的长度.
Authenticator
十六字节,用于认证来自RADIUS server的回答.
Request Authenticator
(在Acccess-Request, Accounting-Request中的Authenticator叫做Request Authenticator)
十六字节随机数,必须满足唯一性避免攻击者中途应答;满足随机性避免攻击者伪装成目标服务器.RADIUS不能避免实时主动窃听.
Identifier值改变时, RequestAuth值需要重新生成.
Response Authenticator
(在Acccess-Accept, Access-Challenge,Access-Reply,
Accounting-Response中的Authenticator叫做Response Authenticator)
ResponseAuth = MD5(Code+ID+[Length]+RequestAuth+Attributes+secret)
secret为共享秘密, RADIUS Server 使用RADIUS 的UDP数据包中的源IP以便知道该选择哪个共享秘密.
Attributes
许多属性有多个实例,这种情况需要保留同类属性的不同顺序,不同类属性的顺序不必保留.
3. 数据包类型
数据包类型由Code域定义.以下就Access-Request, Access-Accept, Access-Reject, Access-Challenge四种类型的数据包进行说明.
3.1. Access-Request
该Access-Request发送到RADIUS Server以决定是否允许用户访问NAS,是否为用户提供特定的服务
RADIUS Server收到来自有效NAS的Access-Request必须想对方传送应答信息.
Access-Request=User-Name
+[NAS-IP-Address, NAS-Identifier]
+[ User-Password, CHAP-Password]
+(NAS-Port, NAS-Port-Type)
Code
1 for Access-Request.
Identifier
一旦Attributes改变,或收到有效的应答,Identifier必须改变.在重传中Identifier 不得改变.
Request Authenticator
Request Authenticator 值随Identifier改变而改变.
3.2. Access-Accept
该数据包由RADIUS server发送, 用于提供向用户发送服务所必须的配置信息.
Access-Accept的Identifier与Access-Request的Identifier相匹配,且Response Authenticator必须正确,Access-Accept才视为有效,否则将被丢弃
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Code | Identifier | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
| Response Authenticator |
| |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Attributes ...
+-+-+-+-+-+-+-+-+-+-+-+-+-
3.3. Access-Reject
RADIUS Server收到的 Access-Request有任何 Attribute 不能接受, RADIUS Server必须发送Access-Reject(包括一个或多个Reply-Message属性实例).
3.4. Access-Challenge
RADIUS Server希望向用户提供Challenge以便得到Response RADIUS Server须发
送Access-Challenge (包括一个或多个Reply-Message属性实例,可以包括一个State属性) 收到的Access-Challenge中, Identifier须与Access-Request相应域匹配且Response Authenticator域正确,否则将被丢弃.
如果NAS不支持Challenge/Response机制, 将把Access-Challenge 视为Access-Reject.NAS 支持 Challenge/Response机制,收到有效的Access-Challenge 后将重
发新的Access-Request
*Access-Request = …
+*ID
+*Request Authenticator
+*User-Password = Response由用户提供且加密
+[State Attribute]
* 表示与原始Access-Request不同的值
如果NAS支持 PAP ,可以向拨入用户提供 Reply-Message以获得用户Response(包括*ID,*Request Authenticator,*User-Password)
4. 操作
使用RADIUS管理用户访问(进行用户认证和授权),NAS首先必须保证对用户是可访问的(包括对Framed Protocol用户在物理层的连接和对上层用户在网络层的连接准备)
NAS必须进行RADIUS配置.使用RADIUS进行认证的NAS须作如下配置:
接收并识别用户请求或RAS数据包类型
正确提取用户或RAS数据包信息
产生并填充随机数
管理共享secret(包括与CHAP用户的共享secret)
MD5调用
处理用户口令(包括普通用户口令,PAP口令,CHAP口令和Challenge口令)
校验RAS数据包的有效性(Response Authenticator属性提供)
校验RAS响应数据包的一致性
提供使用CHAP的Challenge
正确发送数据包
RAS也要进行相应认证配置,包括:
管理用户数据库(用户名,口令,NAS标记,共享secret)
接收并识别NAS数据包类型
正确提取NAS数据包信息
校验用户身份(包括普通用户口令,PAP口令,CHAP口令和Challenge口令)
产生Challenge
标记响应数据包的一致性
4.1. 操作流程
说明:
u:代表user
C: 代表Client (NAS)/ RADIUS
S: 代表RADIUS Server
user info←username+password+…
Access-Request←username+MD5(password)/Response+[Client ID+port ID+…] Challenge/Access-Challenge←random number
Access-Reject←service type(PPP,SLIP,Login User…)
+configuration info(IP addree,subnet,MTU,desired protocol)
4.2. Challenge/Response机制
在Challenge/Response认证中,用户得到的是一个随机数,要求对该随机数进行计算并返回结果,用户需要有相关应用程序和密钥.
Challenge值(在Access-Challenge中提供)为随机数或按适当基和步长产生的伪随机数(通常由外部机器产生). Access-Challenge中应包括Reply-Message属性用于向用户作出提示.
4.3. 与PAP,CHAP的共同工作
4.3.1. PPP认证和阶段分析
阶段示意图
1).外部事件表明物理层就绪, UP事件使LCP有限自动机进入建立链接阶段
2).交换Configure数据包,LCP进入OPENED状态,转向认证阶段(如果申请认证) NCP阶段或认证阶段收到认证请求(Configure-Request)将回到该阶段
3).认证阶段:包括LCP,认证协议,链接质量监视数据包
4).NCP阶段:NCP进入OPEN状态
5).链接终止阶段
a).PPP的封装格式:
+----------+-------------+---------+
| Protocol | Information | Padding |
| 8/16 bits| * | * |
+----------+-------------+---------+
Protocol域:
0***~3***:网络层协议的数据包
4***~7***:与NCPs无关的处理low volume traffic的协议数据包
8***~b***:与NCPs有关的数据包
c***~f***:与链路层协议(如LCP)有关的数据包
Information域:
PAP,CHAP数据包等
b).LCP格式:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Code | Identifier | Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Data/Option ...
+-+-+-+-+
Code:
1 Configure-Request
2 Configure-Ack
3 Configure-Nak
4 Configure-Reject
5 Terminate-Request
6 Terminate-Ack
7 Code-Reject
8 Protocol-Reject
9 Echo-Request
10 Echo-Reply
11 Discard-Request
c) LCP选项格式:
0 1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Length | Data ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Type:
0 RESERVED
1 Maximum-Receive-Unit
3 Authentication-Protocol
4 Quality-Protocol
5 Magic-Number
7 Protocol-Field-Compression
8 Address-and-Control-Field-Compression
d)认证选项格式:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Length | Authentication-Protocol |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data ...
+-+-+-+-+
Type = 3
Length >= 4
Authentication-Protocol
c023 Password Authentication Protocol
c223 Challenge Handshake Authentication Protocol
4.3.2. PAP
PAP(Password Authentication Protocol)使用简单的2路握手办法为用户建立身份, 在链路建立基础上进行.
口令在传输中是透明的.PAP可以在允许用纯文本口令注册远程主机的情况中使用.
1).PAP数据包封装在PPP的Information域中
2).认证协议格式:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Code | Identifier | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data ...
+-+-+-+-+
Code
1 Authenticate-Request
2 Authenticate-Ack
3 Authenticate-Nak
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Code | Identifier | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Peer-ID Length| Peer-Id ...
+-+-+-+-+-+-+-+-+-+-+-+-+
| Passwd-Length | Password ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+
Code
1 Authenticate-Request.
4.3.3. CHAP
CHAP(Challenge Handshake Authentication Protocol)使用3路握手检查用户身份,在链路建立基础上进行且提出随时认证.
1).3路握手:
Challenge(A)→Response(p)→Success/Failure(A)→(p)
A:Authenticator p:peer
2).Challenge/Response:
Response=MD5(Identifier+”secret”+Callenge)
Identifier:每发送一次数据包使用不同的Identifier值,回应数据包必须使用相同Identifier的值
Secret:为共享秘密,由两端数据库纯文本形式提供,通过加密进行传送
Challenge:必须满足:唯一性和随机性以避免重传攻击和诱发响应(不能避免实时主动攻击)
3).认证选项格式:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Length | Authentication-Protocol |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Algorithm |
+-+-+-+-+-+-+-+-+
Type = 3
Length = 5
Authentication-Protocol
c223 (hex) for Challenge-Handshake Authentication Protocol.
Algorithm
0-4 unused (reserved)
5 MD5
4).CHAP数据包格式:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Code | Identifier | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data ...
+-+-+-+-+
Code
1 Challenge
2 Response
3 Success
4 Failure
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Code | Identifier | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Value-Size | Value ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Name ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Code
1 Challenge;
2 Response.
Name:
防止多种认证系统只用一个秘密,Name用作关键字提供基于不同认证的秘密4.3.4. 对PAP用户的RADIUS认证
Access-Requuest数据包:
User-Name←PAP ID
User-Password←password
[Service-Type = Framed-User
Framed-Protocol = PPP]
4.3.
5. 对CHAP用户的RADIUS认证
Access-Requuest数据包:
User-Name←CHAP username
CHAP-Password←CHAP ID+CHAP response
CHAP-Challenge/Request Authenticator←chalenge
[Service-Type = Framed-User
Framed-Protocol = PPP]
RADIUS Server 认证:
Response=MD5(Identifier+”secret”+Challenge)
4.4. 漫游代理
收到用户请求后,RAS根据NAS标记(NAS-ID,NAS-IP)确定是本地用户还是漫游用户.如果是本地用户,RAS将在本地用户服务器中查找用户信息;是漫游用户,RAS将记录该请求的有关信息重新打包,发向用户的开户地的RAS;反之,收到异地RAS发来的回应信息,RAS将依次查找所有作为代理的记录,找到相应的记录,在根据受到的回应信息打包发向NAS,并从代理对里列中删除此条记录,丛而完成代理认证的全过程,实现异地漫游认证.
认证服务器RAS完成代理认证后,打包准备向NAS 发出回应信息前,会进行部分属性的转换,以适应不同NAS 的需要,使RADIUS系统不受限于某一种NAS.并带有授权信息,以限定用户的访问范围.下面是代理示意图:
地区` 1 :
用户