安全协议-第7章-上_第1页
安全协议-第7章-上_第2页
安全协议-第7章-上_第3页
安全协议-第7章-上_第4页
安全协议-第7章-上_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

安全协议分析与设计

第七章(上)卫剑钒实用安全协议设计KerberosX.509TLS(SSL)IKEPPP&RADIUSWEP&WPAGSM&3G2KerberosKerberos是一项认证服务,是MIT为Athena项目而开发的。它提供了一种验证用户身份的方法。它的实现不依赖于主机操作系统的认证,不基于主机的地址,也不需要有主机物理安全性的保证,并假设网络上传输的包都可以被任意地读取、修改和插入。Kerberos提供一个集中的认证服务器来实现服务器和客户之间的相互认证,即通过使用常规的密码算法,在上述条件下作为一个可信第三方进行认证服务。Kerberos假定了一个分布式的客户端/服务器结构,使用一个或多个Kerberos服务器来提供认证服务。3基本概念Kerberos的实现由客户(C)、服务器(V)、认证服务器(AS)以及票据提供服务器(TGS)组成。客户最终从服务器(本节中的服务器指的都是应用服务器)获得所需的服务,AS和TGS是Kerberos服务器的主要内容,AS提供对客户的认证,TGS颁发客户所需服务的一个服务许可证,也即服务票据,记作TicketV。值得注意的是,AS也颁发票据,名为TGS票据,记作Tickettgs,客户可以拿着这个Tickettgs向TGS索取TicketV。4认证过程客户登录工作站所位于的域(realm,每个组织或机构所拥有的网络范围)后,首先向AS认证自己(这个过程要求用户输入口令),AS会返回一个Tickettgs给客户,票据被AS和TGS共享的密钥加密,这个认证过程在整个登录期间(从登入到登出)只发生一次。客户需要服务时,向TGS发送这个TGS票据,以从TGS获得一个服务票据TicketV,这个过程在登录期间,根据所需服务种类的需要,每种服务会发生一次,如客户需要邮件服务,会向TGS要一张邮件服务票据;需要FTP服务时,会向TGS要一张FTP服务票据。5认证过程最后,客户向服务器发送票据TicketV,服务器查看票据,确认无误后,向客户提供服务。这个过程在登录期间会发生多次,每次提供服务前都要发生一次,如客户一天中多次检查收取邮件时,每次都会提供票据TicketV。整个过程中,除了登录时需要客户输入口令外,剩下的认证过程都不需要客户了解和参与。上述过程中省略了一个重要的内容,即认证符。它的作用是验证客户的身份,客户不仅要传输票据,还需要发送额外的信息来证明自己确实是票据的合法拥有者,这个信息就是认证符(authenticator),它使用会话密钥加密,并包含了用户名和时间戳。6过程的加密AS发给C票据的同时,还发送客户C和TGS之间的会话密钥Kc-tgs,这个会话密钥本身由客户口令衍生而得的密钥加密;C发给TGS的认证符则由Kc-tgs加密,TGS发给C票据的同时,还发送C和V之间的会话密钥KCV,这个会话密钥也由Kc-tgs加密,C发给V的认证符由KCV加密。7跨域操作Kerberos协议被设计为可用来跨组织边界进行操作。一个组织中(如一个部门或一个单位)的客户可以被授权获得另一个组织中服务器的服务。从网络角度讲,每一个运行Kerberos服务器的子网都是一个域。通过建立“域间密钥”,一个客户不仅可以从他本地域的TGS获得TicketV,还可获得一个远程域的Tickettgsrem。然后客户在需要使用远程域的服务时,将Tickettgsrem发送给远程域的TGS,远程的TGS使用域间密钥来解密Tickettgsrem,验证它是否是由客户所在域的TGS颁发的。如果验证通过,远程TGS颁发远程服务票据TicketVrem。域通常是分层组织的。每个域分别和它的每个子域共享不同的密钥,而和它的父域共享一个密钥。如果一个域间密钥不是被两个域直接共享,那么分层组织允许一个认证路径很简单地被建立起来。如果没有使用分层组织,就有必要考虑采用某种方式来在域间建立认证路径。8环境假设Kerberos所运行的环境是基于以下假设的。(1)Kerberos不能解决“拒绝服务”攻击。(2)Kerberos不能解决“口令猜测”攻击。(3)网络中的任何一台主机必须拥有一个和其他主机时间“松同步”的时钟,时钟同步协议本身必须是安全的。9报文交换Kerberos(v5)认证过程的报文交换有6条,分为3个阶段。10第1阶段第1阶段由Msg1和Msg2组成,是C和AS之间的交互。Msg1是客户请求报文,其中options包括一些与票据相关的细节信息,RealmC指明客户所属的域,Times用于客户请求票据中的时间设置,Nonce1是C提供的一个现时值。Msg2是AS返回的内容,主要包含了票据Tickettgs,Flags反映这张票据的一些属性,如该票据是否有效、是否可更新等,KC-tgs是客户与TGS之间的会话密钥。Times是Msg1中请求的时间,Kas-tgs是AS和TGS共享的密钥,TGS(严格地讲,应该是IDtgs)指明TGS的标识,表示这张票据是为该TGS生成的。KC是基于用户口令衍生的密钥(如口令的散列值),使得AS和客户能验证口令,并保护Msg2的内容。11第2阶段第2阶段由Msg3和Msg4组成,是C和TGS之间的交互。C发出Msg3,请求服务票据TicketV。Msg3中的Options指明了一些选项,V表明C希望访问的服务器,Nonce2是C产生的第2个Nonce,Tickettgs是C在Msg2中得到的票据,用来告知TGS这个客户已经经过AS的认证。AuthenticatorC-tgs是由C产生用来证明票据合法性的认证符,其中TS1表明了这个认证符发出的时间,KC-tgs是C和TGS之间的会话密钥,由AS创建,C由Msg2中获取该密钥。C和TGS无须共享一个永久密钥。Msg4是TGS返回给C的TicketV,其中KC-V是C和服务器V共享的会话密钥,Ktgs-V是TGS和服务器V共享的密钥,Nonce2是Msg3中携带的现时。12第3阶段第3阶段由Msg5和Msg6组成,是C和V之间的交互。Msg5是客户请求服务报文,它主要包括TicketV和认证符AuthenticatorC-V,TicketV是客户C用来访问服务器V的票据,C向V证明这个用户已经经过AS和TGS的认证,AuthenticatorC-V由C产生用来证明票据的合法性,其中的TS2表明这个认证符发出的时间。Subkey是C选择的一个加密密钥,用来保护一个特定的应用会话(如邮件内容的加密),如果这个字段被省略,则使用票据中的KC-V作为应用的加密密钥。Seq#是一个可选字段,用来通知此次会话中服务器向客户发送报文的起始序号,以达到防重放的效果。Msg6是服务器V的响应,它用客户C和服务器V之间共享的会话密钥KC-V加密了Msg5中携带的TS2、Subkey和Seq#。13Kerberos协议特点用户从登录到退出系统的全过程中,其间可能获取了多种服务,但只需输入一次口令,而且口令本身并不被传输,对口令的验证是看能否解开Msg2。另外,协议设计中使用了票据的概念,使得复用成为可能,减少了服务获取时所需的消息交互次数,提高了整体效率。协议在版本4中,加密方法采用的是DES的非标准模式PCBC,这种模式容易遭受攻击[Kohl89],版本5中使用标准的CBC模式。Kerberos使用集中式的AS和TGS进行管理,容易造成瓶颈效应;Kerberos全程采用对称加密算法来达到认证的目的,这也是它的一个显著特点。14X.509标准X.509是关于证书结构和认证协议的一个重要标准,是X.500系列中关于目录服务(Directoryservice)的一部分。目录服务的一个作用是提供公钥证书,每个证书包含用户的公开密钥和权威机构对其的签名。X.509标准的核心是公钥证书,证书由认证中心(CA)创建,并被存放在目录服务器中。X.509还提供了3个使用公钥证书的认证协议。15证书证书一般包括如下字段:版本(Version):区分证书的不同版本,默认是第1版;如果提供了颁发者唯一标识符或主体唯一标识符,那么版本必须是第2版;如果存在一个或多个扩展,那么版本必须是第3版。证书序列号(Certificateserialnumber):在发布证书中的一个有唯一性的整数值。签名算法标识符(Signaturealgorithmidentifier):用来签名证书的算法以及一些相关的参数。颁发者名字(Issuername):创建和签名这个证书的CA的X.500名字。有效期(Periodofvalidity):包含两个日期,由证书的生效时间和终止时间组成。主体名(Subjectname):公钥拥有者的用户名。16证书主体的公钥信息(Subject'spublic-keyinformation):主体的公钥以及这个密钥对应算法(即这个公钥会用在什么算法中)的标识符,以及算法的相关参数。签名(Signature):对所有字段(不含本字段)的散列码的签名,签名使用的是CA的私钥。颁发者的唯一标识符(Issueruniqueidentifier):可选,用来唯一标识CA,仅用于第2版和第3版。主体的唯一标识符(Subjectuniqueidentifier):可选,用于唯一标识主体,仅用于第2版和第3版。扩展(Extensions):包含一个或多个扩展字段的集合,仅用于第3版。17X.509认证协议X.509提供了3个认证协议,这些协议都使用公钥进行签名,消息的条数分别为1条、2条和3条,每个协议都是对前一个协议附加一条消息。对于第1个协议,协议的目标是由A传递给B一个会话密钥,后两个协议中,B也传递给A一个会话密钥。18X.509单消息认证协议报文中包括一个时间戳Ta、一个现时Na、用户数据Xa和Ya。时间戳由产生时间(可选)和过期时间组成,可用于防止报文的延迟传递。现时在报文的起止时间内是唯一的,这样,B可以存储这个现时直到它过期,并在这个时间内拒绝有相同现时的报文。该协议被[AN96]认为是违反了先签名后加密的原则,但事实上这很难说是一个攻击。如果要避免这种“攻击”,可以将{Ya}Kb改为{A,Ya}Kb。19X.509双消息认证协议双消息协议和单消息协议的区别在于发起方也可以认证响应方了,也即实现了双向身份认证。20X.509三消息认证协议比起双消息协议,新增了最后一条从A发往B的报文,主要是为了让B确认它发送的消息已经被A收到。

