一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于国密算法的TLS密钥交换方法及系统与流程

2023-02-02 03:00:11 来源:中国专利 TAG:

基于国密算法的tls密钥交换方法及系统
技术领域
1.本披露一般涉及网络安全领域。更具体地,本披露涉及一种基于国密算法的 tls密钥交换方法及系统。


背景技术:

2.国密算法是在我国境内通用的商用密码算法,其包含sm2、sm3和sm4 算法等。sm2算法是基于椭圆曲线的非对称加密算法,sm3算法是数据摘要算法,sm4是以16字节为分组的对称块加密算法。国密算法的公开为中国商用密码算法提供了安全应用的标准。
3.而安全传输层协议tls是互联网上一种应用广泛的安全协议,用于在两个通信应用程序之间提供保密性和数据完整性,是传输层安全的标准。由于国密算法与tls协议中所利用现有的算法不同,例如:密钥长度不同、迭代结构不同等,不能按照现有的方法将国密算法应用于tls协议中。现有技术中提供了一种基于国密算法建立tls通道的方法,在该算法中tls通道建立所使用的密码套件不具备前向安全性(前向安全性指的是长期使用的主密钥泄漏不会导致过去的会话密钥泄漏),其长期使用的密钥一旦泄露,过去进行的通讯则会产生在未来暴露的风险。
4.有鉴于此,亟需提供一种基于国密算法的tls密钥交换方法及系统,以支撑基于国密算法建立的tls通道的前向安全性,提高tls国密化改造的安全属性。


技术实现要素:

