找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 7269|回复: 9

[其它] 折腾raidus中,请教rfc2865,2866

[复制链接]
发表于 2009-10-24 10:55:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

×
朋友需要,摆弄winraidus,然后才发现这玩意居然不支持pptp、l2tp......一气之下自己动手写raidus,努力翻看rfc2865,2866,好像也挺简单,各主要段落很快就被拆分(方便理解),唯一的就是在理解Authenticator的时候卡住了,楞是没在字面上理解request authenticator及response authenticator的算法,反正我按照公式算出来的结果和预期的总是对不上-_-",我猜我应该是理解错公式了

另问,2865、2866两者之间究竟是什么关系?什么设备支持2865什么设备支持2866?raidus怎知道送过来的是2865还是2866请求(貌似两者就authenticator的算法不一样)?
routeros
发表于 2009-10-24 11:00:11 | 显示全部楼层
你参考下freeradius的源码不就OK了。
主要看里面的mschap那个模块的代码,然后copy一些过来,呵呵
routeros
回复

使用道具 举报

发表于 2009-10-24 11:14:42 | 显示全部楼层
在电脑上找到这个
RADIUS协议的包格式(2007-07-19 00:12:08)   分类:技术文档
1、 RADIUS协议的包格式
RADIUS数据包是被封装在UDP的数据域中的。
RADIUS的包数据格式如下所示,各域(Fields)的先后次序是从左到右。
    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
Code域有一个字节长度,用来标示RADIUS通信包的类型。当收到一个非法的包类型,将被丢弃。
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
Identifier有一个字节长度,用来匹配RADIUS的请求和应答。
Length
Length有2个字节长度,它标明整个RADIUS数据包的长度,包括:Code, Identifier, Length, Authenticator 和Attributes。Length的最小值为20,最大值为4096。RADIUS的应用程序将丢弃小于20的包;对大于4096的包将把超出部分丢弃,只处理有效部分(超出部分被认为是填充域)。
Authenticator
Authenticator域有16个字节。这个域用来完成安全性检查,所以是非常重要的。Authenticator的作用有两个,一个是验证从RADIUS服务器返回的应答;另一个是为对口令部分加密算法做参数。
有两种Authenticator:
1)          Request Authenticator
出现在通信包“Access-Request”中,是长度为16字节的随机二进制串。格式为:
    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             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   |                     Request Authenticator                     |
   |                                                               |
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  Attributes ...
   +-+-+-+-+-+-+-+-+-+-+-+-+-
RADIUS协议建议Request Authenticator应该是不可预测和在整个生命期内是唯一的。这是为了防止攻击者伪装成通信的一方的措施。RADIUS请求方(NAS)用Request Authenticatior加密用户密码;相反,RADIUS服务器则用它来对用户密码,并生成应答包的Authenticator(Response Authenticatior)。如果Request Authenticator不是唯一的话,网络窃听者将可以伪造RADIUS服务器的应答,因为此时Response Authenticator的加密算法有相同的参数(详见下文)。
用户密码部分的加密算法是:
enpassword = password XOR MD5(secret + Request Authenticator)
2)          Response Authenticator
出现在通信包“Access-Accept”、“Access-Reject”、“Access-Challenge”和“Accounting-Response”中。格式为:
    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 ...
   +-+-+-+-+-+-+-+-+-+-+-+-+-
Response Authenticator产生的算法:
Response Authenticator =
MD5(Code + Id + Length + Req-Authenticator + Attributes + Secret)
routeros
回复

使用道具 举报

 楼主| 发表于 2009-10-24 11:20:28 | 显示全部楼层
我知道,我也看过了,单就是在这里迷糊了...
你这是2865的,算法是 enpassword = password XOR MD5(secret + Request Authenticator)
和 Response Authenticator = MD5(Code + Id + Length + Req-Authenticator + Attributes + Secret)
但在2866里则是 Code+Identifier+Length+16个值为0的字节+请求属性+共享密钥 和 MD5( Code+Identifier+Length+对应的计费请求包的请求认证字+回应属性(如果有的话)+共享密钥 )

2865里有示范性的应答报文,但我无论怎理解 password XOR MD5(secret + Request Authenticator) ,得出的结果依然和2865里的示范结果不一致-_-"
routeros
回复

使用道具 举报

 楼主| 发表于 2009-10-24 19:48:18 | 显示全部楼层
搞半天终于搞定 password XOR MD5(secret + Request Authenticator) ,也算重要突破了,的确是理解错误.........
有谁有更多资料或者曾经折腾过的,来点经验之谈?
routeros
回复

使用道具 举报

发表于 2009-10-24 20:18:28 | 显示全部楼层
又见高手 鸡动ing
routeros
回复

使用道具 举报

发表于 2009-10-24 20:34:31 | 显示全部楼层
routeros
回复

使用道具 举报

发表于 2009-10-24 21:25:45 | 显示全部楼层
呵呵,不错,自己动手,本来也想研究一下,不过现在暂时不研究了。
routeros
回复

使用道具 举报

 楼主| 发表于 2009-10-24 21:34:48 | 显示全部楼层
楼上的,api那那里俺也初步搞明白了....嘿嘿...半桶水就是郁闷,在这里被称呼高手,但在编程论坛俺却被损了半天-_-"
routeros
回复

使用道具 举报

发表于 2009-10-24 23:00:34 | 显示全部楼层
支持!慢慢研究吧。呵呵。
routeros
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|手机版|小黑屋|软路由 ( 渝ICP备15001194号-1|渝公网安备 50011602500124号 )

GMT+8, 2024-11-18 23:31 , Processed in 0.078776 second(s), 4 queries , Gzip On, Redis On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表