21协议特点在双消息和三消息协议中,同时使用时间戳和现时是一个冗余,事实上,时间戳和现时的目的都是为了保证新鲜性,同时使用没有必要,所以标准也指出,对于后两个协议,Tb可以设为零,Ta可以不加检验。在协议的第1版中(1988年版本),三消息认证协议的最后一条消息中,签名部分是{Nb}Ka−1而不是{Nb,B}Ka−1,这会导致一个攻击。攻击者C可以冒充A来欺骗B,C先发送给B一个旧的Msg1冒充A(标准允许不检查时间戳),然后只要能做出Msg3就可以了,Msg3中要求C能够做出{Nb}Ka−1。C此时立即开始一次和A的会话,新的会话中A是发起方,C在第2条消息中给出Nb,从而得到所期望的Msg3,完成攻击。22传输层安全协议SSL协议是由网景公司(Netscape)于1993年提出的,被设计成使用TCP来提供可靠的端到端安全服务。1994年网景公司推出了SSLv2.0,1996年推出了SSLv3.0。IETF于1999年1月推出传输层安全(TLS)协议,TLS作为一个Internet标准(RFC2246),是建立在SSLv3.0基础上的,所以TLS又被称为SSLv3.1。TLS协议位于应用层和传输层之间,主要目的是在两个通信应用之间保障数据的机密性和完整性。TLS协议本身可以被看成是一个两层协议,即TLS高层协议和TLS低层协议。23TLS协议的层次TLS高层协议包括握手协议、告警协议和修改密文规约协议。其中的握手协议允许服务器和客户进行相互认证,并且可以在应用层协议传输数据之前协商加密算法和密钥。TLS低层协议就是TLS记录协议,它完成的功能是:接收需要传输的上层协议消息、将消息分片、可选地压缩消息片、添加MAC、加密、添加记录首部,最终形成一个记录(record),然后将记录传输给TCP层。24TLS协议的层次结构TLS记录协议位于TCP之上,它为不同的上层协议提供安全连接,连接的保密性是通过加密来实现的,并且可以使得每个连接使用的加密密钥都不同。要做到这一点,需要通过位于TLS高层协议中的握手协议来完成。修改密文规约协议(changecipherspecprotocol)的作用是更改连接使用的密文规约(密码算法及密码参数)。协议由单个报文组成,报文为单个字节,用于握手协议结束后进行新密文规约的启用,当客户和服务器在协商好新的密文规约后,都发送这条报文,以通知对方采用新协商好的密文规约(如加密算法、MAC算法、加密参数等)。25TLS协议的层次结构每个连接正在使用的密文规约称为当前状态,刚协商好的密文规约称为准备状态(pendingstate)。收到修改密文规约报文后,接收方立即将准备状态(也就是刚协商好的密文规约)复制到当前状态,连接开始使用新的密文规约。同样地,发送方在发出这个报文之后,也立即将准备状态复制给当前状态。告警协议包括若干个告警报文,告警报文的作用是当握手出错时、加密出错时或发生异常情况时,向对方发出警告或终止当前连接。和其他报文一样,告警报文也采用当前状态中的算法和参数进行加密及压缩。26会话和连接TLS有两个重要概念,分别是TLS会话和TLS连接。它们是通过握手协议建立起来的,建立好TLS连接以后,才可能在这个连接上传输应用层数据。TLS会话包括以下参数。●会话标识符:一个字节序列,用来标识一个活动的会话。●对方的证书:对方的X.509第3版证书,可以为空。●压缩方法:在加密前用来压缩数据的算法。●密文规约:对称加密算法(如DES或者空加密等)、MAC算法(如MD5或SHA),以及其他一些密码参数。●主秘密:客户和服务器之间共享的秘密(master_secret),48字节长。●是否可复用(isresumable):用来指示该会话是否可被用来初始化一个新的连接。27会话和连接“是否可复用”参数表明一个会话是否可以初始化新的连接,即多个连接可以共享一个会话的参数,每个连接都是一个会话的实例。这样做的目的是节省资源,避免为每个连接协商全部的安全参数,因为协商需要大量的密码运算和消息交互,代价往往是昂贵的。TLS连接的参数除了会话参数外,还包括服务器和客户端各自的随机数,服务器和客户端各自的MAC密钥(该密钥用于生成MAC),各自的加密密钥(也称各自的写密钥,指服务器的加密密钥和客户端的加密密钥,等同于客户的解密密钥和服务器的解密密钥),CBC模式加密时所使用的初始化向量、报文序号等。28握手协议29交互过程客户发出Msg1,包含了一个随机数、一个会话ID(零值表示客户希望开始一个新的会话,非零值表示客户希望重用一个会话)、一个密码算法列表(列表中的每一项都说明了客户所支持的密钥交换方法、密码算法和Hash算法,这些项按照客户所希望的优先级排序)、一个压缩算法列表(也是按照客户希望的优先级排序,算法中可以包含一个NULL算法,表明不压缩)。服务器收到Msg1后,回复Msg2,其中包含服务器产生随机数;如果会话ID非零,会在自己的会话缓冲里寻找这个会话,如果找到,就回这个ID,表示可以重用这个会话,如果找不到,则回一个零值表明无法重用;如果客户给的会话ID为零,服务器会产生一个新值用来标识这个新的会话。然后服务器按照客户端的优先级选择自己支持的密码算法和压缩算法,如果是重用会话,则使用那个会话的密码算法和压缩算法作为回应。30交互过程只要密钥交换算法不是匿名DH交换,Msg3(certificate报文)就需要被发出,通常是一个X.509证书,含有一个用于密钥交换的密钥,如RSA公钥或固定DH交换需要的公开参数。如果没有发出Msg3或者Msg3提供的密钥信息不够,就需要发出Msg4(server_key_exchange报文),主要是临时DH交换或匿名DH交换的公开参数,或者是未能在证书中提供的RSA公钥。如果需要认证客户,Msg5(certificate_request报文)需要被发出,以使得服务器获得客户的证书,然后Msg6(server_hello_done报文)表明服务器发送的相关参数结束,该报文本身不带任何参数。31交互过程如果服务器已经发出过Msg5,那么客户端就必须响应一个certificate报文,即Msg7,如果客户没有证书可用,就会发出一个no_alert告警报文(这属于TLS告警协议)。客户接着发送Msg8(client_key_exchange报文),这个报文的内容依赖于在client_hello和server_hello之间选择出来的密钥交换类型。如果是RSA方法,客户生成48字节的预先主秘密(pre_master_secret),并使用Msg3或者Msg4提供的RSA密钥对其进行加密作为报文内容。如果是临时DH或匿名DH交换,则发送客户的DH公开参数,如果是固定DH交换,由于该参数已经在Msg7中发送了,此时报文内容为空。服务器收到Msg8以后,就有能力算出主秘密(master_secret)了,当然客户端也可以算出相同的这个主秘密。其他密文参数也可依次由主秘密算出,32主秘密的生成方法主秘密的生成方法:master_secret=PRF(pre_master_secret, "mastersecret",ClientHello.random+

ServerHello.random)[0..47];PRF是伪随机函数,有3个输入参数,用法为PRF(secret,label,seed),可以通过迭代的方法产生任意长度的随机数,这里,只需要产生出48字节就足够了,故用[0..47]表示PRF产生的序列的前48字节。secret参数是双方交换而得的预先主秘密pre_master_secret;label在这里是“mastersecret”,是一个字符串,13个字节;ClientHello.random是Msg1中客户给出的随机数;ServerHello.random是Msg2中服务器给出的随机数;它们的连接作为第3个参数。33生成其他秘密材料使用主秘密可以进一步生成其他材料,首先生成key_block:

