Radius协议详细说明

Radius协议是什么:

   Radius是Remote Authentication Dial In User Service的简称,即远程验证拨入用户服务。当用户想要通过某个网络(如电话网)与网络接入服务器NAS(Network Access Server)建立连接从而获得访问其它网络的权力时,NAS可以选择在NAS上进行本地认证计费,或把用户信息传递给Radius服务器,由Radius进行认证计费。Radius协议规定了NAS与Radius服务器之间如何传递用户信息和记账信息,Radius服务器负责接收用户的连接请求,完成验证,并把传递服务给用户所需的配置信息返回给NAS。例如:用户要求得到某些服务(如SLIP, PPP, telnet),必须通过NAS,由NAS依据某种顺序与所连服务器通信从而进行验证。用户通过拨号进入NAS,然后NAS按配置好的验证方式(如PPP PAP, CHAP等)要求输入用户名,密码等信息,用户按提示输入。通过与NAS的连接,NAS得到这些信息。而后,NAS把这些信息传递给Radius服务器,并根据服务器的响应来决定用户是否可以获得他所要求的服务。

什么是AAA协议

Radius是AAA协议的一个实现,那么什么是AAA协议?

AAA是鉴别,授权和记账(Authentication, Authorization, Accounting)的简称,它是运行于NAS上的客户端程序,提供了一个用来对鉴别,授权和记账这三种安全功能进行配置的一致的框架。一个网络允许外部用户通过公用网对其进行访问,从而用户在地理上可以极为分散。大量分散用户通过Modem等设备从不同的地方可以对这个网络进行随机访问。用户可以把自己的信息传递给这个网络,也可以从这个网络得到自己想要的信息。由于存在内外的双向数据流动,网络安全就成为很重要的问题了。大量的modem形成了Modem pools。对modem pool的管理就成为网络接入服务器或路由器的任务。管理的内容有:哪些用户可以获得访问权,获得访问权的用户可以允许使用哪些服务,如何对使用网络资源的用户进行记费。AAA很好地完成了这三项任务。AAA的配置实际上是对网络安全的一种管理,这里的网络安全主要指访问控制,包括哪些用户可以访问网络服务器,具有访问权的用户可以得到哪些服务,如何对正在使用网络资源的用户进行记账。下面简单介绍一下鉴别,授权,记账的作用。

   鉴别(Authentication):鉴别用户是否可以获得访问权,可以选择使用RADIUS协议。

   授权(Authorization) :授权用户可以使用哪些服务。

   记账(Accounting)    :记录用户使用网络资源的情况。

Radius作用

Radius服务器能用来管理使用串口和调制解调器的大量分散用户。当用户想要通过某个网络(如电话网)与NAS建立连接从而获得访问其他网络的权利(或取得使用某些网络资源的权利)时,NAS起到了过问用户(或这个连接)的作用。NAS负责把用户的鉴别,授权,记账信息传递给Radius服务器。Radius协议规定了NAS与Radius服务器之间如何传递用户信息和记账信息,即两者之间的通信规则。Radius服务器负责接收用户的连接请求,完成鉴别,并把传递服务给用户所需的配置信息返回给NAS。用户获得授权后,在其正常上线、在线和下线过程中,Radius服务器完成对用户账号计费的功能。

RADIUS协议的认证端口号为1812(1645端口由于冲突已经不再使用),计费端口号为1813或(1646端口由于冲突已经不再使用)。RADIUS通过建立一个唯一的用户数据库,存储用户名,用户的密码来进行鉴别、存储传递给用户的服务类型以及相应的配置信息来完成授权。RADIUS协议具有很好的扩展性。RADIUS包是由包头和一定数目的属性(Attribute)构成的。新属性的增加不会影响到现有协议的实现。通常的NAS厂家在生产NAS时,还同时开发与之配套的Radius服务器。为了提供一些功能,常常要定义一些非标准的(RFC上没有定义过的)属性。

  

Radius的主要特点:

1.客户端/服务器模型

网络访问服务器(NAS)作为RADIUS的客户端运行。该客户负责将用户信息传递给指定RADIUS服务器,然后对返回的响应进行操作。RADIUS服务器负责接收用户连接请求,认证用户,然后返回所有客户端交付所需的配置信息服务给用户。

RADIUS服务器可以作为其他RADIUS服务器的代理客户端或其他种类的认证服务器。

2.网络安全

