基于QUIC协议的连接建立方法与流程
未命名
07-13
阅读:140
评论:0
基于quic协议的连接建立方法
技术领域
1.本披露一般涉及数据通信技术领域。更具体地,本披露涉及一种基于quic协议的连接建立方法。
背景技术:
2.tcp/ip协议簇是互联网通信的基础。其中,传输层协议包括tcp协议和udp协议。tcp协议是一种面向连接的、可靠的、基于字节流的传输层通信协议,其需要通过三次握手建立连接,四次挥手断开连接,还会通过超时重传和应答确认机制来保证数据的完整性;而udp协议是基于轻量化考虑的一种无连接的传输层协议,由于不需要对端的应答且不需要建立连接,所以这种传输协议的速度很快但数据可靠性差。
3.为了解决了传输层和应用层面临的各种需求,包括处理更多的连接、提高安全性和更低延迟,现有技术提供了一种quic协议,当客户端第一次连接服务端时,其只需要1次往返时延(rtt,round-trip time)就可以建立可靠安全的连接,甚至在特定情况下通过0rtt即可建立连接,相对于tcp+tls的1至3次rtt要更加快捷,同时,相对于udp协议连接更加可靠。
4.但是,目前行业内的规范仅对如何使用国际算法实现quic协议进行了说明,而在我国境内通用的商用密码算法则是国密算法,基于国际算法实现的quic协议的国密化程度很低,难以实现大范围的应用。
5.有鉴于此,亟需提供一种基于quic协议的连接建立方案,以便实现国密算法在quic协议中的应用,以利于拓展quic协议的应用范围。
技术实现要素:
6.为了至少解决如上所提到的一个或多个技术问题,本披露在多个方面中提出了基于quic协议的连接建立方案。
7.在第一方面中,本披露提供一种基于quic协议的连接建立方法,包括:确定当前连接为首次连接,则向服务端发出客户端初始化数据包并接收服务端反馈的服务端初始化数据包,以完成地址验证和密钥交换;其中,客户端初始化数据包和服务端初始化数据包基于初始化密钥和国际算法进行加密保护,初始化密钥通过第一hkdf函数派生得到,第一hkdf函数中采用国际算法进行哈希运算;响应于服务端反馈的服务端握手数据包,向服务端发出客户端握手数据包,以完成握手,建立连接;其中,初始化数据包中含有加密类型信息,加密类型信息用于指示加密保护所采用的国密算法;客户端握手数据包和服务端握手数据包基于握手密钥和国密算法进行加密保护,握手密钥通过第二hkdf函数派生得到,第二hkdf函数中采用国密算法进行哈希运算;响应于通信需求,基于1-rtt密钥和国密算法,对携带有应用数据的客户端1-rtt数据包进行加密保护后,将其发送至服务端,以进行通信。
8.在一些实施例中,地址验证的步骤包括:向服务端发出客户端初始化数据包并接收服务端反馈的服务端重试数据包;其中,服务端重试数据包中含有用于地址验证的令牌,
服务端重试数据包基于重试密钥和国际算法进行加密保护;向服务端发出客户端重试数据包并接收服务端反馈的服务端初始化数据包,以完成地址验证;其中,客户端重试数据包中携带有令牌。
9.在一些实施例中,客户端数据包包括:客户端握手数据包和/或客户端1-rtt数据包;客户端数据包的加密保护步骤包括:基于第二hkdf函数和客户端数据包的对应密钥,派生得到包体保护密钥和包头保护密钥;基于aead算法和包体保护密钥对客户端数据包的包体部分进行加密保护,得到客户端包体密文;对客户端包体密文进行字段采样,得到客户端密文样本;基于包头保护算法和包头保护密钥,对客户端密文样本进行加密保护后取样,得到客户端包头保护掩码;基于客户端包头保护掩码,对客户端数据包的包头部分进行加密保护;其中,包头保护算法为国密算法。
10.在一些实施例中,基于quic协议的连接建立方法还包括:确定当前连接为非首次连接,则向服务端发出客户端初始化数据包和客户端0-rtt数据包,并接收服务端反馈的服务端初始化数据包、服务端握手数据包和服务端1-rtt数据包,以完成通信;客户端0-rtt数据包中携带有应用数据;客户端0-rtt数据包基于0-rtt密钥和国密算法进行加密保护,0-rtt密钥通过第二hkdf函数派生得到。
11.在第二方面中,本披露提供一种基于quic协议的连接建立方法,包括:确定当前连接为首次连接,则向服务端发出客户端初始化数据包并接收服务端反馈的服务端初始化数据包,以完成地址验证和密钥交换,具体包括:向服务端发出客户端初始化数据包并接收服务端反馈的服务端重试数据包;向服务端发出客户端重试数据包并接收服务端反馈的服务端初始化数据包,以完成地址验证和密钥交换;
12.其中,客户端初始化数据包和服务端初始化数据包基于初始化密钥和国密算法进行加密保护,初始化密钥通过第三hkdf函数派生得到,第三hkdf函数中采用国密算法进行哈希运算;服务端重试数据包中含有令牌,服务端重试数据包基于重试密钥和国密算法进行加密保护;客户端重试数据包中携带有令牌;响应于服务端反馈的服务端握手数据包,向服务端发出客户端握手数据包,以完成握手,建立连接;其中,客户端握手数据包和服务端握手数据包基于握手密钥和国密算法进行加密保护,握手密钥通过第三hkdf函数派生得到;响应于通信需求,基于1-rtt密钥和国密算法对携带有应用数据的客户端1-rtt数据包进行加密保护后,将其发送至服务端,以进行通信;方法还包括:确定当前连接为非首次连接,则向服务端发出客户端初始化数据包和客户端0-rtt数据包,并接收服务端反馈的服务端初始化数据包、服务端握手数据包和服务端1-rtt数据包,以完成通信;客户端0-rtt数据包中携带有应用数据;客户端0-rtt数据包基于0-rtt密钥和国密算法进行加密保护,0-rtt密钥通过第三hkdf函数派生得到。
13.在第三方面中,本披露提供一种基于quic协议的连接建立方法,包括:响应于客户端发出的客户端初始化数据包,发出服务端初始化数据包,以完成地址验证和密钥交换;其中,客户端初始化数据包和服务端初始化数据包基于初始化密钥和国际算法进行加密保护,初始化密钥通过第一hkdf函数派生得到,第一hkdf函数中采用国际算法进行哈希运算;发出服务端握手数据包,并接收客户端发出的客户端握手数据包,以完成握手,建立连接;其中,初始化数据包中含有加密类型信息,加密类型信息用于指示加密保护所采用的国密算法;客户端握手数据包和服务端握手数据包基于握手密钥和国密算法进行加密保护,握
手密钥通过第二hkdf函数派生得到,第二hkdf函数中采用国密算法进行哈希运算;响应于客户端1-rtt数据包,基于1-rtt密钥和国密算法,对携带有应用数据的服务端1-rtt数据包进行加密保护后,将其发送至客户端,以进行通信。
14.在一些实施例中,地址验证的步骤包括:响应于客户端发出的客户端初始化数据包,发出服务端重试数据包;其中,服务端重试数据包中含有令牌,服务端重试数据包基于重试密钥和国际算法进行加密保护;响应于客户端发出的客户端重试数据包,发出服务端初始化数据包,以完成地址验证;其中,客户端重试数据包中携带有令牌。
15.在一些实施例中,服务端数据包包括:服务端握手数据包和/或服务端1-rtt数据包;服务端数据包的加密保护步骤包括:基于第二hkdf函数和服务端数据包的对应密钥,派生得到包体保护密钥和包头保护密钥;基于aead算法和包体保护密钥对服务端数据包的包体部分进行加密保护,得到服务端包体密文;对服务端包体密文进行字段采样,得到服务端密文样本;基于包头保护算法和包头保护密钥,对服务端密文样本进行加密保护后取样,得到服务端包头保护掩码;基于服务端包头保护掩码,对服务端数据包的包头部分进行加密保护;其中,包头保护算法为国密算法。
16.在一些实施例中,基于quic协议的连接建立方法还包括:响应于客户端发出的客户端初始化数据包和客户端0-rtt数据包,发出服务端初始化数据包、服务端握手数据包和服务端1-rtt数据包,以完成通信;客户端0-rtt数据包中携带有应用数据;客户端0-rtt数据包基于0-rtt密钥和国密算法进行加密保护,0-rtt密钥通过第二hkdf函数派生得到。
17.在第四方面中,本披露提供一种基于quic协议的连接建立方法,包括:响应于客户端发出的客户端初始化数据包,发出服务端初始化数据包,以完成地址验证和密钥交换,具体包括:响应于客户端发出的客户端初始化数据包,发出服务端重试数据包;响应于客户端发出的客户端重试数据包,发出服务端初始化数据包,以完成地址验证和密钥交换;其中,客户端初始化数据包和服务端初始化数据包基于初始化密钥和国密算法进行加密保护,初始化密钥通过第三hkdf函数派生得到,第三hkdf函数中采用国密算法进行哈希运算;服务端重试数据包中含有令牌,服务端重试数据包基于重试密钥和国密算法进行加密保护;客户端重试数据包中携带有令牌;发出服务端握手数据包,并接收客户端发出的客户端握手数据包,以完成握手,建立连接;其中,客户端握手数据包和服务端握手数据包基于握手密钥和国密算法进行加密保护,握手密钥通过第三hkdf函数派生得到;响应于客户端1-rtt数据包,基于1-rtt密钥和国密算法对携带有应用数据的服务端1-rtt数据包进行加密保护后,将其发送至客户端,以进行通信;方法还包括:响应于客户端发出的客户端初始化数据包和客户端0-rtt数据包,发出服务端初始化数据包、服务端握手数据包和服务端1-rtt数据包,以完成通信;客户端0-rtt数据包中携带有应用数据;客户端0-rtt数据包基于0-rtt密钥和国密算法进行加密保护,0-rtt密钥通过第三hkdf函数派生得到。
18.通过如上所提供的基于quic协议的连接建立方法,能够在以quic协议建立通信连接时,使用国密算法进行数据加密,实现国密算法在quic协议中的应用,拓展了quic协议的应用范围。
19.在一些实施例中,本披露实施例通过保留对于初始化数据包加密的规范,使得服务端与客户端无论是基于国密算法还是国际算法进行数据加密,都可以完成初始化数据包的解析,从而得到握手数据包的加密密钥,进而完成握手阶段的数据包解析,进而完成握手
协商。并且通过在初始化数据包中配置加密类型信息,即在握手中协商的密码套件,使得对端能够识别后续通信阶段所采用的加密算法,并结合密钥信息完成通信阶段的应用数据解析,提高了quic协议的兼容性。
附图说明
20.通过参考附图阅读下文的详细描述,本披露示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本披露的若干实施方式,并且相同或对应的标号表示相同或对应的部分,其中:
21.图1示出了本披露一些实施例的基于quic协议的连接建立方法的流程示意图;
22.图2示出了本披露一些实施例的基于quic协议的通信交互示意图;
23.图3示出了本披露另一些实施例的基于quic协议的通信交互示意图;
24.图4示出了本披露又一些实施例的基于quic协议的通信交互示意图;
25.图5示出了本披露实施例的基于国密算法的数据包保护方法的流程示意图;
26.图6示出了本披露另一些实施例的基于quic协议的连接建立方法的流程示意图;
27.图7示出了本发明实施例的电子设备的示例性结构框图。
具体实施方式
28.下面将结合本披露实施例中的附图,对本披露实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本披露一部分实施例,而不是全部的实施例。基于本披露中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本披露保护的范围。
29.应当理解,本披露的说明书和权利要求书中使用的术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
30.还应当理解,在此本披露说明书中所使用的术语仅仅是出于描述特定实施例的目的,而并不意在限定本披露。如在本披露说明书和权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。还应当进一步理解,在本披露说明书和权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
31.如在本说明书和权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。
[0032]
下面结合附图来详细描述本披露的具体实施方式。示例性应用场景
[0033]
quic协议只需要1次往返时延(rtt,round-trip time)就可以建立可靠安全的连接,甚至在特定情况下通过0rtt即可建立连接,相对于tcp+tls的1至3次rtt要更加快捷,同时,相对于udp协议连接更加可靠。例如:在应用层实现丢包恢复、拥塞控制、加解密和多路复用等功能上,quic既能优化握手延迟,同时又完全解决内核协议更新滞后问题。
[0034]
然而,目前行业内的规范仅对如何使用国际算法实现quic协议进行了说明,而在我国境内通用的商用密码算法则是国密算法,基于国际算法实现的quic协议的国密化程度很低,难以实现大范围的应用。示例性方案
[0035]
有鉴于此,本披露实施例提供了一种基于quic协议的连接建立方案,其通过对quic协议中的握手数据包进行国密化改造,实现了国密算法在quic协议中的应用,有利于拓展quic协议的应用范围。
[0036]
下面对本披露提供的基于quic协议的连接建立方法进行说明。
[0037]
图1示出了本披露一些实施例的基于quic协议的连接建立方法的流程示意图。图2示出了本披露一些实施例的基于quic协议的通信交互示意图。
[0038]
如图1和图2所示,在步骤101中,确定当前连接为首次连接。
[0039]
quic协议的通信流程可以分为两种类型:一种是首次连接,另一种是非首次连接。
[0040]
接着,在步骤102中,向服务端发出客户端初始化数据包并接收服务端反馈的服务端初始化数据包,以完成地址验证和密钥交换。
[0041]
在本披露中,提供的一种地址验证方式如下。
[0042]
quic协议中,数据包由包头header和包体data两部分组成,其中,包头包含4个字段:标志位flags、连接id connection id、版本号quic version和包序号packet number;包体部分则是数据帧,其中的stream帧用于传输应用数据。
[0043]
建立连接时,由客户端随机产生一个目标连接id填入初始化数据包的connection id字段,用于标记当前客户端与服务端的连接。假设客户端原先使用了ip1发送了数据包,切换网络后,ip地址变更为了ip2,并再次发送了数据包,服务端根据数据包头部的connection id字段就可以判断先后数据包是来自于同一个客户端,完成地址验证,从而保证连接不会断开。
[0044]
在服务端与客户端的通信过程中,数据包的connection id字段统一使用该目标连接id,以确保连接不会断开,因此,服务端反馈的服务端初始化数据包也使用目标连接id。
[0045]
除上述使用目标连接id的地址验证方式之外,本披露还提供了另一种地址验证方式,图3示出了本披露另一些实施例的基于quic协议的通信交互示意图。如图3所示,客户端向服务端发出客户端初始化数据包并接收服务端反馈的服务端重试数据包,其中,所述服务端重试数据包中含有用于地址验证的令牌;接着,客户端向服务端发出客户端重试数据包并接收服务端反馈的服务端初始化数据包,以完成地址验证;其中,客户端重试数据包中携带有令牌,服务端基于该令牌确定客户端的一致性,从而响应于客户端重试数据包,向客户端反馈服务端初始化数据包。
[0046]
需要说明的是,客户端重试数据包和服务端重试数据包基于重试密钥和国际算法进行加密保护。
[0047]
重试数据包使用固定的重试密钥,通过aead算法进行加密保护。
[0048]
示例性地,重试数据包格式如下:
[0049]
retry packet{
[0050]
header form(1)=1,
[0051]
fixed bit(1)=1,
[0052]
long packet type(2)=3,
[0053]
unused(4),
[0054]
version(32),
[0055]
destination connection id length(8),
[0056]
destination connection id(0..160),
[0057]
source connection id length(8),
[0058]
source connection id(0..160),
[0059]
retry token(..),
[0060]
retry integrity tag(128),
[0061]
}
[0062]
重试数据包中不包含任何受保护的字段,unused字段由服务端任意填充,客户端必须忽略unused字段。
[0063]
重试完整性标签使用aead_sm4_gcm或aead_sm4_ccm进行计算。
[0064]
伪重试数据包格式如下:
[0065]
retry pseudo-packet{
[0066]
odcid length(8),
[0067]
original destination connection id(0..160),
[0068]
header form(1)=1,
[0069]
fixed bit(1)=1,
[0070]
long packet type(2)=3,
[0071]
unused(4),
[0072]
version(32),
[0073]
dcid len(8),
[0074]
destination connection id(0..160),
[0075]
scid len(8),
[0076]
source connection id(0..160),
[0077]
retry token(..),
[0078]
}
[0079]
需要说明的是,伪重试数据包实际上并不发送,其只用于计算重试数据包的tag字段。与实际发送的重试数据包相比,伪重试数据包去除了retry tag字段,增加了odcid length字段和odcid字段。
[0080]
odcid length字段表示的是原始目标连接id的长度。
[0081]
原始目标连接id指的是重试数据包响应的初始化数据包中的目标连接id。odcid length字段的存在确保有效的重试数据包只能由接收到初始化数据包的实体发送。
[0082]
进一步地,重试数据包加密保护所使用的重试密钥和随机数可以通过使用hkdf-expand-label函数,使用一随机字符串作为secret,以”quic key”和”quic iv”作为label计算得到的。
[0083]
示例性地,hkdf-expand-label函数定义如下:
[0084]
hkdf-expand-label(secret,label,context,length)=
[0085]
hkdf-expand(secret,hkdflabel,length)
[0086]
其中,hkdflabel定义如下:
[0087]
struct{
[0088]
uint16 length=length;
[0089]
opaque label《7..255》=“tls13“+label;
[0090]
opaque context《0..255》=context;
[0091]
}hkdflabel;
[0092]
其中,哈希运算采用sm3哈希函数,hkdf-expand-label函数使用0长度的context参数。
[0093]
包序号packet number用于表示数据包的上下文关系,客户端和服务端维护各自的packet number体系,并且分为三个独立的上下文空间:初始化空间、握手空间和应用数据空间,各个空间内的packet number是单调递增的。
[0094]
可以理解为,数据包在各自所属空间内被处理,例如:初始化数据包只能使用专用的初始化密钥,也只能确认初始化数据包;类似地,握手数据包只能使用专用的握手密钥,也只能确认握手数据包。通信从初始化阶段进入握手阶段后,初始化阶段使用的初始化密钥就可以被丢弃了,packet number也重新从0开始编号。
[0095]
在本披露实施例中,客户端初始化数据包和服务端初始化数据包基于初始化密钥和国际算法进行加密保护,初始化密钥通过第一hkdf函数派生得到,第一hkdf函数中采用国际算法进行哈希运算。
[0096]
hkdf函数是基于hmac的密钥衍生函数,其将初始密钥作为输入,生成一个或多个增强密钥,以提高密钥的安全强度。hkdf函数先利用hkdf-extract函数将输入的初始密钥转换成固定长度的伪随机密钥,然后利用hkdf-expand函数,将上述固定长度的伪随机密钥扩展成若干伪随机密钥。
[0097]
在本披露实施例中,初始化密钥所采用的第一hkdf函数可以采用国际算法进行哈希运算,具体可采用的国际算法类型可以参照rfc9001标准。
[0098]
初始化数据包使用从客户端的目标连接id中派生的密钥进行加密保护,初始化密钥再派生出客户端初始化密钥和服务端初始化密钥。客户端初始化密钥即客户端写密钥,服务端初始化密钥即客户端读密钥;服务端初始化密钥即服务端写密钥,客户端初始化密钥即服务端读密钥。
[0099]
示例性地,取一随机字符串作为salt,目标连接id作为输入的初始密钥,调用hkdf-extract函数,输出初始化密钥;接着把初始化密钥作为secret以及把“client in”作为label,调用hkdf-expand-lable函数,输出客户端初始化密钥;把初始化密钥作为secret以及把“server in”作为label,调用hkdf-expand-lable函数,输出服务端初始化密钥;其中涉及的哈希运算采用国际算法执行。
[0100]
由于采用行业规范的国际算法进行加密,上述初始化数据包的加密算法类型与初始化密钥是公开的,因此,通信双方都可以完成初始化数据包的解析,从而得到下一阶段的数据包的加密密钥。
[0101]
在步骤103中,响应于服务端反馈的服务端握手数据包,向服务端发出客户端握手
数据包,以完成握手,建立连接。
[0102]
其中,初始化数据包中含有加密类型信息,加密类型信息用于指示加密保护所采用的国密算法。
[0103]
具体地,该加密类型信息可以理解为握手协商的密码套件,该密码套件为国密密码套件。
[0104]
更进一步地,在服务端初始化数据包中协商好了国密密码套件,该国密密码套件对应上述初始化数据包中的加密类型信息,客户端与服务端后续采用该国密密码套件进行信息的加密保护。
[0105]
上述客户端握手数据包和服务端握手数据包基于握手密钥和国密算法进行加密保护,握手密钥通过第二hkdf函数派生得到,第二hkdf函数中采用国密算法进行哈希运算。
[0106]
类似地,第二hkdf函数先利用hkdf-extract函数将输入的初始密钥转换成固定长度的伪随机密钥,然后利用hkdf-expand函数,通过一系列的哈希运算,将上述固定长度的伪随机密钥扩展成若干伪随机密钥。区别在于,第二hkdf函数中的哈希运算采用国密算法,例如:sm3哈希函数。
[0107]
示例性的,客户端与服务端协商出共享密钥,以该共享密钥作为输入的初始密钥,利用第二hkdf函数中的hkdf-extract函数处理后,得到handshake secret,然后,利用hkdf-expand函数基于handshake secret派生出握手密钥,其中,第二hkdf函数使用sm3哈希函数。
[0108]
进一步地,连接建立过程中还包括一种非首次连接的情况,图4示出了本披露又一些实施例的基于quic协议的通信交互示意图,如图4所示,若客户端确定当前连接为非首次连接,则向服务端发出客户端初始化数据包和客户端0-rtt数据包,并接收服务端反馈的服务端初始化数据包、服务端握手数据包和服务端1-rtt数据包,以完成通信。
[0109]
其中,客户端0-rtt数据包中含有应用数据;客户端0-rtt数据包基于0-rtt密钥和国密算法进行加密保护,0-rtt密钥通过第二hkdf函数派生得到。
[0110]
对于服务端而言,发出服务端初始化数据包、服务端握手数据包和服务端1-rtt数据包后,握手协商已完成,此时1-rtt密钥已经生成。
[0111]
可以理解,若当前连接为非首次连接,则客户端本地已缓存有之前成功连接的会话信息,由此,客户端与服务端已经可以根据缓存数据确定通信所采用的加密类型信息,并且可以使用缓存数据计算出加密密钥,因此,客户端可以直接向服务端发送客户端0-rtt数据包,该客户端0-rtt数据包中可以包括client hello消息和应用数据。
[0112]
需要说明的是,加密类型信息指的是通信双方握手协商的密码套件,在本披露实施例中,该密码套件为国密密码套件。
[0113]
进一步地,客户端响应于服务端握手数据包,向服务端发出客户端握手数据包,以完成客户端的握手协商。
[0114]
以上描述的是客户端建立与服务端连接的过程,与之对应地,本披露还提供了一种服务端基于quic协议的连接建立方法,包括:响应于客户端发出的客户端初始化数据包,发出服务端初始化数据包,以完成地址验证和密钥交换;发出服务端握手数据包,并接收所述客户端发出的客户端握手数据包,以完成握手,建立连接。
[0115]
其中,客户端初始化数据包和服务端初始化数据包基于初始化密钥和国际算法进
行加密保护,初始化密钥通过第一hkdf函数派生得到,第一hkdf函数中采用国际算法进行哈希运算;初始化数据包中含有加密类型信息,加密类型信息用于指示加密保护所采用的国密算法;客户端握手数据包和服务端握手数据包基于握手密钥和国密算法进行加密保护,握手密钥通过第二hkdf函数派生得到,第二hkdf函数中采用国密算法进行哈希运算。
[0116]
上述初始化数据包和握手数据包的加密保护过程,以及初始化密钥和握手密钥的派生过程已经在前文实施例中进行了详尽的描述,此处不再展开赘述。
[0117]
与客户端建立与服务端连接的过程相对应地,服务端建立连接过程中,地址验证可以基于目标连接id进行,基于目标连接id进行地址验证的方式已经在前文实施例中进行了详细描述,此处不再赘述。地址验证也可以如图3所示,基于重试数据包中的令牌进行。
[0118]
具体地,服务端响应于客户端发出的客户端初始化数据包,发出服务端重试数据包,接着,响应于客户端发出的客户端重试数据包,发出服务端初始化数据包,以完成地址验证。
[0119]
其中,服务端重试数据包中含有令牌,服务端重试数据包基于重试密钥和国际算法进行加密保护。客户端重试数据包中携带有该令牌,服务端通过该令牌确定客户端的一致性,从而完成地址验证后,向客户端发出服务端初始化数据包。
[0120]
进一步地,本披露提供的服务端基于quic协议的连接建立方法,还包括:响应于客户端发出的客户端初始化数据包和客户端0-rtt数据包,发出服务端初始化数据包、服务端握手数据包和服务端1-rtt数据包,以完成通信。
[0121]
其中,客户端0-rtt数据包中携带有应用数据;客户端0-rtt数据包基于0-rtt密钥和国密算法进行加密保护,0-rtt密钥通过所述第二hkdf函数派生得到。
[0122]
需要说明的是,加密类型信息指的是通信双方握手协商的密码套件,在本披露实施例中,该密码套件为国密密码套件,0-rtt数据包基于0-rtt密钥和该国密密码套件进行加密保护。
[0123]
可选地,建立连接后,客户端与服务端之间还可以基于quic协议进行通信。
[0124]
如图1所示,在步骤104中,响应于通信需求,基于1-rtt密钥和国密算法,对携带有应用数据的客户端1-rtt数据包进行加密保护后,将其发送至服务端,以进行通信。
[0125]
以上描述的是客户端建立与服务端通信的过程,与之对应地,本披露还提供了一种服务端的通信方法,包括:建立连接之后,响应于客户端1-rtt数据包,基于1-rtt密钥和国密算法,对携带有应用数据的服务端1-rtt数据包进行加密保护后,将其发送至客户端,以进行通信。
[0126]
进一步地,本披露提供了一种基于国密算法的数据包保护方法,适用于上述步骤104中对客户端1-rtt数据包进行加密保护。图5示出了本披露实施例的基于国密算法的数据包保护方法的流程示意图。
[0127]
需要说明的是,上述基于国密算法的数据包保护方法同样适用于对前文实施例中的客户端握手数据包和客户端0-rtt数据包进行加密保护,因此,可以理解,前文结合图1至图4描述的特征可以类似地应用于此。
[0128]
如图5所示,在步骤501中,基于第二hkdf函数和客户端数据包的对应密钥,派生得到包体保护密钥和包头保护密钥。
[0129]
其中,客户端数据包包括:客户端握手数据包和/或客户端1-rtt数据包。
[0130]
示例性的,包体保护密钥和包头保护密钥的派生流程可以如下:
[0131]
hkdf-expand-label(secret,label,context,length)=
[0132]
hkdf-expand(secret,hkdflabel,length)
[0133]
其中,hkdflabel定义如下:
[0134]
struct{
[0135]
uint16 length=length;
[0136]
opaque label《7..255》=“tls13”+label;
[0137]
opaque context《0..255》=context;
[0138]
}hkdflabel;
[0139]
需要说明的是,上述hkdf-expand-label函数时使用0长度的context参数,使用当前数据包对应加密级别的密钥作为secret,例如:0-rtt数据包使用client_early_traffic_secret作为secret进行派生;握手数据包使用client_handshake_traffic_secret和server_handshake_traffic_secret作为secret进行派生;1-rtt数据包使用client_application_traffic_secret和server_application_traffic_secret作为secret进行派生;使用“quic key”作为label,生成包体保护密钥,使用“quic iv”生成初始化向量,使用“quic hp”生成包头保护密钥。其中,使用“quic key”和“quic hp”生成的密钥长度根据协商的aead算法和包头保护算法确定。
[0140]
需要进一步说明的是,上述client_early_traffic_secret,client_handshake_traffic_secret,server_handshake_traffic_secret,client_application_traffic_secret和server_application_traffic_secret的形成过程可以参考tls1.3协议定义的密钥派生流程,此处不再展开赘述。
[0141]
上述包体保护密钥和包头保护密钥的派生流程中所涉及的hkdf函数,其使用tls1.3协议中的hkdf-expand-label函数,使用握手协商出的密码套件中的哈希算法进行哈希运算,具体地,采用sm3哈希函数进行哈希运算。
[0142]
在步骤502中,基于aead算法和包体保护密钥对客户端数据包的包体部分进行加密保护,得到客户端包体密文。
[0143]
其中,aead算法可以采用aead_sm4_gcm或aead_sm4_ccm等aead_sm4算法,此处不作唯一限定。
[0144]
在quic协议中,包头部分字段也需要被保护,在通过aead算法对包体进行加密保护后,再进行包头保护,包头保护主要保护第一个字节的最低有效位以及包号字段。例如:对于长包头而言,第一个字节的四个最低位是有效位;对于短包头而言,第一个字节的五个最低位是有效位。
[0145]
在步骤503中,对客户端包体密文进行字段采样,得到客户端密文样本。
[0146]
示例性地,客户端密文样本是从包号开始后的4个字节开始进行取样,取样偏移量计算如下:
[0147]
#pn_offset is the start of the packet number field.
[0148]
sample_offset=pn_offset+4
[0149]
sample=packet[sample_offset..sample_offset+sample_length]
[0150]
在步骤504中,基于包头保护算法和包头保护密钥,对客户端密文样本进行加密保
护后取样,得到客户端包头保护掩码。
[0151]
具体地,将客户端密文样本和包头保护密钥作为包头保护算法的输入值,经包头保护算法加密后,取前5字节作为包头保护的掩码。
[0152]
其中,包头保护算法为国密算法。示例性地,包头保护算法采用sm4-ecb算法。
[0153]
在步骤505中,基于客户端包头保护掩码,对客户端数据包的包头部分进行加密保护。
[0154]
具体地,使用客户端包头保护掩码第一字节的最低有效位和包头第一字节的最低有效位进行异或,客户端包头保护掩码的剩余四字节和packet number异或,若packet number不足四字节,多余的掩码舍弃即可。
[0155]
与之对应地,上述基于国密算法的数据包保护方法同样适用于对服务端1-rtt数据包和服务端握手数据包进行加密保护。
[0156]
具体地,假设服务端数据包包括:服务端握手数据包和/或服务端1-rtt数据包;则服务端数据包的加密保护步骤包括:
[0157]
基于第二hkdf函数和服务端数据包的对应密钥,派生得到包体保护密钥和包头保护密钥;
[0158]
基于aead算法和包体保护密钥对服务端数据包的包体部分进行加密保护,得到服务端包体密文;
[0159]
对服务端包体密文进行字段采样,得到服务端密文样本;
[0160]
基于包头保护算法和包头保护密钥,对服务端密文样本进行加密保护后取样,得到服务端包头保护掩码;
[0161]
基于服务端包头保护掩码,对服务端数据包的包头部分进行加密保护;其中,包头保护算法为国密算法。
[0162]
服务端数据包的加密保护步骤中所采用的aead算法和包头保护算法可以参考前文实施例中客户端数据包的加密保护步骤,此处不再展开赘述。
[0163]
前文提供了一种基于quic协议的连接建立方法,其通过保留对于初始化数据包加密的规范,使得服务端与客户端无论是基于国密算法还是国际算法进行数据加密,都可以完成初始化数据包的解析,从而得到握手数据包的加密密钥,进而完成握手阶段的数据包解析,进而完成握手协商。并且通过在初始化数据包中配置加密类型信息,即握手中协商的密码套件,使得对端能够识别后续通信阶段所采用的加密算法,进而完成通信阶段的应用数据解析,提高了quic协议的兼容性。
[0164]
与前文示出的基于quic协议的连接建立方法对应地,本披露还提供了另一种基于quic协议的连接建立方法,其实现了quic协议的高度国密化改造。
[0165]
图6示出了本披露另一些实施例的基于quic协议的连接建立方法的流程示意图。
[0166]
如图6所示,在步骤601中,确定当前连接为首次连接。
[0167]
在步骤602中,向服务端发出客户端初始化数据包并接收服务端反馈的服务端初始化数据包,以完成地址验证和密钥交换。
[0168]
参照前文实施例,本实施例中地址验证可以基于目标连接id进行。也可以如图3所示,通过重试数据包进行验证,具体包括:向服务端发出客户端初始化数据包并接收服务端反馈的服务端重试数据包;向服务端发出客户端重试数据包并接收所述服务端反馈的服务
端初始化数据包,以完成地址验证。
[0169]
需要说明的是,客户端初始化数据包和服务端初始化数据包基于初始化密钥和国密算法进行加密保护,初始化密钥通过第三hkdf函数派生得到,第三hkdf函数中采用国密算法进行哈希运算。具体地,初始化数据包使用aead_sm4_ccm或aead_sm4_gcm算法进行加密保护,第三hkdf函数中采用sm3哈希函数进行哈希运算。
[0170]
示例性地,初始化密钥的派生过程如下:
[0171]
取一随机字符串,假设取“0x38762cf7f55934b34d179ae6a4c80cadccbb7f0a”作为salt,以目标连接id作为输入的初始密钥,调用hkdf-extract函数,输出初始化密钥;接着把初始化密钥作为secret以及把“client in”作为label,调用hkdf-expand-lable函数,输出客户端初始化密钥;把初始化密钥作为secret以及把“server in”作为label,调用hkdf-expand-lable函数,输出服务端初始化密钥。
[0172]
上述第三hkdf函数中使用sm3哈希函数,流程可以表示如下:
[0173]
initial_salt=0x38762cf7f55934b34d179ae6a4c80cadccbb7f0a,
[0174]
initial_secret=hkdf-extract(initial_salt,client_dst_connection_id)
[0175]
client_initial_secret=hkdf-expand-label(initial_secret,“client in”,
“”
,hash.length)
[0176]
server_initial_secret=hkdf-expand-label(initial_secret,“server in”,
“”
,hash.length)
[0177]
其中,采用的第三hkdf函数可以参考rfc5869标准,此处不再展开赘述。
[0178]
在步骤603中,响应于服务端反馈的服务端握手数据包,向服务端发出客户端握手数据包,以完成握手,建立连接。
[0179]
其中,客户端握手数据包和服务端握手数据包基于握手密钥和国密算法进行加密保护,握手密钥通过第三hkdf函数派生得到。
[0180]
在本披露实施例中,步骤603的内容与前文实施例中的步骤103一致,此处不再赘述。
[0181]
在步骤604中,响应于通信需求,基于1-rtt密钥和国密算法对携带有应用数据的客户端1-rtt数据包进行加密保护后,将其发送至服务端,以进行通信。
[0182]
在本披露实施例中,步骤604的内容与前文实施例中的步骤104一致,此处不再赘述。
[0183]
进一步地,在本实施例中,1-rtt数据包和握手数据包同样适用前文图5示出的本披露实施例的基于国密算法的数据包保护方法,即前文结合图5描述的特征可以类似地应用于此。
[0184]
进一步地,连接建立过程中还包括一种非首次连接的情况,若客户端确定当前连接为非首次连接,则向服务端发出客户端初始化数据包和客户端0-rtt数据包,并接收服务端反馈的服务端初始化数据包、服务端握手数据包和服务端1-rtt数据包,以完成通信。
[0185]
其中,客户端0-rtt数据包中携带有应用数据;客户端0-rtt数据包基于0-rtt密钥和国密算法进行加密保护,0-rtt密钥通过所述第三hkdf函数派生得到。
[0186]
上述客户端0-rtt数据包的加密保护过程可以参考前文实施例中的客户端0-rtt数据包加密保护过程,此处不再赘述。
[0187]
上述客户端0-rtt数据包同样适用前文图5示出了本披露实施例的基于国密算法的数据包保护方法,即前文结合图5描述的特征可以类似地应用于此。
[0188]
以上描述的是客户端建立与服务端建立连接的过程,与之对应地,本披露还提供了一种服务端基于quic协议的连接建立方法,包括:响应于客户端发出的客户端初始化数据包,发出服务端初始化数据包,以完成地址验证和密钥交换;发出服务端握手数据包,并接收所述客户端发出的客户端握手数据包,以完成握手,建立连接。
[0189]
其中,客户端初始化数据包和服务端初始化数据包基于初始化密钥和国密算法进行加密保护,初始化密钥通过第三hkdf函数派生得到,第三hkdf函数中采用国密算法进行哈希运算;客户端握手数据包和服务端握手数据包基于握手密钥和国密算法进行加密保护,握手密钥通过第三hkdf函数派生得到。
[0190]
进一步地,与客户端建立连接的过程相对应地,服务端建立连接过程中,地址验证可以基于目标连接id进行,也可以采用如图3所示的方式进行,具体包括:响应于客户端发出的客户端初始化数据包,发出服务端重试数据包,接着,响应于客户端发出的客户端重试数据包,发出服务端初始化数据包,以完成地址验证。
[0191]
其中,服务端重试数据包中含有令牌,服务端重试数据包基于重试密钥和国密算法进行加密保护,服务端根据客户端重试数据包中携带有的令牌确定客户端一致性。
[0192]
进一步地,连接建立过程中还包括一种非首次连接的情况,若客户端确定当前连接为非首次连接,则会向服务端发出客户端初始化数据包和客户端0-rtt数据包,而服务端响应于客户端发出的客户端初始化数据包和客户端0-rtt数据包,发出服务端初始化数据包、服务端握手数据包和服务端1-rtt数据包,以完成通信。
[0193]
其中,客户端0-rtt数据包中含有应用数据,客户端0-rtt数据包基于0-rtt密钥和国密算法进行加密保护,0-rtt密钥通过第三hkdf函数派生得到。
[0194]
有关第三hkdf函数的介绍已经在图6示出的方法中进行了详尽说明,此处不再赘述。
[0195]
需要说明的是,服务端发出服务端初始化数据包、服务端握手数据包和服务端1-rtt数据包后,对于服务端而言,已经完成与客户端的握手协商,得到1-rtt密钥。
[0196]
需要说明的是,前文提供的基于国密算法的数据包保护方法同样适用于本实施例,即,上述服务端握手数据包和服务端1-rtt数据包中的一种或多种均可以通过aead算法与包体保护密钥进行包体保护,和/或通过包头保护算法与包头保护密钥进行包头保护,其中的包头保护算法为国密算法,在包体保护密钥和包头保护密钥派生所采用的hkdf函数中,使用sm3哈希函数进行哈希运算。
[0197]
综上,本披露提供了一种基于quic协议的连接建立方法,其初始化数据包和/或重试数据包仍基于国际算法进行加密保护,从而令通信双方无论是否提前对采用的加密算法进行了协商,都能够完成初始化数据包的解析,进而保证握手协商的顺利进行,并通过在初始化数据包中配置加密类型信息,使得对端能够识别后续通信阶段所采用的加密算法,进而完成通信阶段的应用数据解析,提高了quic协议的兼容性。
[0198]
本披露还提供了一种基于quic协议的连接建立方法,其对quic协议中的五种类型数据包,包括:初始化数据包、握手数据包、1-rtt数据包、0-rtt数据包和重试数据包均进行了国密化改造,实现了对quic协议的高度国密化改造,拓展了quic协议的应用范围。
[0199]
本披露实施例还提供了一种基于quic协议的连接建立装置,其包括:服务端和客户端,其中,服务端执行上述任一项方法以与客户端建立连接,客户端执行上述任一项方法以与服务端建立连接。
[0200]
与前述功能性实施例相对应地,本发明实施例中还提供了一种如图7所示的电子设备。图7示出了本发明实施例的电子设备的示例性结构框图。
[0201]
图7所示的电子设备700,包括:处理器710;以及存储器720,存储器720上存储有可执行的程序指令,当所述程序指令由所述处理器710来执行时,使得所述电子设备实现如前文所述的任一项方法。
[0202]
在图7的电子设备700中,仅示出了与本实施例有关的组成元素。因此,对于本领域普通技术人员而言显而易见的是:电子设备700还可以包括与图7中所示的组成元素不同的常见组成元素。
[0203]
处理器710可以控制电子设备700的操作。例如,处理器710通过执行电子设备700上的存储器720中存储的程序,来控制电子设备700的操作。处理器710可以由电子设备700中提供的中央处理单元(cpu)、应用处理器(ap)、人工智能处理器芯片(ipu)等来实现。然而,本披露不限于此。在本实施方式中,处理器710可以按任何适当的方式实现。例如,处理器710可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(application specific integrated circuit,asic)、可编程逻辑控制器和嵌入微控制器的形式等等。
[0204]
存储器720可以用于存储电子设备700中处理的各种数据、指令的硬件。例如,存储器720可以存储电子设备700中的处理过的数据和待处理的数据。存储器720可存储处理器710已处理或要处理的数据集。此外,存储器720可以存储要由电子设备700驱动的应用、驱动程序等。存储器720可以是dram,但是本披露不限于此。存储器720可以包括易失性存储器或非易失性存储器中的至少一种。非易失性存储器可以包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)、闪存、相变ram(pram)、磁性ram(mram)、电阻ram(rram)、铁电ram(fram)等。易失性存储器可以包括动态ram(dram)、静态ram(sram)、同步dram(sdram)、pram、mram、rram、铁电ram(feram)等。在实施例中,存储器720可以包括硬盘驱动器(hdd)、固态驱动器(ssd)、高密度闪存(cf)、安全数字(sd)卡、微安全数字(micro-sd)卡、迷你安全数字(mini-sd)卡、极限数字(xd)卡、高速缓存(caches)或记忆棒中的至少一项。
[0205]
综上,本说明书实施方式提供的电子设备700的存储器720和处理器710实现的具体功能,可以与本说明书中的前述实施方式相对照解释,并能够达到前述实施方式的技术效果,这里便不再赘述。
[0206]
或者,本披露还可以实施为一种非暂时性机器可读存储介质(或计算机可读存储介质、或机器可读存储介质),其上存储有计算机程序指令(或计算机程序、或计算机指令代码),当所述计算机程序指令(或计算机程序、或计算机指令代码)被电子设备(或电子设备、服务器等)的处理器执行时,使所述处理器执行根据本披露的上述方法的各个步骤的部分或全部。
[0207]
虽然本文已经示出和描述了本披露的多个实施例,但对于本领域技术人员显而易见的是,这样的实施例只是以示例的方式来提供。本领域技术人员可以在不偏离本披露思
想和精神的情况下想到许多更改、改变和替代的方式。应当理解的是在实践本披露的过程中,可以采用对本文所描述的本披露实施例的各种替代方案。所附权利要求书旨在限定本披露的保护范围,并因此覆盖这些权利要求范围内的等同或替代方案。
技术特征:
1.一种基于quic协议的连接建立方法,其特征在于,包括:确定当前连接为首次连接,则向服务端发出客户端初始化数据包并接收所述服务端反馈的服务端初始化数据包,以完成地址验证和密钥交换;其中,所述客户端初始化数据包和所述服务端初始化数据包基于初始化密钥和国际算法进行加密保护,所述初始化密钥通过第一hkdf函数派生得到,所述第一hkdf函数中采用国际算法进行哈希运算;响应于所述服务端反馈的服务端握手数据包,向服务端发出客户端握手数据包,以完成握手,建立连接;其中,初始化数据包中含有加密类型信息,所述加密类型信息用于指示加密保护所采用的国密算法;所述客户端握手数据包和所述服务端握手数据包基于握手密钥和所述国密算法进行加密保护,所述握手密钥通过第二hkdf函数派生得到,所述第二hkdf函数中采用所述国密算法进行哈希运算;响应于通信需求,基于1-rtt密钥和国密算法,对携带有应用数据的客户端1-rtt数据包进行加密保护后,将其发送至服务端,以进行通信。2.根据权利要求1所述的基于quic协议的连接建立方法,其特征在于,所述地址验证的步骤包括:向服务端发出客户端初始化数据包并接收所述服务端反馈的服务端重试数据包;其中,所述服务端重试数据包中含有用于地址验证的令牌,所述服务端重试数据包基于重试密钥和国际算法进行加密保护;向服务端发出客户端重试数据包并接收所述服务端反馈的服务端初始化数据包,以完成地址验证;其中,所述客户端重试数据包中携带有所述令牌。3.根据权利要求1所述的基于quic协议的连接建立方法,其特征在于,客户端数据包包括:所述客户端握手数据包和/或所述客户端1-rtt数据包;所述客户端数据包的加密保护步骤包括:基于所述第二hkdf函数和所述客户端数据包的对应密钥,派生得到包体保护密钥和包头保护密钥;基于aead算法和所述包体保护密钥对所述客户端数据包的包体部分进行加密保护,得到客户端包体密文;对所述客户端包体密文进行字段采样,得到客户端密文样本;基于包头保护算法和所述包头保护密钥,对所述客户端密文样本进行加密保护后取样,得到客户端包头保护掩码;基于所述客户端包头保护掩码,对所述客户端数据包的包头部分进行加密保护;其中,所述包头保护算法为国密算法。4.根据权利要求1所述的基于quic协议的连接建立方法,其特征在于,还包括:确定当前连接为非首次连接,则向服务端发出客户端初始化数据包和客户端0-rtt数据包,并接收所述服务端反馈的服务端初始化数据包、服务端握手数据包和服务端1-rtt数据包,以完成通信;所述客户端0-rtt数据包中携带有应用数据;所述客户端0-rtt数据包基于0-rtt密钥和国密算法进行加密保护,所述0-rtt密钥通过所述第二hkdf函数派生得到。
5.一种基于quic协议的连接建立方法,其特征在于,包括:确定当前连接为首次连接,则向服务端发出客户端初始化数据包并接收所述服务端反馈的服务端初始化数据包,以完成地址验证和密钥交换,具体包括:向服务端发出客户端初始化数据包并接收所述服务端反馈的服务端重试数据包;向服务端发出客户端重试数据包并接收所述服务端反馈的服务端初始化数据包,以完成地址验证和密钥交换;其中,所述客户端初始化数据包和所述服务端初始化数据包基于初始化密钥和国密算法进行加密保护,所述初始化密钥通过第三hkdf函数派生得到,所述第三hkdf函数中采用国密算法进行哈希运算;所述服务端重试数据包中含有令牌,所述服务端重试数据包基于重试密钥和国密算法进行加密保护;所述客户端重试数据包中携带有所述令牌;响应于所述服务端反馈的服务端握手数据包,向服务端发出客户端握手数据包,以完成握手,建立连接;其中,所述客户端握手数据包和所述服务端握手数据包基于握手密钥和所述国密算法进行加密保护,所述握手密钥通过所述第三hkdf函数派生得到;响应于通信需求,基于1-rtt密钥和国密算法对携带有应用数据的客户端1-rtt数据包进行加密保护后,将其发送至服务端,以进行通信;所述方法还包括:确定当前连接为非首次连接,则向服务端发出客户端初始化数据包和客户端0-rtt数据包,并接收所述服务端反馈的服务端初始化数据包、服务端握手数据包和服务端1-rtt数据包,以完成通信;所述客户端0-rtt数据包中携带有应用数据;所述客户端0-rtt数据包基于0-rtt密钥和国密算法进行加密保护,所述0-rtt密钥通过所述第三hkdf函数派生得到。6.一种基于quic协议的连接建立方法,其特征在于,包括:响应于客户端发出的客户端初始化数据包,发出服务端初始化数据包,以完成地址验证和密钥交换;其中,所述客户端初始化数据包和所述服务端初始化数据包基于初始化密钥和国际算法进行加密保护,所述初始化密钥通过第一hkdf函数派生得到,所述第一hkdf函数中采用国际算法进行哈希运算;发出服务端握手数据包,并接收所述客户端发出的客户端握手数据包,以完成握手,建立连接;其中,初始化数据包中含有加密类型信息,所述加密类型信息用于指示加密保护所采用的国密算法;所述客户端握手数据包和所述服务端握手数据包基于握手密钥和所述国密算法进行加密保护,所述握手密钥通过第二hkdf函数派生得到,所述第二hkdf函数中采用所述国密算法进行哈希运算;响应于客户端1-rtt数据包,基于1-rtt密钥和国密算法,对携带有应用数据的服务端1-rtt数据包进行加密保护后,将其发送至客户端,以进行通信。7.根据权利要求6所述的基于quic协议的连接建立方法,其特征在于,所述地址验证的步骤包括:响应于客户端发出的客户端初始化数据包,发出服务端重试数据包;其中,所述服务端重试数据包中含有令牌,所述服务端重试数据包基于重试密钥和国际算法进行加密保护;
响应于客户端发出的客户端重试数据包,发出服务端初始化数据包,以完成地址验证;其中,所述客户端重试数据包中携带有所述令牌。8.根据权利要求6所述的基于quic协议的连接建立方法,其特征在于,服务端数据包包括:所述服务端握手数据包和/或所述服务端1-rtt数据包;所述服务端数据包的加密保护步骤包括:基于所述第二hkdf函数和所述服务端数据包的对应密钥,派生得到包体保护密钥和包头保护密钥;基于aead算法和所述包体保护密钥对所述服务端数据包的包体部分进行加密保护,得到服务端包体密文;对所述服务端包体密文进行字段采样,得到服务端密文样本;基于包头保护算法和所述包头保护密钥,对所述服务端密文样本进行加密保护后取样,得到服务端包头保护掩码;基于所述服务端包头保护掩码,对所述服务端数据包的包头部分进行加密保护;其中,所述包头保护算法为国密算法。9.根据权利要求6所述的基于quic协议的连接建立方法,其特征在于,还包括:响应于客户端发出的客户端初始化数据包和客户端0-rtt数据包,发出服务端初始化数据包、服务端握手数据包和服务端1-rtt数据包,以完成通信;所述客户端0-rtt数据包中携带有应用数据;所述客户端0-rtt数据包基于0-rtt密钥和国密算法进行加密保护,所述0-rtt密钥通过所述第二hkdf函数派生得到。10.一种基于quic协议的连接建立方法,其特征在于,包括:响应于客户端发出的客户端初始化数据包,发出服务端初始化数据包,以完成地址验证和密钥交换,具体包括:响应于客户端发出的客户端初始化数据包,发出服务端重试数据包;响应于客户端发出的客户端重试数据包,发出服务端初始化数据包,以完成地址验证和密钥交换;其中,所述客户端初始化数据包和所述服务端初始化数据包基于初始化密钥和国密算法进行加密保护,所述初始化密钥通过第三hkdf函数派生得到,所述第三hkdf函数中采用国密算法进行哈希运算;所述服务端重试数据包中含有令牌,所述服务端重试数据包基于重试密钥和国密算法进行加密保护;所述客户端重试数据包中携带有所述令牌;发出服务端握手数据包,并接收所述客户端发出的客户端握手数据包,以完成握手,建立连接;其中,所述客户端握手数据包和所述服务端握手数据包基于握手密钥和国密算法进行加密保护,所述握手密钥通过所述第三hkdf函数派生得到;响应于客户端1-rtt数据包,基于1-rtt密钥和国密算法对携带有应用数据的服务端1-rtt数据包进行加密保护后,将其发送至客户端,以进行通信;所述方法还包括:响应于客户端发出的客户端初始化数据包和客户端0-rtt数据包,发出服务端初始化数据包、服务端握手数据包和服务端1-rtt数据包,以完成通信;所述客户端0-rtt数据包中携带有应用数据;所述客户端0-rtt数据包基于0-rtt密钥和所述国密算法进行加密保护,所述0-rtt密钥通过所述第三hkdf函数派生得到。
技术总结
本披露公开了一种基于QUIC协议的连接建立方法。该方法包括:确定当前连接为首次连接,则向服务端发出客户端初始化数据包并接收服务端反馈的服务端初始化数据包,以完成地址验证和密钥交换;其中,客户端初始化数据包和服务端初始化数据包基于初始化密钥和国际算法进行加密保护;响应于服务端反馈的服务端握手数据包,向服务端发出客户端握手数据包,以完成握手,建立连接;其中,初始化数据包中含有加密类型信息,加密类型信息用于指示加密保护所采用的国密算法。通过上述方法能够实现国密算法在QUIC协议中的应用,拓展QUIC协议的应用范围。围。围。
技术研发人员:杨晓宇
受保护的技术使用者:中金金融认证中心有限公司
技术研发日:2023.01.12
技术公布日:2023/7/12
版权声明
本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
飞行汽车 https://www.autovtol.com/
上一篇:一种具有按摩热敷功能的手套 下一篇:一种铁路电气化线缆的放线装置的制作方法
