EAP-MSCHAPv2

近期中移需要EAP-SIM/AKA, EAP-MSCHAPv2, EAP-PEAP等,编写产品需求中,多看点协议。

学习EAP-MSCHAPv2协议,下面是自己的理解及部分段落的翻译,

看的是,
Microsoft EAP CHAP Extensions      draft-kamath-pppext-eap-mschapv2-02.txt  2007

也不知是不是最新的

 


EAP-MSCHAPv2 是在EAP协议框架内封装了mschapv2协议,支持双向认真及密钥生成。密钥生成使用MPPE,参见RFC3079(Deriving Keys for use with Microsoft Point-to-Point Encryption (MPPE))。器双向认证则通过peer的response报文中捎带一个challenge,server则在一个success报文中对此响应。

EAP-MSCHAPv2报文格式如下

 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             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |   OpCode      |  MS-CHAPv2-ID |  MS-Length...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   MS-Length   |     Data...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Code,Identifier,Length,Type四字段共5个字节同一般的EAP报文含义,其中EAP MS-CHAP-V2的Type值为26


OpCode字段占一个字节,表示eapmschapv2消息类型,含义为
   1       Challenge
   2       Response
   3       Success
   4       Failure
   7       Change-Password

MS-CHAPv2-ID字段占一个字节,用于匹配mschapv2的请求与响应,一般该字段与Identifier字段值相同。

MS-Length字段占两个字节,必须设置为Length字段减去5.
Data该部分根据OpCode相应设置。

Challenge报文

 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             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |   OpCode      |  MS-CHAPv2-ID |  MS-Length...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   MS-Length   |  Value-Size   |  Challenge...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                             Challenge...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                             Name...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+



Value-Size 一个字节,随后challenge字段的长度,eapmschapv2采用16字节的challenge,因而此字段设置为0x10

Challenge  16个字节的挑战字,没什么可说的
Name        发送此报文的系统id,长度等于
Length - length of (eapheader type opcode mschapid mslength, valuesize,challenge )=Length - 10 - ChallengeSize = Length - 10 - ValueSize


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             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |   OpCode      |  MS-CHAPv2-ID |  MS-Length...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   MS-Length   |  Value-Size   |    Response...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                             Response...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                             Name...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
只说下Response。
Response长度为49字节,依次为
 16 octets: Peer-Challenge   终端产生的16字节随机数
 8 octets: Reserved, must be zero
 24 octets: NT-Response    用server发来的challenge和MS自己的PeerChallenge利用GenerateNTResponse生成NT-Response
 1 octet : Flags    保留,必须为0
Name为0-256长度的大小写敏感的字符,当然一般不会到256长度的。
server用同样的函数计算NT-Response如果匹配,则发送SuccessRequest(OpType=3),否则发送FailureRequest(OpType=4)。


SuccessRequest报文
报文格式
 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             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |   OpCode      |  MS-CHAPv2-ID |  MS-Length...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   MS-Length   |                    Message...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Message包括42字节的鉴权服务器响应以及一个可见字符串消息
"S=<auth_string> M=<message>"
其中auth_string是20个oct编码成德ascii字符,A-F必须用大写。
此值根据challenge, peerchallenge,NT-Response以及MS的密码经由GenerateAuthenticatorResponse计算得到,如果peer收到server的SuccessRequestPacket必须校验此值,如果此段缺失或错误则peer直接结束此次会话,不用任何响应。
message为可读有意义字符串。
我的一次实验得到的数据位
0000  01 02 00 38 1a 03 01 00  33 53 3d 31 45 31 39 32   ...8.... 3S=1E192
0010  36 32 33 36 41 37 39 37  38 39 39 43 45 42 34 42   6236A797 899CEB4B
0020  45 30 43 36 37 37 39 32  46 39 41 38 39 32 31 36   E0C67792 F9A89216
0030  35 36 39 20 4d 3d 4f 4b                            569 M=OK 


SuccessResponse报文
 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             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |   OpCode      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
OpCode=3 Success
无他


FailureRequest
 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             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |   OpCode      |  MS-CHAPv2-ID |  MS-Length...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   MS-Length   |                    Message...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Message格式如下
"E=eeeeeeeeee R=r C=cccccccccccccccccccccccccccccccc V=vvvvvvvvvv M=<msg>"
其中"eeeeeeeeee"是10进制错误码的ascii表示。错误码如下

        646 ERROR_RESTRICTED_LOGON_HOURS
        647 ERROR_ACCT_DISABLED
        648 ERROR_PASSWD_EXPIRED
        649 ERROR_NO_DIALIN_PERMISSION
        691 ERROR_AUTHENTICATION_FAILURE
        709 ERROR_CHANGING_PASSWORD
r单个字符,1表示可以重试,0则不可。上述646 647 649一般为不可重试。
cccccccccccccccccccccccccccccccc 是16进制challenge的ascii表示,必须为32字符,且必须存在。
"vvvvvvvvvv" 指示服务器支持的passwordchanging协议的版本号,对mschapv2 此值为3
msg为可读有意义字符串。


Failure Response报文
如果FailureRequest中R=1,则peer可以重试鉴权过程,如重发Response报文或ChangePwd报文。
如果为R=0则OpCode=4的FailureResponse报文。
格式如下
 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             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |   OpCode      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
OpCode=4


ChangePassword报文
该报文仅可在鉴权者的FailureRequest报文中指示错误原因为ERROR_PASSWD_EXPIRED (E=648)时发送。
报文格式为
 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             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Type      |   OpCode      |  MS-CHAPv2-ID |  MS-Length...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   MS-Length   |                    Data...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Data长度为582字节,
        516 octets : Encrypted-Password
         16 octets : Encrypted-Hash
         16 octets : Peer-Challenge
          8 octets : Reserved
         24 octets : NT-Response
          2-octet  : Flags

你可能感兴趣的:(String,server,服务器,Microsoft,Authentication,encryption)