key_block=PRF(master_secret,"keyexpansion",ClientHello.random+ServerHello.random);然后将key_block划分为所需的各密码参数,依次为:客户写MAC秘密(client_write_MAC_secret)服务器写MAC秘密(server_write_MAC_secret)客户写密钥(client_write_key)服务器写密钥(server_write_key)客户写初始化向量(client_write_IV)服务器写初始化向量(server_write_IV)。34交互过程如果客户端已经在Msg7中发送了具有签名能力的证书,那么Msg9(certificate_verify报文)将被发出,这个报文中,客户对前面已经交换了的报文的散列进行了签名。客户此时发送Msg10(change_cipher_spec报文),并立刻将连接的准备状态复制到当前状态,在发送Msg11(client_finished报文)时,就已经使用新的密文规约加密了。收到Msg10和Msg11后,服务器发出Msg12(change_cipher_spec报文),改变自己的密文规约状态,然后使用新的密文规约发送Msg13(server_finished报文)作为结束报文。35结束报文结束报文长度为12个字节,计算方法如下:PRF(master_secret,finished_label,MD5(handshake_messages)+SHA-1(handshake_messages))[0..11];其中,finished_label对客户和服务器是不同的,对于Msg11为“clientfinished”,对于Msg13为“serverfinished”。handshake_messages是到目前为止,所有已经交换了的报文(不包括当前这个正在生成的finished报文)。36会话重用当客户希望重用一个已存在的会话,而不想重新协商新的密文规约时,在Msg1中包含有一个非零的会话ID,服务器如果能在会话缓冲中找到这个ID,并且愿意使用这个旧的会话参数时,就会在Msg2中告诉客户可以重用该会话。此时,从Msg3到Msg9都不会产生,双方的交互只有Msg1、Msg2、Msg10、Msg11、Msg12和Msg13。由于重用的只是会话参数,连接的参数需要重新被计算,这将使用旧的pre_master_secret和新的ClientHello.random、ServerHello.random生成新的master_secret和新的密钥材料。37协议特点TLS协议拥有3种认证模式,分别是客户端和服务器互相认证;只认证服务器,不认证客户端;客户端和服务器均不认证,即完全匿名模式。在应用时,要注意谨慎使用完全匿名模式,这种模式使用不带认证的DH交换算法,对中间人攻击没有防范能力。该协议以及SSL协议被很多人分析过,如文献[Paul99a]、[Paul99b]、[WS96]、[MS98]等,均未发现严重的安全问题(在完善加密假设的前提下)。38谨慎的设计者协议的设计者很谨慎,在certificate_verify报文、client_finished报文、server_finished报文中,都使用了已交换报文的散列,以防止攻击者对消息的扰乱;在散列算法的使用上也很谨慎,MD5和SHA算法常常被同时使用,以防范单个散列算法被攻破后造成的风险;协议还规定必须先使用pre_master_secret生成master_secret,然后再通过master_secret生成其他密文素材,这是因为在使用固定DH交换时,pre_master_secret总是相同。39Internet密钥交换协议InternetKeyExchange(IKE)协议[RFC2409]是IETF(InternetEngineeringTaskForce)制定的密钥交换协议标准,用来在通信双方之间建立安全关联(SA)以及经过认证的密钥材料。它建立在ISAKMP(InternetSecurityAssociationandKeyManagementProtocol)定义的通用密钥交换框架之上[RFC2408]。在介绍IKE之前,有必要先了解一下IPSec(IPSecurity,IP层安全)。40IPSecTLS可以对应用层的协议加密,并传递给传输层,但在IP层并不做任何安全性处理。IP作为其他高层协议的载体,本身并未考虑安全性问题。IPSec的推出就是用来在IP层进行安全处理,对于高层数据,只要是通过IP传输,都会在IP层进行安全防护,实现IP数据包的机密性、完整性等安全特性,为上层协议提供“透明”的安全服务。41IPSecIPsec是怎么实现对IP层的安全防护呢?主要是通过对IP包的加密和添加MAC完成的。为了不影响IP包的传输,安全处理后的IP包仍然是一个IP包的形式,这就要求不改变IP包的结构,而是通过在原始IP数据包做数据处理并插入数据头来完成。IPSec有两种数据头,一种是ESP头(可实现机密性和完整性保护),另一种是AH头(可实现完整性保护)。可根据需要,使用其中的一种头或者两种都使用。IPSec有两种协议模式,一种是传输(transport)模式,另一种是隧道(tunnel)模式。传输模式是在IP头和IP数据部分之间插入IPSec头,并对IP包进行处理,IP头部不进行加密。隧道模式则保护整个IP包,在原IP包外部添加IPSec头,对整个原IP包进行处理,然后产生一个新的IP头来封装IPSec头及处理过的原IP包。42SA及IKEIPSec中一个重要概念是安全关联(SecurityAssociation,SA),这是指两个实体间维护的一些安全参数,它经过协议(如IKE协议)的协商或配置,存放在每个IPSec的实体里。每当一个实体需要和另一个实体使用IPSec处理数据时,会查找相应的SA,然后用这个SA里规定的安全参数对实体间的IP数据进行安全处理。IPSecSA的产生有赖于IKE协议(可以把IKE可看做IPSec实现的一部分)的运行。IKE是在ISAKMP框架下实现的,ISAKMP为Internet通信双方的SA建立和密钥交换提供了通用的框架,但它并不是一个具体的密钥交换技术,而只是作为框架来支持各种密钥交换协议(如IKE)。IKE标准在RFC2409里被详细地描述。43IKE包括两个阶段IKE协议分为两个阶段。第1阶段,通信双方经过协商,生成ISAKMPSA;ISAKMPSA主要包括加密算法、散列算法、认证方法、DH交换的组信息、SA生命周期等;第2阶段,在ISAKMPSA的保护下为安全服务(如IPSec)协商用于该安全服务的SA(如IPSecSA)。而IPSecSA的内容主要包括验证算法、加密算法、生存期、序列号、协议模式(如传输模式或隧道模式)等实施AH和ESP处理所需的信息。44第1阶段的模式IKE第1阶段有主模式(mainmode)和积极模式(aggressivemode)两种工作模式。主模式对应于ISAKMP框架的身份保护交换模式,双方共交换6条消息:头两条消息协商策略,中间两条消息交换Diffie-Hellman(DH)的公开值和必要的辅助数据(如Nonce),最后两条消息认证Diffie-Hellman交换。积极模式对应于ISKAMP框架的积极模式,这种模式速度较快,但通常不能提供身份保护功能,积极模式下双方交换3条消息,前两条消息里完成协商和DH交换,第3条消息完成交换数据的认证。主模式和积极模式均可使用4种认证方式:预共享密钥方式、数字签名方式、标准公钥加密方式和修订的公钥加密方式(后两者统称公钥加密方式)。45其他模式第2阶段的消息在第1阶段产生的SA的保护下,为IPsec协议或者其他需要安全参数的应用层协议协商SA。第2阶段只有一种模式,称为快速模式(quickmode)。IKE除了上面3种模式外,还有一种新组模式(newgroupmode),新组模式既不在阶段1也不在阶段2,而位于阶段1之后,用来建立一个可供将来DH协商使用的新组。46使用数字签名认证的IKE第一阶段I表示发起方,R