5.为了至少解决如上所提到的一个或多个技术问题,本披露在多个方面中提出了基于国密算法的tls密钥交换方法及系统,以解决现有的基于国密算法的tls 通道建立所使用的密码套件不具备前向安全性的问题。
6.在第一方面中,本披露提供一种基于国密算法的tls密钥交换方法,包括:
7.响应于客户端hello消息,发出服务端hello消息作为回应,并发出服务端密钥交换消息、服务端证书和服务端hello完成消息;其中,所述服务端密钥交换消息中包含有一对临时密钥对中的临时公钥,用以提供给客户端进行预主密钥加密,以形成客户端密钥交换消息;
8.接收所述客户端密钥交换消息并通过所述临时密钥对中的临时私钥对加密后的预主密钥进行解密。
9.在一种实施方式中,所述预主密钥通过sm2椭圆曲线公钥加密算法,使用所述临时公钥进行加密计算得到。
10.在一种实施方式中,所述服务端密钥交换消息中还包含有曲线类型、曲线参数以及对sm3哈希值使用所述服务端证书密钥对中的证书私钥和sm2签名算法所得到的认证签名。
11.在第二方面中,本披露提供一种基于国密算法的tls密钥交换方法,包括:
12.发出客户端hello消息以发起会话;
13.响应于服务端hello完成消息,根据获取到的服务端密钥交换消息中的临时公钥对预主密钥进行加密,并发出客户端密钥交换消息以将加密后的预主密钥发送至服务端;
14.其中,所述客户端密钥交换消息中包含有所述加密后的预主密钥。
15.在一种实施方式中,所述根据获取到的服务端密钥交换消息中的临时公钥对预主密钥进行加密,包括:
16.基于所述临时公钥,利用sm2椭圆曲线公钥加密算法对所述预主密钥进行加密。
17.在一种实施方式中,所述预主密钥包括:客户端所支持的版本号以及随机数;其中,所述客户端所支持的版本号用以提供给服务端进行会话匹配。
18.在一种实施方式中,所述客户端hello消息中包含有客户端协议版本号;
19.所述会话匹配的步骤包括:服务端判断所述客户端协议版本与所述客户端协议版本号是否匹配,若是,则服务端接收所述加密后的预主密钥并通过临时私钥进行解密,以得到所述预主密钥。
20.在一种实施方式中,所述发出客户端hello消息以发起会话之后,还包括:
21.若服务端发出请求客户端证书消息,则响应于所述请求客户端证书消息,依次发出客户端证书、所述客户端密钥交换消息和客户端证书验证消息;
22.否则响应于所述服务端hello完成消息,发出所述客户端密钥交换消息作为首条回应所述服务端的消息。
23.在一种实施方式中,所述根据获取到的服务端密钥交换消息中的临时公钥对预主密钥进行加密之前,还包括:
24.响应于服务端hello完成消息,若根据所述服务端密钥交换消息中的认证签名确定服务端认证通过,则执行根据获取到的服务端密钥交换消息中的临时公钥对预主密钥进行加密的步骤,否则发起报警并结束会话。
25.在第三方面中,本披露提供一种基于国密算法的tls密钥交换系统,包括:服务端和客户端;
26.所述服务端执行如第一方面任一实施方式所述的方法以生成加密后的预主密钥并将加密后的预主密钥发出;所述客户端执行如第二方面任一实施方式所述的方法以获取解密后的预主密钥。
27.通过如上所提供的基于国密算法的tls密钥交换方法,本披露的方案应用于密钥交换协议中,不依赖服务端提供服务端证书,也不依赖客户端提供客户端证书以进行国密tls协商过程中的预主密钥的协商,每次在进行完整的握手协商(即,完整会话)时,服务端生成一对临时密钥对,并通过发出服务端密钥交换消息将临时密钥对中的临时公钥发送给客户端进行预主密钥的加密,后续服务端使用临时密钥对中的临时私钥进行预主密钥的解密,由于该临时密钥对仅在当前会话中的临时使用,而非长期使用的,因此,即使在服务端证书密钥对泄露的情况下也不能计算出协商的预主密钥,且即使当前会话使用的临时密钥对泄露也不会导致过去发生的会话泄露,从而保证了基于国密算法的tls通道的前向安全性。
28.进一步,在本披露的一些实施例中,基于如上所提供的tls密钥交换方法不依赖客户端证书的获取,因此,无论是单向的tls通道建立和双向的tls通道建立均可以适配如上所提供的tls密钥交换方法。
29.更进一步地,在本披露的一些实施例中,如上所提供的tls密钥交换方法仅在服务端中生成一对临时密钥对,客户端基于该临时密钥对对预主密钥进行加密,方案实现简单,且会话消息简洁、效率高。
附图说明
30.通过参考附图阅读下文的详细描述,本披露示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本披露的若干实施方式,并且相同或对应的标号表示相同或对应的部分,其中:
31.图1示例性地示出了tls完整握手协议流程的流程示意图;
32.图2示例性地示出了本披露实施例的tls密钥交换方法的流程示意图;
33.图3示例性地示出了本披露的一些实施例的tls密钥交换方法的另一流程示意图;
34.图4示例性地示出了本披露实施例的基于国密算法的tls密钥交换系统的结构框图。
具体实施方式
35.下面将结合本披露实施例中的附图,对本披露实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本披露一部分实施例,而不是全部的实施例。基于本披露中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本披露保护的范围。
36.应当理解,本披露的说明书和权利要求书中使用的术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
37.还应当理解,在此本披露说明书中所使用的术语仅仅是出于描述特定实施例的目的,而并不意在限定本披露。如在本披露说明书和权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。还应当进一步理解,在本披露说明书和权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
38.如在本说明书和权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。
[0039]
现有技术中提供了一种基于国密算法建立tls通道的方法,其所使用的密码套件不具备前向安全性,导致其长期使用的密钥一旦泄露,过去进行的通讯则会产生在未来暴露的风险。
[0040]
针对上述问题,本披露实施例提供了一种基于国密算法的tls密钥交换方法。
[0041]
下面结合附图来详细描述本披露的具体实施方式。
[0042]
首先对tls完整握手协议流程进行介绍,图1示例性地示出了tls完整握手协议流程的流程示意图,参见图1,该流程包括如下四个阶段:
[0043]
握手请求阶段:在此阶段,客户端发起客户端hello消息clienthello,服务端收到
clienthello后发送服务端hello消息serverhello作为回应;
[0044]
服务端认证阶段,在此阶段,服务端向客户端发送服务端证书 servercertificate、服务端密钥交换消息serverkeyexchange、请求客户端证书消息certificaterequest以及服务端hello完成消息serverhellodone;其中,请求客户端证书消息certificaterequest为可选项,并非每次握手协商均需发送;
[0045]
客户端认证阶段,在此阶段,客户端向服务端发送客户端证书 clientcertificate、客户端密钥交换消息clientkeyexchange和客户端证书验证消息certificateverify;其中,客户端证书clientcertificate和客户端证书验证消息 certificateverify为可选项,当服务端发出请求客户端证书消息certificaterequest 时,方才发出作为回应;
[0046]
完成握手阶段,在此阶段,客户端发送客户端更换密码套件消息clientchangecipherspec和客户端结束消息clientfinished,服务器端收到客户端结束消息clientfinished后,发送服务端更换密码套件消息 serverchangecipherspec和服务端结束消息serverfinished,以结束握手流程。
[0047]
现有技术中,客户端需依赖服务端证书servercertificate中的服务端加密公钥进行预主密钥的协商,该服务端加密公钥为长期密钥,所以现有技术所使用的密码套件不具备前向安全性。
[0048]
另外,在另一些现有的tls握手协议过程中,客户端使用sm2密钥交换算法协商预主密钥,由于sm2密钥交换协议的标准规定了两端各需要两对密钥对方可完成预主密钥的协商,导致tls握手协议过程实现复杂,加密成本高。
[0049]
图2示例性地示出了本披露实施例的tls密钥交换方法的流程示意图。在本披露实施例中,所述tls密钥交换方法可以包括:
[0050]
在步骤201中,响应于客户端hello消息,发出服务端hello消息作为回应,并发出服务端密钥交换消息、服务端证书和服务端hello完成消息;
[0051]
在步骤202中,接收客户端密钥交换消息并通过临时密钥对中的临时私钥对加密后的预主密钥进行解密。
[0052]
其中,所述服务端密钥交换消息中包含有一对临时密钥对中的临时公钥,用以提供给客户端进行预主密钥加密,以形成客户端密钥交换消息。
[0053]
示例性地,clienthello的字段结构可以如下:
[0054]
struct{
[0055]
protocolversion client_version;
[0056]
random random;
[0057]
sessionid session_id;
[0058]
ciphersuite cipher_suites《2..2^16-1》;
[0059]
compressionmethod compression_methods《1..2^8-1》;
[0060]
}clienthello;
[0061]
其中,client_version表示客户端hello消息clienthello中包含的客户端协议版本号,client_version的字段结构可以如下:
[0062]
protocolversion:
[0063]
struct{
[0064]
uint8major,minor;
[0065]
}protocolversion;
[0066]
其中,random表示客户端hello消息clienthello中包含的客户端产生的随机信息,具体可以包括时间和随机数。示例性地,random的字段结构如下:
[0067]
struct{
[0068]
uint32gmt_unix_time;
[0069]
opaque random_bytes[28];
[0070]
}random;
[0071]
其中,session_id表示客户端的会话标识,定义为:opaque sessionid《0..32》,其值由服务器端决定,用于验证会话。如果没有可重用的会话标识或希望协商安全参数,该字段应为空,否则表示客户端希望重用该会话。
[0072]
会话标识可以是之前的连接标识、当前连接标识、或其它处于连接状态的连接标识。会话标识生成后应一直保持到被超时删除或与这个会话相关的连接遇到致命错误被关闭。一个会话失效或被关闭时,与其相关的连接都应被强制关闭。
[0073]
其中,cipher_suites表示客户端所支持的密码套件列表;compression_methods 表示客户端所支持的压缩算法列表。
[0074]
服务端接收到如上所述的客户端hello消息clienthello后,向客户端发送服务端hello消息serverhello作为回应,示例性地,serverhello的字段结构可以如下:
[0075]
struct{
[0076]
protocolversion server_version;
[0077]
random random;
[0078]
sessionid session_id;
[0079]
ciphersuite cipher_suite;
[0080]
compression method compression_method;
[0081]
}serverhello;
[0082]
其中,server_version表示服务端支持的协议版本;random表示服务端产生的随机数;session_id表示服务端的会话标识,若客户端hello消息中的会话标识不为空,且服务端存在匹配的会话标识,则服务端重用该匹配的会话标识对应的会话建立新连接,并在回应的服务端hello消息中带上与客户端一致的会话标识,否则服务端产生一个新的会话标识,用来建立一个新的会话;cipher_suite表示服务端从客户端hello消息中选取一个密码套件;compression_method表示服务端从客户端hello消息中选取的一个压缩算法。
[0083]
在接收到客户端hello消息clienthello后,服务端还发出服务端密钥交换消息serverkeyexchange、服务端证书servercertificate和服务端hello完成消息 serverhellodone。
[0084]
在本披露实施例中,进一步地,客户端可以通过sm2椭圆曲线公钥加密算法,使用所述临时公钥进行加密计算得到所述预主密钥。
[0085]
在一些实施例中,服务端还可以发出请求客户端证书消息certificaterequest 以请求获取客户端证书clientcertificate用于对客户端进行验证。在一些实施例中,可以
通过确定客户端证书有效以确定客户端验证通过。
[0086]
进一步地,客户端可以响应于请求客户端证书消息certificaterequest,发出客户端证书clientcertificate和客户端证书验证消息certificateverify,若服务端确定客户端证书有效且客户端证书验证消息certificateverify中的签名值有效,则确定客户端验证通过。
[0087]
在本披露实施例中,所述服务端密钥交换消息serverkeyexchange的字段中包含有一对临时密钥对中的临时公钥publictemp,用以提供给客户端进行预主密钥加密,以形成客户端密钥交换消息。
[0088]
在一些实施例中,serverkeyexchange中还可以包含有曲线类型curve_type、曲线参数namedcurve以及对sm3哈希值使用所述服务端证书密钥对中的证书私钥和sm2签名算法所得到的认证签名sm2signature。
[0089]
进一步地,在又一些实施例中,serverkeyexchange中还可以包含有服务端证书密钥对中的证书公钥publictemp。
[0090]
示例性地,serverkeyexchange的字段结构可以如下:
[0091]
struct{
[0092]
eccurvetype curve_type(named_curve);
[0093]
namedcurve namedcurve;
[0094]
ecpoint publictemp;
[0095]
sm2signature sm2signature;
[0096]
}serverkeyexchange;
[0097]
其中,curve_type为使用的曲线类型。在一些实施例中,使用命名曲线,其值可以为0x03。
[0098]
其中,namedcurve为与临时公钥publictemp相关的曲线参数。在一些实施例中,对于该算法使用国密推荐曲线,其值可以为0x0029。
[0099]
其中,示例性地,ecpoint的定义如下:
[0100]
struct{
[0101]
opaque point《1..2^8-1》;
[0102]
}ecpoint;
[0103]
该字段表示使用国密推荐曲线产生的临时公钥,该公钥点是非压缩的,在该字段前有一个字节的长度表示临时公钥长度,该长度包含非压缩点标识。
[0104]
其中,示例性地,sm2signature的定义如下:
[0105]
struct{
[0106]
sm2signature sm2signature《0..2^16-1》;
[0107]
}certificateverify;
[0108]
其中的sm2signature的结构如下:
[0109][0110]
该字段表示对sm3哈希值使用所述服务端证书密钥对中的证书私钥,通过 sm2签名算法进行签名。
[0111]
其中,用于sm2签名的哈希值如下:
[0112]
serverkeyexchange.sm2signature.sm3_hash=sm3(z值 clienthello.random serverhello.random serverkeyexchange.publictemp)
[0113]
其中,sm2signatur之前存在两个字节表示签名值长度; serverkeyexchange.publictemp不包含长度;z值为服务端证书私钥杂凑值z, user id使用国密推荐的默认id。
[0114]
服务端完成服务端证书servercertificate和服务端密钥交换消息 serverkeyexchange后,发送服务端hello完成消息serverhellodone以表示全部 hello消息发送完毕;待客户端回应以客户端密钥交换消息clientkeyexchange后,通过临时密钥对中的临时私钥对客户端密钥交换消息clientkeyexchange中的加密后的预主密钥进行解密,以完成tls密钥交换过程。
[0115]
通过如上所提供的基于国密算法的tls密钥交换方法,本披露的方案应用于密钥交换协议中,不依赖服务端提供服务端证书,也不依赖客户端提供客户端证书以进行国密tls协商过程中的预主密钥的协商,每次在进行完整的握手协商(即,完整会话)时,服务端生成一对临时密钥对,并通过发出服务端密钥交换消息将临时密钥对中的临时公钥发送给客户端进行预主密钥的加密,由于该临时密钥对仅在当前会话中的临时使用,而非长期使用的,因此,即使在服务端证书密钥对泄露的情况下也不能计算出协商的预主密钥,且即使当前会话使用的临时密钥对泄露也不会导致过去发生的会话泄露,从而保证了基于国密算法的tls 通道的前向安全性。
[0116]
进一步地,在前文所述的一个实施例中,tls密钥交换方法不依赖客户端证书的获取,因此,无论是单向的tls通道建立和双向的tls通道建立均可以使用前述tls密钥交换系统。
[0117]
更进一步地,前文提供的tls密钥交换方法在进行密钥交换时,仅在服务端中生成一对临时密钥对,客户端基于该临时密钥对对预主密钥进行加密,方案实现简单,且会话消息简洁、效率高。
[0118]
在本披露实施例中,客户端发出客户端hello消息clienthello以发起会话,服务端响应于客户端hello消息clienthello,通过前文所述的方法回应以服务端证书servercertificate、服务端密钥交换消息serverkeyexchange以及服务端hello 完成消息serverhellodone。
[0119]
下面结合图3对客户端完成tls密钥交换的过程进行说明。
[0120]
图3示例性地示出了本披露的一些实施例的tls密钥交换方法的另一流程示意图。请参见图3,tls密钥交换方法可以包括:
[0121]
在步骤301中,发出客户端hello消息以发起会话。
[0122]
在步骤302中,响应于所述服务端hello完成消息,客户端根据获取到的服务端密钥交换消息中的临时公钥对预主密钥进行加密,并发出客户端密钥交换消息以将加密后的预主密钥发送至服务端。其中,客户端密钥交换消息 clientkeyexchange中包含有所述加密后的预主密钥。
[0123]
示例性地,所述客户端根据获取到的服务端密钥交换消息中的临时公钥对预主密钥进行加密,包括:基于所述临时公钥,利用sm2椭圆曲线公钥加密算法对所述预主密钥进行加密。
[0124]
其中,预主密钥可以包括:客户端所支持的版本号以及随机数;其中,所述客户端所支持的版本号用以提供给服务端进行会话匹配。
[0125]
示例性地,本实施例中客户端密钥交换消息clientkeyexchange的字段结构如下:
[0126]
struct{
[0127]
opaque sm2encryptedpremastersecret《0..2^16-1》;
[0128]
}clientkeyexchange;
[0129]
其中,sm2encryptedpremastersecret表示使用serverkeyexchange中的publictemp,通过sm2加密算法计算得到的预主密钥。
[0130]
该预主密钥的结构如下:
[0131]
struct{
[0132]
protocolversion client_version;
[0133]
opaque random[46];
[0134]
}premastersecret;
[0135]
其中,client_version表示客户端所支持的版本号,服务端在接收到客户端密钥交换消息clientkeyexchange后,需检查client_version与clienthello中的 client_version是否匹配,若匹配,则服务端接收所述加密后的预主密钥并通过临时私钥进行解密,以得到所述预主密钥;否则发起报警并结束会话。
[0136]
其中,random表示客户端产生的46字节的随机数。在本实施例的算法中,该46字节的随机数作为后续的预主密钥使用。
[0137]
sm2算法加密后的数据格式的asn.1定义如下:
[0138][0139]
其中,asn.1为抽象语法标记1(asn.1,abstract syntax notation dotone),是定义抽象数据类型形式的标准,描绘了通用数据结构。
[0140]
其中,杂凑值的计算方式可以参见sm2算法的官方标准文档(国家密码管理局2010年12月的发文《sm2椭圆曲线公钥密码算法》第一部分:总则,第54页,第5.5节“用户其他信息”),加入该杂凑值可进一步提高sm2算法的安全性。
[0141]
在一些实施例中,在客户端发出客户端密钥交换消息clientkeyexchange之前,响应于服务端hello完成消息serverhellodone,可以通过判断所述服务端密钥交换消息serverkeyexchange中的认证签名sm2signature是否有效,和/或通过判断服务端证书servercertificate是否有效,以此确定服务端认证是否通过,若认证通过,则执行根据获取到的服务端密钥交换消息serverkeyexchange中的临时公钥publictemp对预主密钥进行加密的步骤;否则发起报警并结束会话。
[0142]
上述实施例中,服务端在发送hello消息的阶段并未请求客户端证书,则客户端发出客户端密钥交换消息clientkeyexchange作为首条回应所述服务端hello 完成消息serverhellodone的消息。
[0143]
在另一些实施例中,若服务端响应于客户端hello消息clienthello,发出了请求客户端证书消息certificaterequest,那么在服务端发出请求客户端证书消息 certificaterequest的情况下,客户端响应于所述请求客户端证书消息 certificaterequest,向服务端依次发出客户端证书clientcertificate、所述客户端密钥交换消息clientkeyexchange和客户端证书验证消息certificateverify。
[0144]
其中,客户端证书验证消息certificateverify是指使用客户端证书 clientcertificate对应的私钥对sm3哈希值进行签名运算所获得的签名值。sm3 哈希值是使用sm3哈希算法对客户端z值和握手消息使用sm3哈希算法运算获得的哈希值。握手消息包括从客户端hello消息clienthello开始到客户端证书验证消息certificateverify为止所有发送和接收的消息,但不包含客户端证书验证消息certificateverify。
[0145]
服务端在接收到客户端证书clientcertificate和客户端证书验证消息 certificateverify之后,利用客户端证书clientcertificate和客户端证书验证消息 certificateverify对客户端进行验证,若验证通过则继续握手协议流程,否则发起报警并结束会话。
[0146]
具体的验证过程可以参考前文所述的客户端基于服务端证书 servercertificate和服务端密钥交换消息serverkeyexchange中的认证签名 sm2signature对服务端进行认证的过程,此处不再展开赘述。
[0147]
与前述方法实施例相对应地,本披露还提供了一种用于执行前述实施例所述方法的系统,图4示例性地示出了本披露实施例的基于国密算法的tls密钥交换系统的结构框图,参见图4,本披露实施例的基于国密算法的tls密钥交换系统可以包括:服务端401与客户端402。
[0148]
其中,所述客户端402执行以下步骤以生成并发出加密后的预主密钥,包括:
[0149]
发出客户端hello消息以发起会话;
[0150]
响应于服务端hello完成消息,根据获取到的服务端密钥交换消息中的临时公钥对预主密钥进行加密,并发出客户端密钥交换消息以将加密后的预主密钥发送至服务端;其中,所述客户端密钥交换消息中包含有所述加密后的预主密钥。
[0151]
所述服务端401执行以下步骤以获取预主密钥,包括:
[0152]
响应于客户端hello消息,发出服务端hello消息作为回应,并发出服务端密钥交换消息、服务端证书和服务端hello完成消息;其中,所述服务端密钥交换消息中包含有一对临时密钥对中的临时公钥,用以提供给客户端进行预主密钥加密,以形成客户端密钥交
换消息;
[0153]
接收所述客户端发出的客户端密钥交换消息并通过所述临时密钥对中的临时私钥对加密后的预主密钥进行解密。
[0154]
进一步地,在一些实施例中,所述服务端还可以配置成:响应于客户端hello 消息,发出服务端hello消息作为回应,并依次发送服务端证书、服务端密钥交换消息、请求客户端证书消息以及服务端hello完成消息;
[0155]
相应地,所述客户端还可以配置成:响应于服务端hello完成消息,根据服务端证书和/或服务端密钥交换消息确定服务端是否认证通过,若认证通过,则根据服务端密钥交换消息中的临时公钥加密预主密钥以形成客户端密钥交换消息,并依次发出客户端证书、所述客户端密钥交换消息和客户端证书验证消息;若认证不通过,则发出报警并结束会话。
[0156]
相应地,所述服务端还可以配置成:根据客户端证书和客户端证书验证消息确定客户端是否验证通过,若验证通过,则接收所述客户端发出的客户端密钥交换消息并通过所述临时密钥对中的临时私钥对加密后的预主密钥进行解密;若验证不通过,则发出报警并结束会话。
[0157]
在一些实施例中,加密后的预主密钥包括:客户端所支持的版本号以及随机数;客户端hello消息中包含有客户端协议版本号。相应地,所述服务端还可以配置成:
[0158]
响应于所述客户端密钥交换消息,判断所述客户端密钥交换消息中的客户端所支持的版本号与客户端hello消息中包含的客户端协议版本号是否匹配,若匹配,则通过所述临时密钥对中的临时私钥对加密后的预主密钥进行解密,否则发起报警并结束会话。
[0159]
通过本实施例提供的基于国密算法的tls密钥交换系统,能够不依赖服务端提供服务端证书,也不依赖客户端提供客户端证书以进行国密tls协商过程中的预主密钥的协商,每次在进行完整的握手协商(即,完整会话)时,服务端生成一对临时密钥对,并通过发出服务端密钥交换消息将临时密钥对中的临时公钥发送给客户端进行预主密钥的加密,由于该临时密钥对仅在当前会话中的临时使用,而非长期使用的,因此,即使在服务端证书密钥对泄露的情况下也不能计算出协商的预主密钥,且即使当前会话使用的临时密钥对泄露也不会导致过去发生的会话泄露,从而保证了基于国密算法的tls通道的前向安全性。
[0160]
进一步地,由于该tls密钥交换系统不依赖客户端证书的获取,因此,无论是单向的tls通道建立和双向的tls通道建立均可以使用前述tls密钥交换系统。
[0161]
更进一步地,如上所提供的tls密钥交换系统在进行密钥交换时,仅在服务端中生成一对临时密钥对,客户端基于该临时密钥对对预主密钥进行加密,方案实现简单,且会话消息简洁、效率高。
[0162]
虽然本文已经示出和描述了本披露的多个实施例,但对于本领域技术人员显而易见的是,这样的实施例只是以示例的方式来提供。本领域技术人员可以在不偏离本披露思想和精神的情况下想到许多更改、改变和替代的方式。应当理解的是在实践本披露的过程中,可以采用对本文所描述的本披露实施例的各种替代方案。所附权利要求书旨在限定本披露的保护范围,并因此覆盖这些权利要求范围内的等同或替代方案。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献