浅谈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数据包的格式如下:

转载于:https://www.cnblogs.com/the-tops/p/5604442.html

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

  1. 【转】 浅谈Radius协议

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

  2. 浅谈HTTP协议的作用过程

    浅谈http协议的作用过程 引言 正文 一.HTTP定义 二.HTTP完整的请求过程 域名解析 与服务器建立连接 发送http请求给服务器 服务器返回数据给客户端 客户端与服务器端断开通信 结束语 引 ...

  3. 浅谈IPv4协议与IPv6协议的区别

    浅谈IPv4协议与IPv6协议的区别?咱们先了解下什么叫IPv4协议和IPv6协议.IPv4,是互联网协议(Internet Protocol,IP)的第四版,应属第一个被广泛应用,构成现阶段互联网技 ...

  4. 浅谈TCP协议与DDOS

    本节内容 1.TCP协议浅谈 1.HTTP连接 2.SOCKET原理 3.TCP介绍 4.TCP连接的三次握手与四次挥手 2.DDOS 1.什么是DDOS 2.攻击原理 3.防护方法 4.其他攻击方式 ...

  5. 猫与虎——浅谈开源协议与开源精神

    本周对中国开源界影响最大的事件是什么?我想,莫过于射手播放器开发日志中关于"射手播放器项目公开谴责腾讯违反开源协议"(原文地址:http://blog.splayer.org/?p ...

  6. 浅谈网络协议(一) 为什么要学网络协议

    2019独角兽企业重金招聘Python工程师标准>>> 最近在学习网易研究院云技术部首席架构师刘超先生的趣谈网络协议,开一个系列记录一下. 本系列文章是在原作的基础上修正,并加以自己 ...

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

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

  8. 浅谈Linux协议和组成

    根据自己学习Linux方面的知识,浅谈下linux的协议和组成,那首先了解下计算机的组成和功能: 计算机系统由硬件(hardware)系统和软件(software)系统两大部分组成:1.硬件系统由主机 ...

  9. 浅谈tcp协议与tcp_tw

    浅谈tcp_tw_reuse 流量控制.拥塞控制 什么是TIME_WAIT状态? 为什么要设计TIME_WAIT状态? 原因一:防止历史连接中的数据,被后面相同四元组的连接错误的接收 原因二:保证「被 ...

最新文章

  1. swift 4.0 创建tableview 自定义cell
  2. Cell综述:口腔微生物群的部位特点:微米级生境与生态位
  3. 用python监控磁盘_使用python怎么对服务器cpu和磁盘空间进行监控
  4. boost::callable_traits的remove_member_volatile_t的测试程序
  5. 第五章模糊查询和聚合函数
  6. 如何反编译.apk(注:CSDN上提供的资源过时了,都用不了)
  7. java 中 byte[]、File、InputStream 互相转换
  8. 「leetcode」78. 子集【回溯算法】详解!
  9. shopnc B2B2C商城 Nginx下开启伪静态
  10. TP LINK交换机 console 超级终端链接设置
  11. Java 爬虫系列丨(一)爬虫介绍
  12. 实数系与实数定理(上)
  13. [4G5G专题-77]:流程 - 4G LTE 接入网的随机接入流程
  14. Python数据分析(五) —— 绘制直方图
  15. 计算机word画铁路,在word中画铁路线.docx
  16. 求一个数的所有因数+质因数分解【数论】
  17. 雷军考察小鹏汽车,IPO后的小米终于要造车了?
  18. ios13屏蔽系统更新方法
  19. PHP中文乱码的三个原因及解决方法
  20. 半阳不阳后的一些总结

热门文章

  1. 由于超过32位java限制_Java 32位Xmx vs java 64位Xmx
  2. scrapy——抓取知乎
  3. python扫雷 高级算法_Python玩转算法—扫雷
  4. php语言进销存单位换算,单位换算工具(在线换算单位器)
  5. 采集存储板第218篇:基于5VFX70T的3U VPX 光纤数据采集存储板
  6. ug12在win8计算机名错,Win8安装UG9.0时出错提示“UGII_TMP_DIR 被设为一个有无效(非ASCII)字符的目录”怎么办...
  7. 计算机教师专业发展规划,信息技术教师个人成长计划
  8. Recsys 2018长篇论文总结
  9. c语言转义字符(c语言转义字符是什么意思)
  10. 计算机与化学相关论文,计算机化学化工学论文