客户端和RADIUS服务器之间的事务是通过使用共享密钥进行身份验证。另外,发送任何用户密码在客户端和RADIUS服务器之间加密,消除有人窥探不安全网络确定用户密码的可能性。

3.灵活的认证机制

RADIUS服务器可以支持多种认证方式认证一个用户。它可以支持PAP或CHAP,UNIX登录等认证机制。

4.可扩展协议

所有交易均由可变长度Attribute-长度值3元组。可以添加新属性值从而影响协议的现有实现。

Radius操作流程:

   发送流程:

  当客户端配置为使用RADIUS时,客户端的任何用户向客户端提供认证信息。例如用户希望输入他们的用户名和密码。或者,用户可以使用a链路成帧协议,如点对点协议(PPP),其具有承载该信息的认证分组。一旦客户端获得了这样的信息,它可以选择使用RADIUS进行身份验证。为此,客户端创建一个“Access-Request”包含用户名称,密码等一系列的属性,客户端的ID和用户所在的端口ID访问。当存在密码时,则需要对密码进行加密,采用的是基于RSA消息摘要算法MD5来加密的。Access-Request通过网络提交给RADIUS服务器。如果在一段时间内没有返回响应,请求会进行多次重发。客户端也可以转发请求在主服务器的无响应的情况下,将请求转发到备用服务器备用处理请求

   接收流程:

一旦Radius服务器收到请求,它会验证发送客户。如果该请求包没有公共密钥是会被默认丢弃的。如果客户是有效,RADIUS服务器咨询用户的数据库查找名称与请求相匹配的用户。数据库中的用户条目包含必须满足的要求列表以允许访问用户。这总是包括验证密码,还可以指定用户允许的客户端或端口访问,通过校验返回一个Access-Accept反之发送Access-Reject。

认证方式:

远端(Radius)验证——PAP方式:

采用 PAP 验证过程如下:

1.用户以明文的形式把用户名和他的密码传递给 NAS。

2.NAS把用户名和加密过的密码放到认证请求包的相应属性中传递给 RADIUS 服务器。

3.根据RADIUS服务器的返回结果来决定是不允许用户上网。

PS:此处的加密是采用密码明文与共享秘钥异或作为加密方式。用户端得到了加密信息根据相同的共享秘钥异或取得密码明文

远端(Radius)验证——CHAP方式:

CHAP 验证过程如下:

1、 当用户请求上网时,NAS 产生一个 16 字节的随机码给用户(同时还有一个 ID 号, 本地路由器的 host name)。

2、 用户端得到这个包后使用自己独有的设备或软件对传来的各域进行加密,生成一个 response 传给 NAS。

3、 NAS 把传来的 CHAP ID 和 response 分别作为用户我和密码,并把原来的 16 字节随 机码(challenge)传给 RADIUS 服务器。

4、 RADIUS 根据用户名在服务器端查找数据库,得到和用户端进行加密所有的一样的 密码,然后根据传来的 16 的字节的随机码进行加密,将其结果与传来的 password 作比较,如果相同表明验证通过,如果不相同表明验证失败。另外,如果验证成功, RADIUS 服务器同样也要以生成一个 16 字节的随机码对用户进行询问(challenge,暂 不支持)

Radius数据包结构:

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 ...

+-+-+-+-+-+-+-+-+-+-+-+-+-

1.Code

  代指数据包的编号,标识了该数据包是什么类型的,如果是未知类型的数据包就会被默认丢弃,目前大致有一下几种编号:

编号           类型                                    描述

---------------------------------------------------------------------------------------------------

1        Access-Request                 ---访问请求包

2        Access-Accept                   ---访问接受包

3        Access-Reject                    ---访问拒绝包

4        Accounting-Request           ---计费请求包

5        Accounting-Response        ---计费反馈包

11      Access-Challenge              ---转发(二次验证)包

255   Reserved                            ---保留,在生成一个新的数据包时使用

2.Identifier

  指的是一个八位的字节编码,有助于匹配请求,例如能标识出短时间内同一个IP端口发出的重复请求,防止重放攻击,将重复的数据包直接丢弃,不做任何处理。

3.Length

  该字段为长度字段是两个八位字节。它表示的数据包的长度包括代码,标识符,长度,认证器和属性字段。最小长度为20和最大长度是4096。超过长度字段范围外的字节在接收时会被忽略而如果数据包比长度字段表示短则会被认为是数据丢失而被默认丢弃。

4.Authenticator

a)请求认证器

