1.6 密码协议
保障信息的安全不能单纯依靠安全的密码算法,还需要通过安全的密码协议在实体之间安全地分配密钥或其他秘密信息,以及进行实体之间的鉴别等。密码协议是指两个或两个以上参与者使用密码算法时,为达到加密保护或安全认证目的而约定的交互规则。
本节首先介绍密钥交换协议,然后结合国家标准GB/T 15843介绍实体鉴别协议,最后,介绍两个较为综合的密码协议实例——IPSec和SSL协议。
1.6.1 密钥交换协议
在使用对称密码进行保密通信之前,必须向通信双方分发密钥使得双方共享密钥。然而在公钥密码出现之前通信双方建立共享密钥是一个困难问题。相对于对称密码,公钥密码的一个优点就是可以在不安全的信道上进行密钥交换。密钥交换协议旨在让两方或者多方在不安全的信道上协商会话密钥,从而建立安全的通信信道。
1.Diffie-Hellman密钥交换协议
1976年Diffie和Hellman提出公钥密码学概念,并提出了著名的Diffie-Hellman密钥交换协议。经典的Diffie-Hellman密钥交换协议运算在有限循环群上。该协议在初始化阶段选择大素数p,令g为模p乘法群的生成元,并公开参数p和g。用户A和用户B之间的Diffie-Hellman密钥交换协议如图1-21所示。
图1-21 经典Diffie-Hellman密钥交换协议
①用户A随机选择,计算X=gxmod p,并将X发送给用户B;
②用户B随机选择,计算Y=gymod p,并将Y发送给用户A;
③用户A计算k=Yxmod p为会话密钥;
④用户B计算k=Xymod p为会话密钥。
然而,Diffie-Hellman密钥交换协议只能提供建立会话密钥的功能,并不能抵抗中间人攻击,同时也不能提供相互鉴别的安全保障。在具有鉴别功能的密钥交换协议中,Menezes等人在1995年给出的MQV方案最具代表性。
2.MQV密钥交换协议
在经典Diffie-Hellman密钥交换协议的基础上,MQV密钥交换协议在协议交互过程中用到了双方公钥信息,只有拥有相应私钥的用户才能计算出与对方相同的会话密钥,从而达到隐式鉴别的效果。基于效率方面的考虑,MQV选择了椭圆曲线加法群作为基本的计算群。令点G为加法群的生成元,点G的阶为n。用户A的公钥为点PA=dAG,私钥为dA;用户B的公钥为点PB=dBG,私钥为dB。每一个用户选择随机数,计算并发送临时的消息给对方(具体地,用户A选择随机数rA计算rAG发送给对方,用户B选择随机数rB计算rBG发送给对方)。协议的双方在验证公钥合法性(点rAG、rBG是否在椭圆曲线上)的前提下通过计算PA、PB、rAG、rBG的组合得到会话密钥。
令w为大于或等于(log2n+1)/2的最小整数,h为余因子(在标准中一般为1)。MQV密钥交换协议的详细过程如下所示:
①用户A选择,计算RA=rAG=(x1,y1),并将RA发送给用户B;同时计算hx=x1mod 2w+2w,以及tA=hxdA+rAmod n。
②用户B选择,计算RB=rBG=(x2,y2),并将RB发送给用户A;同时计算hy=x2mod 2w+2w,以及tB=hydB+rBmod n。
③用户A接收到RB后验证其是否在椭圆曲线上(验证临时消息的合法性);计算hy=x2mod 2w+2w。
④用户B接收到RA后验证其是否在椭圆曲线上(验证临时消息的合法性);计算hx=x1mod 2w+2w。
⑤用户A计算k=htA(RB+hyPB)为共享密钥。
⑥用户B计算k=htB(RA+hxPA)为共享密钥。
容易验证,合法的用户A和用户B最终计算出共同的会话密钥k。
3.SM2密钥交换协议
SM2密钥交换协议为MQV的一个变种,同样具有鉴别通信双方身份真实性的功能。该协议可满足通信双方经过两次(或供选择的三次)信息传递过程,计算并获取一个由双方共同决定的会话密钥。SM2密钥交换协议的具体交互流程已在本书1.4.2节中介绍。
1.6.2 实体鉴别协议
实体鉴别机制用于证实某个实体就是他所声称的实体,待鉴别的实体通过表明它确实知道某个秘密来证明其身份。我国国家标准GB/T 15843规定了进行实体鉴别的机制,这些机制定义了实体间的信息交换,以及需要与可信第三方的信息交换。GB/T 15843系列标准已经发布了六个部分,分别为:
• GB/T 15843.1-2017《信息技术安全技术实体鉴别第1部分:总则》;
• GB/T 15843.2-2017《信息技术 安全技术 实体鉴别 第2部分:采用对称加密算法的机制》;
• GB/T 15843.3-2016《信息技术 安全技术 实体鉴别 第3部分:采用数字签名技术的机制》;
• GB/T 15843.4-2008《信息技术 安全技术 实体鉴别 第4部分:采用密码校验函数的机制》;
• GB/T 15843.5-2005《信息技术 安全技术 实体鉴别 第5部分:使用零知识技术的机制》;
• GB/T 15843.6-2018《信息技术 安全技术 实体鉴别 第6部分:采用人工数据传递的机制》。
实体鉴别应用机制包括单向鉴别和相互鉴别两种。单向鉴别是指使用该机制时两实体中只有一方被鉴别,相互鉴别是指两个通信实体运用相应鉴别机制对彼此进行鉴别。其中单向鉴别按照消息传递的次数,又分为一次传递鉴别和两次传递鉴别;相互鉴别根据消息传递的次数,分为两次传递鉴别、三次传递鉴别或更多次传递鉴别。如果采用时间值或序号,则单向鉴别只需一次传递,而相互鉴别则需两次传递;如果采用使用随机数的“挑战—响应”方法,单向鉴别需两次传递,相互鉴别则需三次或四次传递(依赖于所采用的机制)。本小节主要对GB/T 15843规定的采用对称加密算法、采用数字签名技术和采用密码校验函数的无可信第三方单向鉴别机制进行介绍,关于其他鉴别机制可参阅该标准。
1.一次传递鉴别
一次传递鉴别只需要进行一次消息传递过程。一次传递的单向鉴别机制如图1-22所示,身份声称者A向验证者B发送能证明自己身份的TokenAB,由B来进行鉴别。为了防止重放攻击,一次传递鉴别的Token中应当包含时间值TA或序列号NA。
图1-22 一次传递的单向鉴别机制
1)采用对称加密算法
在采用对称加密算法的实体鉴别机制中,声称者A通过表明他知道某秘密鉴别密钥来证实其身份。鉴别时,A使用秘密密钥KAB加密特定数据,与A共享该密钥的验证者B将加密后的数据解密,从而验证A的身份。
声称者A发送的Token的形式为:,其中eK(M)表示使用密钥K对消息M进行加密。Token是否包含可区分标识符B是可选的,Token中的Text1内容可以与Text2相同,也可以是A、B预共享的,如预留信息。验证时,B将加密部分解密并检验可区分标识符B(如果有)以及时间值或序号的正确性。
2)采用密码校验函数
HMAC等MAC产生机制是常用的密码校验函数,具体构造方法可参考GB/T 15852系列标准。鉴别时,A使用秘密密钥KAB和密码校验函数对指定数据计算密码校验值,与A共享该密钥的验证者B重新计算密码校验值并与所收到的值进行比较,从而验证A的身份。
声称者A发送的Token的形式为:,其中函数fK(M)表示使用密钥K计算消息M的密码校验值。验证时,B根据时间值或序号,重新计算校验值,并与Token中的密码校验值进行比较。
3)采用数字签名技术
在采用数字签名技术的实体鉴别机制中,声称者A通过表明它拥有某个私有签名密钥来证明其身份。鉴别时,A使用其私钥dA对特定数据进行签名,任何实体都可以使用A的公钥进行验证。
声称者A发送的Token的形式为:,其中函数Sd(M)表示使用私钥d对消息M进行签名。作为可选项,A还可以将自己的公钥证书与Token一同发送给B。验证时,B根据时间值或序号,利用A的公钥对签名结果进行验证。
2.两次传递鉴别
为了防止重放攻击,一次传递鉴别需要双方保持时间同步,或者鉴别方验证序列号没有重复,这在一些情况下可能是难以实现的。采用“挑战—响应”机制可以有效克服这种困难,即如图1-23所示的两次传递单向鉴别机制。鉴别时,由B发起鉴别过程,将随机数RB作为挑战发送给A(并可选的发送一个文本字段Text1),A通过对称加密、计算密码校验值或者私钥签名的方法计算Token,并发送给B作为自己身份的证明,B通过对称解密、重新计算密码校验值或者签名验证的方法验证Token的有效性,从而对A的身份进行鉴别。Token的计算和验证的具体过程与一次传递过程类似,主要变化是将一次传递过程中用于防重放攻击的因子TA或NA换为RB,在此不再赘述。
图1-23 两次传递单向鉴别机制
1.6.3 综合密码协议举例
IPSec协议和SSL协议是两个较为综合的密码协议,支持采用多种密码技术为通信交互中的数据提供全面安全保护,包括数据保密性、完整性校验、数据源身份鉴别和抗重放攻击等。不同的是,IPSec工作在网络层,而SSL工作在应用层和传输层之间。IPSec一般用于两个子网之间的通信,称为站到站的通信;SSL一般用于终端到子网之间的通信,称为端到站的通信。
1.IPSec
IPSec协议是国际组织IETF以RFC(Request For Comments)形式公布的一组IP密码协议集,其基本思想是将基于密码技术的安全机制引入IP协议中,实现网络层的通信安全。IPSec最初是针对IPv6网络环境开发的,却首先在IPv4网络中广泛部署。考虑到当前网络设备对IPSec协议实现的兼容性,目前IPSec在IPv4和IPv6是一项建议的可选服务。
IETF于1994年成立IPSec工作组专门制定和推动IPSec协议标准。1995年8月,IETF首次公布关于IPSec的RFC建议标准;而后在1998年发布更新后的标准,并新增了一个用于相互身份鉴别的机制和互联网密钥交换(Internet Key Exchange,IKE)协议。2005年12月,RFC 4301、RFC 4309等作为IPSec的新标准发布,其中,RFC 4301规定了IPSec的标准架构,RFC 4309提出了IKE的第二版标准IKEv2。当前,IETF仍在持续开展对IPSec规范文档的制定和修订工作。我国于2014年发布了密码行业标准GM/T 0022-2014《IPSec VPN技术规范》,其对IPSec协议技术进行了规范。该标准主要参考了RFC 4301等文档,并增加了对商用密码算法和双证书(签名证书和加密证书)的支持等内容。
IPSec协议实际上是一套协议集合,而不是一个单独的协议。它为网络层上的通信数据提供一整套的安全体系结构,包括IKE协议、认证头(Authentication Header,AH)协议、封装安全载荷(Encapsulating Security Payload,ESP)协议和用于网络身份鉴别及加密的一些算法等。从工作流程上看,IPSec协议可分为两个环节:IKE是第一个环节,完成通信双方的身份鉴别、确定通信时使用的IPSec安全策略和密钥;第二个环节是使用数据报文封装协议和IKE中协定的IPSec安全策略和密钥,实现对通信数据的安全传输。
AH和ESP协议可以工作在传输模式或隧道模式下。传输模式一般用于端到端的应用场景,只有IP载荷部分被保护,对IP头不做改动;隧道模式对整个IP数据报文提供加密和认证功能,并在此基础上添加新的IP头,一般用于创建虚拟专用网(Virtual Private Networks,VPN)隧道链路。
下面简要对IPSec中IKE、AH和ESP三个安全机制进行介绍,这部分内容主要参考GM/T 0022-2014对IPSec协议实现的描述。
1)IKE协议
IKE协议用于鉴别通信双方身份、创建安全联盟(Security Association,SA)、协商加密算法以及生成共享会话密钥等,其中ISAKMP是IKE的核心协议,定义了建立、协商、修改和删除SA的过程和报文格式,并定义了密钥交换数据和身份鉴别数据的载荷格式。ISAKMP的一个核心功能就是创建和维护SA。SA作为通信双方之间对某些要素的一种协定,是IPSec的基础,协定的内容包括数据报文封装协议、IPSec工作模式、密码算法等安全策略和密钥。IPSec的两种封装协议(AH和ESP)均使用SA中协定的内容保护通信安全。另外,SA是单向的,一个SA为单一通信方向上传输的数据提供一种安全服务,通信双方需要产生属于自己的SA。若使用多个安全服务保护数据流,例如,同时提供认证和加密服务,那么应该创建多个SA来分别实现不同安全服务对数据的保护,即每个SA对应一个安全服务。
ISAKMP分为两个阶段:第一阶段是主模式,通信双方建立一个ISAKMP SA,并实现双方的身份鉴别和密钥交换,得到工作密钥,该工作密钥用于保护第二阶段的协商过程;第二阶段是快速模式,使用已建立的ISAKMP SA提供保护,实现通信双方IPSec SA的协商,确定通信双方IPSec安全策略和会话密钥。其中,IPSec安全策略定义了哪些服务以何种形式提供给IP数据报文,如数据加密服务以SM4的CBC模式实现。
(1)第一阶段:主模式。主模式是一个身份保护的交换,其交换过程由6个消息组成。双方身份的鉴别采用数字证书的方式实现。ISAKMP的主模式工作流程如图1-24所示。
图1-24 ISAKMP的主模式工作流程
①消息1:发起方向响应方发送一个封装有建议载荷的ISAKMP SA载荷,告知响应方它优先选择的密码协议(如ISAKMP、AH或ESP)以及希望协商中的SA采用的密码算法。
②消息2:响应方发送一个SA载荷及响应方的签名证书和加密证书(双证书),该载荷表明它所接受的发起方发送的SA提议。双证书则用于随后密钥交换时的数据加密和身份鉴别。
③消息3和4:双方完成基于数字签名的身份鉴别,并通过交换数据得到为第二阶段(快速模式)提供保护的工作密钥。密钥交换的数据内容包括Nonce载荷(Ni和Nr)、身份标识载荷(IDi和IDr)等,其中Nonce载荷是生成工作密钥所必需的参数。这些数据使用双方各自随机生成的临时密钥SK进行对称加密保护,SK用对方的加密证书中的公钥进行加密保护。双方各自对交换数据进行数字签名,这一过程使用签名证书对应的私钥来完成,并将签名结果发给对方。同时,发起方的双证书也在消息3中发给响应方。
消息3和4完成后,参与通信的双方利用Nonce载荷等交换数据经伪随机函数(Pseudo-Random Function,PRF)派生出基本密钥参数,并通过PRF用基本密钥参数派生出三个对称密钥,分别是用于产生会话密钥的密钥参数、用于验证完整性和数据源身份的工作密钥及用于加密的工作密钥。
④消息5和6:发送方和响应方对前面的协商过程内容进行鉴别确认。这两个消息中传递的信息使用用于加密的工作密钥进行对称加密保护。对称密码算法由消息1和2确定,如使用SM4算法的CBC模式。为了检查交换内容,双方通过计算HMAC验证身份和协定的SA信息。
(2)第二阶段:快速模式。在主模式建立了ISAKMP SA后,通信双方就可以使用快速模式了。快速模式用于协商建立通信时使用的IPSec SA,包括IPSec安全策略和会话密钥。会话密钥有两个,均为对称密钥,分别用于通信数据加密,以及完整性校验和数据源身份鉴别。快速模式交换的数据由主模式协定的ISAKMP SA提供保护,即除了ISAKMP头外所有的载荷都是加密的,加密密钥选用用于加密的工作密钥。同时,在ISAKMP头之后会紧跟一个HMAC载荷,用于验证交换数据的完整性和数据源身份。ISAKMP的快速模式工作流程如图1-25所示。
图1-25 ISAKMP的快速模式工作流程
最后,将主模式消息3和4中派生出的用于产生会话密钥的密钥参数经PRF计算得到会话密钥。PRF的输入还包括双方的Nonce载荷、从主模式建立的ISAKMP SA中获得的协议值和安全参数索引(SPI),其中SPI用于唯一标识一个数据报文对应的SA。用于加密的会话密钥与用于验证完整性和数据源身份的会话密钥则按照密码算法要求的长度,从会话密钥素材中依次选取。
2)AH协议
AH协议提供数据源身份鉴别、完整性和抗重放等安全功能。不过,AH不提供任何保密性服务。标准GM/T 0022-2014规定,AH不得单独用于封装IP数据报文,应和封装安全载荷协议ESP嵌套使用。
AH协议的主要作用是为整个IP数据报文(IP头和IP载荷)提供高强度完整性校验,以确保被篡改过的数据包可以被检查出来。AH使用MAC对IP数据报文进行认证,最常用的MAC是HMAC,而HMAC对IP数据报文处理所用的密钥就是IKE协定的用于验证完整性和数据源身份的会话密钥。
AH在传输模式和隧道模式中分别有不同的放置位置,保护的范围有所不同,如图1-26所示。使用传输模式时,AH放在原IP头之后,上层(传输层)协议之前,为整个IP数据报文(原IP头和IP载荷)提供认证保护;使用隧道模式时,AH放在新建外部IP头之后,原IP数据报文之前,为整个原IP数据报文及新建外部IP头提供认证保护。需要注意的是,由于AH不提供加密服务,因此图1-26中的AH和ESP嵌套使用,共同保护IP数据报文。
图1-26 传输模式和隧道模式下AH位置
3)ESP协议
和AH协议相比,ESP协议增加了对数据报文的加密功能,它可同时使用用于加密的会话密钥及用于验证完整性和数据源身份的会话密钥,来为数据提供全面保护。由于ESP提供的安全功能更为全面,在标准GM/T 0022-2014中规定,ESP可单独使用,并同时选择保密性和数据源身份鉴别服务;当ESP和AH结合使用时,无须ESP提供数据源身份鉴别服务,而由AH提供该项安全服务。由于单独使用ESP封装方式时,不会对数据报文的IP头进行认证,因此这种情况支持网络地址转换(NAT)穿越。
ESP头在传输模式和隧道模式中分别有不同的放置位置,保护范围也有所不同,如图1-27所示。使用传输模式时,ESP头放在原IP头之后,上层协议之前,为ESP头后的载荷提供保密性保护,为原IP头后的内容提供认证保护;使用隧道模式时,ESP头放在新建外部IP头之后,原IP数据报文之前,为整个原IP报文提供保密性保护,为新建外部IP头后的内容提供认证保护。
图1-27 传输模式和隧道模式下ESP头位置
2.SSL
SSL协议是网络上实现数据安全传输的一种通用协议,采用浏览器/服务端(B/S)结构是SSL协议的一种典型实现方式。该协议是由网景(Netscape)通信公司在推出Web浏览器时提出的,旨在保证经Web传输的重要或敏感数据的安全性。SSL协议的安全功能和IPSec类似,有数据加密、完整性保护、数据源鉴别和抗重放攻击等功能。SSL的3个版本(SSL 1.0/2.0/3.0)都由网景通信公司设计开发。1999年,IETF开展SSL标准化工作,将SSL 3.0改版为传输层安全(Transport Layer Secure,TLS)协议,即TLS 1.0。经历了TLS 1.1和TLS 1.2版本后,2018年8月,TLS 1.3正式版本通过RFC 8446发布。相比于TLS 1.2,TLS 1.3在安全性和效率上都有重要提升。
我国于2014年发布了密码行业标准GM/T 0024-2014《SSL VPN技术规范》,对SSL协议技术进行规范。标准GM/T 0024-2014参考了RFC 4346(TLS 1.1版本),并在TLS 1.1握手协议中增加了ECC、IBC身份鉴别模式和密钥交换模式,取消了DH密钥交换方式,修改了密码套件的定义以使其支持商用密码算法。
SSL不是单个协议,而是由多个协议组成的两层协议集合,如图1-28所示。SSL协议工作于应用层和传输层之间,协议的上层有握手协议等四个协议,下层是记录层协议(Record Protocol)。记录层协议用于封装不同的更高层协议的数据,为数据提供保密性、完整性和数据分段等服务,特别是它可为B/S的交互提供传输服务的超文本传输协议(HTTP)提供安全服务。SSL协议中定义了三个更高层协议:握手协议、密码规格变更协议和报警协议。其中,握手协议实现了服务端和客户端之间相互的身份鉴别、交互过程中密码套件(公钥密码算法、对称密码算法和密码杂凑算法的集合)与密钥的协商;密码规格变更协议则是用于通知对方其后的通信消息将用刚刚协商的密码规格及相关联的密钥来保护;报警协议用于关闭连接的通知,以及对整个连接过程中出现的错误进行报警,其中关闭通知由发起者发送,错误报警由错误的发现者发送,报警消息中包含报警级别和报警内容。
图1-28 SSL协议栈
下面对SSL中的两个主要部分——握手协议和记录层协议进行介绍。之所以选取这两个子协议,是因为记录层协议发挥了SSL“承上启下”的作用,它对从上层应用接收到的待传输数据进行分块、压缩、封装等处理,而后将处理后的数据传输给下层,再传输给通信的另一方;而握手协议是通信双方准备建立SSL连接通信时,用到的第一个子协议,它是SSL协议中最复杂、涉及密码技术最多的协议。这部分内容参考GM/T 0024-2014对SSL协议实现的描述。
1)握手协议
握手协议的主要作用有两点:一是通信双方对彼此进行身份鉴别;二是协商连接会话所需的密码参数(如密码算法、密钥),其中各类密码算法组成的集合称为密码套件。握手协议工作流程如图1-29所示,分为四个主要的阶段。
注:*表示可选或依赖于上下文关系的消息,不是每次都发送。[]不属于握手协议消息。
图1-29 握手协议工作流程
阶段一:客户端向服务端发送Client Hello消息,服务端回应Server Hello消息。若服务端未回应,则产生一个致命错误并且断开连接。Client Hello和Server Hello消息用于在客户端和服务端之间进行密码套件协商及确定安全传输能力(包括协议版本、会话标识等属性),并且产生和交换随机数。
阶段二:在客户端和服务端Hello消息之后是身份鉴别和密钥交换过程。在服务端发送完Hello消息之后,服务端将发送证书Server Certificate(签名证书和加密证书)和服务端密钥交换消息Server Key Exchange(用于生成预主密钥)。如果服务端需要验证客户端身份,则向客户端发送证书请求消息Certificate Request,之后发送服务端Hello完成消息Server Hello Done,表示Hello消息阶段已经结束,服务端等待客户端的返回消息。
阶段三:若服务端发送了一个证书请求消息Certificate Request,客户端必须返回一个证书消息Client Certificate。然后,客户端发送密钥交换消息Client Key Exchange,消息内容取决于双方Hello消息协商出的密钥交换算法,如交换算法为ECC,则客户端应产生46字节随机数与版本号一起构成预主密钥,并采用服务端的加密公钥进行加密并放在ClientKey Exchange消息中发送给服务端;如交换算法为ECDHE,则ClientKey Exchange消息包含计算预主密钥的客户端密钥交换参数。同时,客户端根据双方的密钥交换消息生成预主密钥。如果客户端发送了证书消息Client Certificate,那么也应发送一个带数字签名的消息Certificate Verify供服务端验证客户端的身份。在对交换数据进行加密和签名计算时,交换数据的加密运算采用对方加密证书中的公钥来完成;交换数据的签名运算采用本方签名私钥来完成,而且签名计算的输入应包括加密证书。
阶段四:客户端发送密码规格变更消息,并立即使用刚协商的算法和密钥,发送加密的握手结束消息。服务端则回应密码规格变更消息,使用刚协商的算法和密钥,发送加密的握手结束消息。至此,握手过程结束,服务端和客户端可以开始进行数据安全传输。
(1)密钥计算。主密钥为48字节对称密钥,由预主密钥、客户端随机数、服务端随机数、常量字符串,经PRF计算生成。
工作密钥的具体密钥长度由选用的密码算法决定,由主密钥、客户端随机数、服务端随机数、常量字符串经PRF计算生成。工作密钥包括两个对称密钥:用于加密的工作密钥,用于验证完整性和数据源身份的工作密钥。
(2)会话重用。如果客户端和服务端决定重用之前的会话,可不必重新协商安全参数。客户端发送Client Hello消息,并且带上要重用的会话标识。服务端在会话缓存中检查该标识,如果服务端有匹配的会话存在,服务端则使用相应的会话状态接受连接,发送一个具有相同会话标识的服务端Hello消息。然后通信双方根据从重用会话中提取的主密钥进行后续操作,以及发送密码规格变更消息和握手结束消息。如果服务端没有匹配的会话标识,服务端会生成一个新的会话标识进行一个新的完整的握手过程。
2)记录层协议
当客户端和服务端握手成功后,待传输的应用数据通过记录层协议封装,并得到保密性和完整性保护,具体过程如图1-30所示。接收到这些信息的实体要将该过程逆向执行一遍,从而获取原始数据。
图1-30 记录层协议
第1步:数据分段。当记录层从上面的应用层接收到不间断的数据流时,将对数据进行分段,每一个记录块的长度为214字节或者更小。
第2步:数据压缩。所有的记录块使用当前会话状态指定的压缩算法进行压缩。压缩应采用无损压缩方法,并且增加长度不超过1024字节。在标准GM/T 0024-2014中没有指定压缩算法,默认的压缩算法为空。
第3步:数据添加MAC。使用握手协议的密码套件中协定的密码杂凑算法和用于校验的工作密钥,对每块明文记录计算MAC。
第4步:对数据和MAC加密。使用握手协议的密码套件中协定的对称密码算法和用于加密的工作密钥,对压缩的数据及与之相关联的MAC进行加密。
第5步:附加SSL记录报头。增加由内容类型、主要版本、次要版本和压缩长度组成的首部。
1.6.4 密码协议分析概要
对密码协议的分析和设计是相互交织并且相辅相成、共同发展的。在早期研究中,研究人员根据具体应用需求设计了大量密码协议,并基于经验和单纯的软件测试等分析其安全特性。多数协议是通过和已有协议进行对比或者分析对已知攻击的抵抗等经验来说明协议的安全性。然而,事实证明,根据经验设计的密码协议是非常脆弱和危险的,各种未知的攻击会不断涌现。以密钥交换协议为例,其前期分析工作只进行启发式的安全说明,缺乏严格的安全性证明,针对其未曾预料的攻击层出不穷。
针对上述缺点,研究人员在近几年提出了一系列密码协议设计原则,并且给出了一套形式化的分析方法,从而从理论上保证了密码协议的安全性。
设计原则有助于在协议设计阶段通过充分考虑一些不恰当的结构来避免不必要的错误,具体包括消息独立完整性原则、消息前提准确原则、主体身份鉴别标识原则、加密目的原则、签名原则、随机数使用原则、时间戳使用原则及编码原则。
形式化方法采用正规的标准化方法,借助可证明安全的方法对协议进行分析以检查协议是否满足其安全目标。密码协议的形式化分析技术可以使设计者将注意力集中于接口、系统环境的假设、系统的不同状态与不变属性等,通过系统验证提供必要的保证。形式化分析有助于界定密码协议的边界、准确地描述密码协议的行为和特性、更准确地衡量敌手的能力,以及准确地分析其满足安全目标或者在什么条件下不满足安全目标。
对一个具体的密码协议进行分析时,研究人员的一个基本共识是对协议进行形式化抽象与刻画,并采用可证明安全的手段进行说明,将协议安全保证归约到底层的数学问题的困难性或者密码组件的安全属性上,从而保证协议安全性。例如,针对密钥交换协议,研究人员已经提出了一些严格的安全模型,并采用可证明安全的方法证明所设计的方案符合某个安全模型的安全定义,这其中具有代表性的就是HMQV、NAXOS等方案;针对TLS 1.3协议,研究人员用形式化的方法定义合适的安全模型,并从理论证明的角度分析其不同版本之间的可组合性及对称密钥协议的可组合性。