表示响应方。每条消息都是一个ISAKMP消息包,ISAKMP消息可以经由TCP或者UDP传输,端口号为500。消息由报头(header)和载荷(payload)构成。HDR表示ISAKMP报头,HDR*表示消息中ISAKMP报头后的部分是加密的。47ISAKMP报头报头的前两个域是cookie,分别由发起方和响应方在Msg1和Msg2中生成,长度均为8字节,一旦确定,在交换中,双方检查消息报头中cookie域的值是否发生改变,如果被改变,则抛弃掉该消息,这可以用来防范DoS攻击。在第2阶段交换中,cookie域的值则标识了用于保护消息的ISAKMPSA。48ISAKMP报头“下一个载荷”域指明了消息中下一个载荷的类型,如SA载荷的类型为1,密钥交换载荷的类型为4,身份载荷的类型为5,签名载荷的类型为9等等,每个载荷有一个载荷头,载荷头中又指示了下一个载荷的类型,没有下一个载荷则该域填0。“主版本号”和“次版本号”分别表示了所使用的ISAKMP的版本号。“交换类型”表明了交换的模式,如主模式或积极模式等等。“消息ID”用于第2阶段,由发起者产生,用于标识不同的会话。因为这些会话可能是在同一个ISAKMPSA的保护下运行的(该ISAKMPSA由报头中的cookie域标识)。“长度”域标明了整个消息的长度,它包括头部和所有载荷的长度。49Msg1和Msg2在Msg1和Msg2中,SAi