在Access-Request数据包中,Authenticator值为16八位字节随机数,称为请求认证器。这个值应该要是一个唯一的不可预测的特殊并且值客户端和RADIUS服务器之间共享的防被他人攻击获取。这个值通过客户端和服务器共享一个共享秘钥以及其他信息进行MD5加密(具体的加密操作是否类似响应认证器以及是否能换成Sha-256没有测试过)。

b)响应认证器

    在Access-Accept,Access-Reject和Access-Challenge数据包中的Authenticator被称为响应认证器。

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

其中“+”为连接符号,Secret为共享密钥。

5.Attributes

   存储用户的信息,如用户名,IP地址等。

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

Radius属性字段:

RADIUS属性携带特定的认证,授权,请求和回复的信息和配置详细信息。。

   属性的结果如下图所示:

0                   1                   2

0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-

|     Type      |    Length     |  Value ...

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-

Type:

类型字段是一个八位字节。是用于区分数据包中的数据类型,例如常用的User-Name字段就是表面这个属性所附带的信息就是用户名字段,在默认的数据字典中,Radius服务器定义了大约有60种左右的数据类型,如果你想要使用默认的数据类型的话,你需要对新增的数据类型进行定义,否则RADIUS服务器/客户端会忽略具有未知类型的属性。目前我所接触到的常用类型共有以下种类:

1、User-Name

该字段表示用户名,它必须在Access-Request数据包中发送

2、User-Password

该字段表示用户密码,该属性指示用户的密码进行身份验证,或者用户在访问访问后的输入。只用在访问请求包中。

3、NAS-IP-Address

该字段表示请求访问的地址

4、NAS-Port

该字段表示请求访问的端口号

5、Service-Type

该字段用于确定请求包所请求的是什么服务,通常服务有一下几种:

1        Login

2        Framed

3        Callback Login

4        Callback Framed

5        Outbound

6        Administrative

7        NAS Prompt

8        Authenticate Only

9        Callback NAS Prompt

10     Call Check

11     Callback Administrative

关于加密:

RADIUS 协议的加密是使用 MD5 加密算法进行的,在 RADIUS 的客户端(NAS)和服务器端 (Radius Server)保存了一个密钥(key),RADIUS 协议利用这个密钥使用 MD5 算法对 RADIUS 中的数据进行加密处理。密钥不会在网络上传送(两端使用一个都知晓的密钥,从而不需要 再从网络上传输告之)。RADIUS 的加密主要体现在两方面:

包加密:

在 RADIUS 包中,有 16 字节的验证字(authenticator)用于对包进行签名,收到 RADIUS 包的一方要查看该签名的正确性。如果包的签名不正确,那么该包将被丢弃,对包进行签名 时使用的也是 MD5 算法(利用密钥),没有密钥的人是不能构造出该签名的。

口令加密:

在认证用户时,用户的口令不会在网上明文传送,而是使用了 MD5 算法对口令进行加密。 没有密钥的人是无法正确加密口令的,也无法正确地对加密过的口令进行解密。

包的签名与加密:

包的签名指的是 RADIUS 包中 16 字节的 Authenticator,我们称其为“验证字”。

·认证请求包:RequestAuth=Authenticator,认证请求包的验证字是一个不可预测的 16 字节随机数。这个随机数将用于口令的加密。

·认证响应包:ResponseAuth = MD5(Code+ID+Length+Authenticator+Attributes+Key)

·计费请求包:RequestAcct= MD5(Code+ID+Length+16ZeroOctets+Attributes+Key)

·计费响应包:ResponseAcct = MD5(Code+ID+Length+RequestAcct+Attributes+Key) 口令的加密:

称共享密钥(key)为 Key;16 字节的认证请求验证字(Authenticator)为 Auth;将口令 (Password)分割成 16 字节一段(最后一段不足 16 字节时用 0 补齐),为p1、p2 等;加密后 的口令块为 c(1)、c(2)等。下面运算中 b1、b2 为中间值:

那么加密后的口令为 c(1)+c(2)+...+c(i)。

上面是协议规定的算法,也有的 RADIUS 服务器为了实现起来简单,修改了上述的 算法,具体的讲,b1 的算法同上,但 bi=b2=b1(i>=1),其他运算不变。当用户的口令长度不 超过 16 字节时,两种算法的结果是一样的

 

   以上内容参考:RFC:https://tools.ietf.org/html/rfc2865;

                                     TinyRadius使用手册:http://download.csdn.net/detail/songtzu/8388809  ;

