mschapv2在radius中的认证实现

作者: 飘人 | 来源:发表于2016-07-02 21:25 被阅读644次

    在Radius的认证请求AccessRequest包中如果包含 MS-CHAP2-Response 和 MS-CHAP-Challenge 属性则意味着需要实现ms-chap-v2认证。

    客户端 MS-CHAP2-Response 和 MS-CHAP-Challenge 生成的规则


    MS-CHAP-Challenge

    MS-CHAP-Challenge (AuthChallenge) 是客户端生成的随机16字节。

    MS-CHAP2-Response

    随机生成16字节属性 PeerChallenge,连同AuthChallenge,UserName,Password作为输入参数,调用方法 GenerateNTResponse 得到 NtResponse.

    GenerateNTResponse(AuthChallenge, PeerChallenge, UserName, Password) 
    

    GenerateNTResponse 方法的实现参考 http://tools.ietf.org/html/rfc2759.html#section-8.1

    封装50字节的 MS-CHAP2-Response 属性:

    [0 : 2]           Flags  \x00\x00
    [2 : 18]          PeerChallenge 
    [18 : 26]         Reserved \x00\x00\x00\x00\x00\x00\x00\x00
    [26 : 50]         NtResponse
    

    服务端认证规则


    校验 MS-CHAP2-Response 长度,长度不等于50应该丢弃,并发送拒绝认证。

    从 MS-CHAP2-Response 提取 PeerChallenge,NtResponse

    NtResponse = MS-CHAP2-Response[26 : 50]
    PeerChallenge = MS-CHAP2-Response[2 : 18]
    

    调用 GenerateNTResponse 方法得到 MyNtResponse

    GenerateNTResponse(AuthChallenge, PeerChallenge, UserName, Password)  
    

    比较 MyNtResponse 与 NtResponse,不相等则验证失败。

    Radius 认证响应


    调用 GenerateAuthenticatorResponse 方法得到 AuthenticatorResponse

    GenerateAuthenticatorResponse(
        Password,
        NtResponse,
        PeerChallenge, 
        AuthChallenge
        UserName
    ) 
    

    GenerateAuthenticatorResponse 方法的实现参考 http://tools.ietf.org/html/rfc2759.html#section-8.7

    设置Radius响应消息属性 MS-CHAP2-Success = AuthenticatorResponse

    相关文章

      网友评论

      • AngusLuo:看了您的文章,我总结了一下,您看看是不是这么一个过程:从radius请求认证包中MS-CHAP2_Response域截取第2-18字节做AuthChallenge,截取第26-50字节做PeerChallenge;然后依次调用sha1函数对PeerChallenge,AuthChallenge,UserName这三个值哈希,得到8字节的哈希值;调用md4函数对明文密码哈希得到16字节的哈希密码;然后填充md4哈希密码长度到21字节,然后调用desencrypt函数加密sha1生成的8字节哈希值和md4加密后填充的21字节哈希值,结果为24字节,然后与PeerChallenge对比。是这么一个过程吗?

      本文标题:mschapv2在radius中的认证实现

      本文链接:https://www.haomeiwen.com/subject/jciqjttx.html