2013-12-03 16:06 5791人阅读 评论(0) 收藏 举报
 分类:
Radius协议分析(6) 

从事Radius协议开发有段时间了,小弟不怕才疏学浅,卖弄一下,从RADIUS协议谈谈对身份认证的认识,也总结一下自己。

一.RADIUS协议原理

RADIUS(Remote Authentication Dial In User Service) 用户远程拨入认证服务,它主要针对的远程登录类型有:SLIP、PPP、telnet和rlogin等。RADIUS协议应用范围很广,包括普通电话、上网业务计费,对VPN的支持可以使不同的拨入服务器的用户具有不同权限。

RADIUS典型应用环境如下:

RADIUS数据包分为5个部分:

(1)       Code:1个字节,用于区分RADIUS包的类型:常用类型有:

接入请求(Access-Request),Code=1;接入允许(Access-Accept),Code=2;接入拒绝(Access-Reject),Code=3;计费请求(Accounting-Request),Code=4等。

(2)Identifier:一个字节,用于请求和应答包的匹配。

(3)Length:两个字节,表示RADIUS数据区(包括Code, Identifier, Length, Authenticator, Attributes)的长度,单位是字节,最小为20,最大为4096。

(4)Authenticator:16个字节,用于验证服务器端的应答,另外还用于用户口令的加密。RADIUS服务器和NAS的共享密钥(Shared Secret)与请求认证码(Request Authenticator)和应答认证码(Response Authenticator),共同支持发、收报文的完整性和认证。另外,用户密码不能在NAS和RADIUS 服务器之间用明文传输,而一般使用共享密钥(Shared Secret)和认证码(Authenticator)通过MD5加密算法进行加密隐藏。

(5)Attributes:不定长度,最小可为0个字节,描述RADIUS协议的属性,如用户名、口令、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数据包的格式如下:

2013-12-03 16:06 5791人阅读 评论(0) 收藏 举报
 分类:
Radius协议分析(6) 

从事Radius协议开发有段时间了,小弟不怕才疏学浅,卖弄一下,从RADIUS协议谈谈对身份认证的认识,也总结一下自己。

一.RADIUS协议原理

RADIUS(Remote Authentication Dial In User Service) 用户远程拨入认证服务,它主要针对的远程登录类型有:SLIP、PPP、telnet和rlogin等。RADIUS协议应用范围很广,包括普通电话、上网业务计费,对VPN的支持可以使不同的拨入服务器的用户具有不同权限。

RADIUS典型应用环境如下:

RADIUS数据包分为5个部分:

(1)       Code:1个字节,用于区分RADIUS包的类型:常用类型有:

接入请求(Access-Request),Code=1;接入允许(Access-Accept),Code=2;接入拒绝(Access-Reject),Code=3;计费请求(Accounting-Request),Code=4等。

(2)Identifier:一个字节,用于请求和应答包的匹配。

(3)Length:两个字节,表示RADIUS数据区(包括Code, Identifier, Length, Authenticator, Attributes)的长度,单位是字节,最小为20,最大为4096。

(4)Authenticator:16个字节,用于验证服务器端的应答,另外还用于用户口令的加密。RADIUS服务器和NAS的共享密钥(Shared Secret)与请求认证码(Request Authenticator)和应答认证码(Response Authenticator),共同支持发、收报文的完整性和认证。另外,用户密码不能在NAS和RADIUS 服务器之间用明文传输,而一般使用共享密钥(Shared Secret)和认证码(Authenticator)通过MD5加密算法进行加密隐藏。

(5)Attributes:不定长度,最小可为0个字节,描述RADIUS协议的属性,如用户名、口令、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数据包的格式如下:

【转】 浅谈Radius协议的更多相关文章

  1. 转:浅谈Radius协议 -来自CSDN:http://blog.csdn.net/wangpengqi/article/details/17097221

    浅谈Radius协议 2013-12-03 16:06 5791人阅读 评论(0) 收藏 举报  分类: Radius协议分析(6)  从事Radius协议开发有段时间了,小弟不怕才疏学浅,卖弄一下, ...

  2. 浅谈HTTP协议(下)

    下面来讲响应消息.响应消息也分为响应起始行.响应头部.CRLF.响应主体. 响应起始行包括协议版本.响应状态码.原因短句.这里的重点就是响应状态码,它一共分为5类,状态码准确的说是一个三位数. 1xx ...

  3. 浅谈FIle协议与Http协议及区别

    背景 先看三段代码: index.html: <!DOCTYPE html> <html lang="en"> <head> <meta ...

  4. 浅谈ARP协议以及应用

    0. 前言 本章主要简单的介绍ARP的协议格式,主机如何发送和处理ARP报文,以及免费ARP. 1. ARP协议原理 ARP,全称Address Resolution Protocol,地址解析协议, ...

  5. 浅谈HTTP协议(上)

    今天讨论一下HTTP协议.一个做前端的,如果连HTTP协议都不了解,那实在是太不合格了. 首先,什么是HTTP?Hyper Text Transfer Protocol(超文本传输协议),用在浏览器和 ...

  6. 从日常开发说起,浅谈HTTP协议是做什么的。

    引言 HTTP协议作为Web开发的基础一直被大多数人所熟知,不过相信有很多人只知其一不知其二.比如咱们经常用到的session会话机制是如何实现的,可能很多人都说不出来吧.其实session会话就是H ...

  7. 通过Java代码浅谈HTTP协议

    最近刚看了http协议,想写点东西加深一下理解,如果哪儿写错了,请指正. 1 介绍 HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.它的发展是万维网协会(W ...

  8. 浅谈HTTP协议

    1 HTTP概念 把握三个点: 1 HTTP协议(超文本传输协议) HTTP是一个基于TCP/IP通信协议来传递数据,默认端口80 2 HTTP是无连接(限制每次连接只处理一个请求),无状态的(对于事 ...

  9. 浅谈HTTP协议与TCP协议

    HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送议. 主要特点 ...

随机推荐

  1. 面试准备(三) Java 异常类层次结构

    在Java中,异常分为受检查的异常,与运行时异常. 两者都在异常类层次结构中.这类容易出选择题 考试你是否掌握了异常类并清楚哪些异常类必须捕获 下面的图展示了Java异常类的继承关系. 图1 粉红色的 ...

  2. aptana studio 3汉化方法 及支持jquery的方法

    之前看弦哥的 Asp.Net大型项目实践系列第二季(一)哥欲善其事,必先利其器 看到他介绍了aptana,好像用来学习js是个好工具... 因为不论你写什么,都会提示你它在各个浏览器中是否被支持... ...

  3. Opencv step by step - 自适应阈值

    上个博客提到的阈值化只是针对图像全局进行阈值化,opencv提供了一个更好的函数cvAdaptiveThreshold,可以做到局部特征的阈值化,这样一来, 整个图像的信息可以被更好的提取. #inc ...

  4. 学习笔记——Maven实战(六)Gradle,构建工具的未来?

    Maven面临的挑战 软件行业新旧交替的速度之快往往令人咂舌,不用多少时间,你就会发现曾经大红大紫的技术已经成为了昨日黄花,当然,Maven也不会例外.虽然目前它基本上是Java构建的事实标准,但我们 ...

  5. php中的错误级别

    在php编程过程中,大家一定会遇到或多或少的错误提醒,也正是这些错误提示,指引我们编写更加干净的代码,今天先写出我们主要列出的错误类型,先挖坑,写关于php错误与异常的相关知识,慢慢填坑.    De ...

  6. 『随笔』WCF开发那些需要注意的坑

    执行如下 批处理:"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\svcutil.exe" http://127.0.0.1: ...

  7. 千万不要在JS中使用连等赋值操作

    前言 文章标题这句话原本是在国外某JavaScript规范里看到的,当时并没有引起足够的重视,直到最近一次出现了bug发现JS里的连等赋值操作的特色(坑). 网上搜索一番发现一个非常好的连等赋值的(来 ...

  8. 服务器端解决JS跨域调用问题

    一. 使用JSONp方式调用 不做详细讲解,可以参考jq文档 二. 服务端配置 修改Web.config 文件 <system.webServer> <modules runAllM ...

  9. node的实践(项目二)

    找以前看看简单的demo,看看node是怎么操作Mongo然后又是渲染前台的,与前面的项目一中的对比. 1.操作Mongo数据库的方法和方式. var mongodb = require('./db' ...

  10. [BZOJ2879][Noi2012]美食节(最小费用最大流动态加边)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2879 分析: 和bzoj1070一样,但这题的数据范围大了很多,如果直接建图就会TLE ...