Radius协议简单介绍相关推荐

  1. 中国移动WMMP物联网协议简单介绍

    这段时间一直在实现中国移动WMMP物联网协议,现在将该协议简单总结一下. 该协议主要是M2M平台通过GPRS网络或者短信远程管理M2M终端,包括分配终端序列号,采集终端配置信息, 配置终端参数, 软件 ...

  2. XMPP协议简单介绍

    2019独角兽企业重金招聘Python工程师标准>>> 由于博客迁移至www.coderyi.com,文章请看http://www.coderyi.com/archives/434 ...

  3. POP3协议简单介绍

    在Internet,POP3(Post Office Protocol 3)协议通常被用来接收电子邮件.这个协议很容易学,因为它只包含12个命令(其中有3个你完全可以忽略它们的存在).这些命令被客户端 ...

  4. SSL和SSH协议简单介绍。

    工作的网络层次 在OSI七层模型中,这两个安全传输协议其实都是建立在应用层上的. (图片来源:Wikipedia) 设计意图及举例 ①.在最初的设计意图中: SSL被设计为加强Web安全传输(HTTP ...

  5. PBAP协议 简单介绍

    以下的内容摘自PBAP规范1.2.3 1,phone book object类型 pb:主电话本.有的电话本数据是存储在手机本身里,还有的存储在SIM卡里. ich:接电话列表. och:打电话列表. ...

  6. Http协议简单介绍

    一.Http协议解析 HTTP(HyperText Transfer Protocol)即超文本传输协议,是一种详细规定了浏览器和万维网服务器之间互相通信的规则,它是万维网交换信息的基础,它允许将HT ...

  7. 量子BB84,B92协议简单介绍

    最近开设量子课程,闲着没事把学过协议做一个整理,这次准备BB84与B92协议,E91协议也看了,不过还有很多地方没有想明白,等学明白了在写一下E91理解,参考书籍为<量子密码学>,曾贵华著 ...

  8. Zookeeper的Paxos算法,(2P/3P/CAP/BASE)一致性协议简单介绍

    2P/3P提交(为了保证事务的ACID) 2P 就是二段提交(RDBMS经常就这种机制,保证强一致性),3P就是三段提交: 2P提交 -- 1阶段:提交事务请求(投票阶段)               ...

  9. 基于SIP和RTP协议的开源VOIP之QuteCom简单介绍

    **************************************************************************************************** ...

  10. Radius协议工作原理及双因素认证应用

    运维的朋友应该对AAA协议不陌生吧,认证(Authentication).授权(Authorization)和计费(Accounting),是网络安全中进行访问控制的一种安全管理机制,其中Radius ...

最新文章

  1. python创建文件夹命令_python文件操作指令
  2. linux通信中recv,linux套接字通信之recv中的缓存机制的研究
  3. 百练OJ:2808:校门外的树
  4. fileviewpro绿色免安装版
  5. 孤掌难鸣-------堵水眼
  6. html js点击字图片下拉,JavaScript实现文字与图片拖拽效果的方法
  7. IDEA15 下运行Scala遇到问题以及解决办法
  8. 锻炼产品架构思维的4个维度
  9. (90)FPGA仿真计数器激励
  10. 用python画玫瑰花-用python画一朵玫瑰给你
  11. redis分布式锁简单总结
  12. 简单的Spring配置文件
  13. 易用性软件测试用例,易用性测试用例集
  14. 李秋豪计算机系统,CS:APP3e 深入理解计算机系统_3e Y86-64模拟器指南
  15. kubernetes(k8s):使用statefulset部署mysql主从集群
  16. Hexo博客与Next主题的高级应用
  17. Thinkpad SL400开机屏幕亮度问题解决了
  18. [周鸿祎] 与其苟且活着,不如奋起抗争
  19. LeetCode-Hot100-无重复字符的最长子串
  20. R 一行代码出Cox回归模型的表格

热门文章

  1. 图像风格迁移 CycleGAN原理
  2. 记住三句话,就会用双拼(韵母键快速记忆口诀)
  3. java报告模板_JAVA报告模板.doc
  4. Jack Lin tools 3Dmax批渲染插件
  5. 在web项目中使用MarkDown组件
  6. 分布式定时任务调度框架
  7. 思科SDN技术:ACI架构概述
  8. android系统b181更新包,华为nova 2s官方固件rom刷机包_华为nova2s完整系统升级包
  9. 计算机最早应用于( )领域,计算机最早被应用于()领域。
  10. 动态规划(一)——矩阵连乘