和SAr

分别表示I和R发送的安全关联(SA)载荷;其中SAi中可能有多个SA建议,这通过多个变换载荷来做到,这些变换载荷被封装在一个提议载荷中,而提议载荷又被封装在一个SA载荷中。响应者挑选并返回其中的一个建议(封装在Msg2中的SA载荷里),响应者不能修改建议中的属性,如果发起者发现属性值被修改了,或者有属性在建议中被增加或删除了,则Msg2将被废弃。第1阶段的交换不允许在一个SA载荷内封装多个提议载荷,也禁止多个SA载荷出现。第2阶段无此限制。此外,除非有特殊说明,在任何消息中的ISAKMP载荷都没有必要排成一个特定的顺序。当不能接受建议、签名验证失败或解密失败时,可以发送通知(Notify)载荷。50Msg3和Msg4在Msg3和Msg4中,Ni和Nr

分别表示I和R发送的现时(Nonce)载荷;

KEi和KEr分别表示I和R发送的密钥交换(KE)载荷,其中分别含有Diffie-Hellman公开参数g^xi

和g^xr。双方完成Diffie-Hellman交换后,根据不同的认证方式可以计算出用于衍生其他密钥材料的SKEYID,对于数字签名认证方式,SKEYID的计算方法如下:SKEYID=prf(Ni|Nr,g^xixr)^表示幂运算,得到SKEYID后,继而根据下页的算法产生3个密钥材料。513个密钥材料|表示连接运算,prf(key,msg)表示双方协商的以key和msg为参数的prf函数,如果未协商prf,则用协商的散列算法的HMAC运算作为prf;SKEYID_d用来衍生其他密钥材料,SKEYID_a用于生成认证密钥,SKEYID_e用于生成加密密钥。其中的0、1、2为单个字节的数值,CKYi和CKYr分别表示由I和R产生的包含在HDR中的Cookie。52Msg5和Msg6在Msg5和Msg6中,IDi

和IDr

分别表示I和R发送的身份(ID)载荷,CERTi和CERTr分别表示I和R的证书载荷,[]表明其中的内容可选。HASHi=prf(SKEYID,g^xi|g^xr|CKYi|CKYr|SAi|IDi)HASHr=prf(SKEYID,g^xr|g^xi|CKYr|CKYi

|SAi

|IDr)SIGi=SigSKi(HASHi)SIGr=SigSKr(HASHr)Sig

key(msg)表示用私钥key对msg的签名运算,S

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论