首页 > 编程知识 正文

radius协议是哪一层协议(radius是应用层协议吗)

时间:2023-05-06 13:19:10 阅读:73945 作者:3772

虽然从事Radius协议的开发已经有一段时间了,但他还是不惧怕受伤的冷风,浅学并加以炫耀,从Radius协议谈起了对身份认证的认识,并对自己进行了总结。

一RADIUS协议原理

远程身份验证服务(radius )用户的远程拨入验证服务主要面向远程登录类型,如SLIP、PPP、telnet和rlogin RADIUS协议广泛应用于一般电话、互联网服务费用等,通过支持VPN,每个拨打服务器的用户都可以拥有不同的权限。

RADIUS的典型APP应用环境包括:

RADIUS数据包分为五个部分。

)1)代码:1字节,用于区分RADIUS包的类型。 一般类型如下。

访问请求(访问请求),代码=1; 访问权限(Access-Accept ),代码=2; 拒绝访问(Access-Reject ),代码=3; 计费请求(会计-请求)、代码=4等。

) Identifier:字节,用于匹配请求和响应包。

(3) Length:的两个字节表示RADIUS数据区域(包括代码、标识符、长度、认证器和属性)的长度,单位为字节,最小为20

)4) Authenticator:16字节用于验证服务器端响应,也用于加密用户密码。 RADIUS服务器和NAS的共享密钥Shared Secret、请求授权码Request Authenticator和响应授权码Response Authenticator共同支持消息的发送和接收完整性和验证。 此外,用户密码不能在NAS和RADIUS服务器之间以明文形式发送。 通常,使用共享密钥(Shared Secret )和授权码(Authenticator )通过MD5加密算法进行加密隐藏。

)5)描述RADIUS协议属性的信息(如Attributes:不定长度、最小0字节、用户名、密码和IP地址)存储在此数据段中。

各属性的详细编码信息和数据格式仅限于纸面,在此不具体介绍。 有兴趣的人请参阅RFC文档或与我交流。

二RADIUS协议实现

现在,开源包freeRadius和tinyRadius可以下载到实现的源代码中。 freeRadius是目前功能最强大的开源RADIUS服务器软件,采用c语言实现,采用多进程、进程池处理方法,具有良好的吞吐量处理能力,同时用户可以根据自己的需要进行适当的扩展值得一提的是,它采用了模块化处理,用户可以定制适合自己的认证计费处理模块。

freeRadius功能强大,其模块庞大,难以维护,对安装环境有一些要求。 tinyRadius采用Java开发,短小精悍,可以接收各种标准协议的数据包,可以快速封装和解压缩RADIUS数据包,我们可以根据自己的需要进行某些处理,有很大的自由度唯一的

一的缺陷是单线程,没有数据库接口。

 

三.RADIUS协议对安全的考虑

 

RADIUS采用UDP协议基于以下几点原因:

1.  NAS和RADIUS服务器大多在同一个局域网中,使用UDP更加快捷方便。

2.  简化了服务端的实现。

事实证明,采用UDP协议可行,RADIUS有自己的机制,来解决UDP丢包特点。

如果NAS向某个RADIUS服务器提交请求没有收到返回信息,那么可以要求备份RADIUS服务器重传。由于有多个备份RADIUS服务器,因此NAS进行重传的时候,可以采用轮询的方法。如果备份RADIUS服务器的密钥和以前RADIUS服务器的密钥不同,则需要重新进行认证。

下面重点从RADIUS协议来谈下它在身份认证中如何确保安全认证的。

1.  Authenticator:鉴别码,分为请求鉴别码,回应鉴别码。                         

在“Access-Request”数据包中,Authenticator是一个16字节的随机数,称为“Request Authenticator”。 在机密的整个生存周期中(如RADIUAS服务器和客户端共享的机密),这个值应该是不可预测的,并且是唯一的,因为具有相同密码的重复请求值,使黑客有机会用已截取的响应回复用户。因为同一机密可以被用在不同地理区域中的服务器的验证中,所以请求认证域应该具有全球和临时唯一性。

为防止数据包中数据被截获被篡改,回应鉴别码采用如下方式生成:

ResponseAuth = MD5(Code+ID+Length+RequestAuth+ Attributes+Secret);

回应鉴别码是对整个数据包进行MD5演算产生的16字节索引,防止伪造服务器的回应。

2.加密方式。PAP,CAHP,EAP以及Unix登录认证三种加密认证方式。最常用的是前两种,下面介绍下:

PAP加密,采用此加密方法时,密码存放在User-Password属性中。

User-Password加密方法:

1.在密码的末尾用nulls代替填补形成多个十六个字节的二进制数;

2.把密码按16个字节为一组划分为p1、p2等等;

 b1=MD5(Secret + Authenticator)  c(1) = p1 异或 b1

 b2 = MD5(S + c(1))     c(2) = p2 异或b2

                                .

                                .

                                .

 bi = MD5(S + c(i-1))   c (i) = pi 异或 bi

c(1)+c(2)+...+c (i)

 在接收时,这个过程被反过来,由于采用异或方式贯穿在每16个字节之间,同样的算法再异或一次,然后配合MD5演算,从而生成原始的密码,尽管这种加密方式是可逆的,黑客截获到密文后,能通过一定的手段来破解出密码,但如果共享密钥未知的情况下,很难破解,也就只能采用蛮力破解方法。使用共享密钥应采用合适的长度,来防止破解,不应过短。

 

PAP加密方法使密码以密文的方式在网络中进行传输,使黑客仍有有机可乘的机会,但CHAP加密方法阻止了密码的传输。

CHAP加密,采用此加密方法时,密码存放在Chap-Password属性中。

这种加密方法的原则是不是密码在网络中进行传输,而只是传输一个索引值,从而增加了安全性,但这样做的代价是,RADIUS服务端必须要知道用户的密码,从而再现密码索引值来和发来的认证请求中的密码索引值比对。

Chap-Password加密方法:

Md5(chapId+password+chapChallenge);

chapId :可以是随机产生的一字节码;

chapChallenge  :NAS生成一个随机挑战字(16个字节比较合适)

              该字段有时缺失,读取Authenticator域作为挑战字。

3.共享密钥(Secret):共享密钥在密码加密以及数据包的鉴别码部分都参与了运算,即使RADIUS数据包被截获,但不知道共享密钥,很难破解用户的密码伪造数据。共享密钥应采用合适的长度,不应过短,宽大密码范围能有效提供对穷举搜寻攻击的防卫,随着密钥长度的增加,其破解花费的时间将大大增加。

4.为防止非法用户的重放攻击,造成服务器瘫痪。如果在一个很短的时间片段里,一个请求有相同的客户源IP地址、源UDP端口号和标识符,RADIUS服务器会认为这是上一个重复的请求,将直接丢弃,不做任何处理。

 

 

四.总结

 

Radius协议本身比较易掌握,在应用中,可以结合其自身的密码方式,实现满足企业需要的更高强度的强认证,比如结合各种令牌卡,手机短信等等。对协议进行开发,离不开各种抓包工具,像sniffer,tcpdump,ethereal等抓包工具的使用。

外部用户要访问某局域网络中计算机设备,其访问方式有多种,比如采用VPN拨号,Telnet等等。如用户Telnet登陆时,产生用户名和密码信息,而NAS服务器AAA配置中指定了采用RADIUS作为认证服务器,则将其封装成RADIUS请求数据包发送到RADIUS服务器进行身份认证,RADIUS服务器通过NAS和用户进行交流,以提示用户认证通过与否,以及是否需要Challenge身份认证。

 

其工作原理为:用户接入NAS (Net Access Server),NAS一般为路由器等设备,NAS向RADIUS服务器使用Access-Request数据包提交用户信息,包括用户名、密码等相关信息,其中用户密码是经过MD5加密的,双方使用共享密钥,这个密钥不经过网络传播;RADIUS服务器对用户名和密码的合法性进行检验,必要时可以提出一个Challenge,要求进一步对用户认证,也可以对NAS进行类似的认证;如果合法,给NAS返回Access-Accept数据包,允许用户进行下一步工作,否则返回Access-Reject数据包,拒绝用户访问;如果允许访问,NAS向RADIUS服务器提出计费请求Account-Require,RADIUS服务器响应Account-Accept,对用户的计费开始,同时用户可以进行自己的相关操作。

RADIUS还支持代理和漫游功能。简单地说,代理就是一台服务器,可以作为其他RADIUS服务器的代理,负责转发RADIUS认证和计费数据包。所谓漫游功能,就是代理的一个具体实现,这样可以让用户通过本来和其无关的RADIUS服务器进行认证。

RADIUS能够实现其功能依赖于它自身的数据包结构。RADIUS采用的是UDP传输协议,认证和计费监听端口一般分别为:1812,1813。

以太网上的RADIUS封装后的包结构如下:

 

以太帧头

IP包头

UDP包头

RADIUS数据包

以太网FCS

 

 

在这里我们关心的是红色RADIUS数据包部分。

RADIUS数据包的格式如下:

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。