一种加密通信方法、装置、电子设备和存储介质转让专利

申请号 : CN202110719914.3

文献号 : CN113452705B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 宋文强刘岵

申请人 : 长春吉大正元信息技术股份有限公司

摘要 :

本发明公开了一种加密通信方法、装置、电子设备和存储介质,其中,该方法包括:确定虚拟专用网络的加密相关文件,其中,所述加密相关文件至少包括密钥交换文件、通信哈希文件以及加密规则文件;根据安全密码规则修改所述加密相关文件中的待修正密码规则;基于修改后的所述加密相关文件进行加密通信。本发明实施例可增强虚拟专用网络中的加密规则的可控性,实现虚拟专用网络中通信加密规则的改造,在不改变虚拟专用网络功能的前提下增强通信的安全性。

权利要求 :

1.一种加密通信方法,其特征在于,所述方法包括:

确定虚拟专用网络的加密相关文件,其中,所述加密相关文件至少包括密钥交换文件、通信哈希文件以及加密规则文件;

根据安全密码规则修改所述加密相关文件中的待修正密码规则;

基于修改后的所述加密相关文件进行加密通信;

所述加密相关文件包括密钥交换文件,相应的,所述根据安全密码规则修改所述加密相关文件中的待修正密码规则,包括:提取所述密钥交换文件中的功能代码块,其中,功能代码块包括公钥生成代码块、共享密钥生成代码块和公钥磁盘存储代码块中至少之一;

按照所述安全密码规则修改所述功能代码块中的所述待修正密码规则;

所述按照所述安全密码规则修改所述功能代码块中的所述待修正密码规则,包括以下至少之一:将所述公钥生成代码块修改为如下处理逻辑:按照SM2算法中的椭圆曲线的标量乘法函数确定私钥的第一公钥分量和第二公钥分量,将所述第一公钥分量和所述第二公钥分量分别转换为32字节数组,并将转换后的所述第一公钥分量和所述第二公钥分量拼接为公钥;

将所述共享密钥生成代码块修改为如下处理逻辑:将公钥拆分为所述第一公钥分量和所述第二公钥分量,将所述第一公钥分量、所述第二公钥分量和所述私钥按照SM2算法中的椭圆曲线的标量乘法函数确定第一共享密钥分量和第二共享密钥分量,将所述第一共享密钥分量和所述第二共享密钥分量转换为32字节数组,并将转换后的所述第一共享密钥分量和所述第二共享密钥分量拼接为共享密钥;

在所述公钥磁盘存储代码块中按照所述公钥修改用户配置读取函数以及用户配置设定函数中所述公钥对应的数据结构定义和读写长度。

2.根据权利要求1所述的方法,其特征在于,所述公钥的数据结构定义修改为不固定长度的字符数据结构,所述公钥的读写长度修改为64字节。

3.根据权利要求1所述的方法,其特征在于,所述加密相关文件包括通信哈希文件,相应的,所述根据安全密码规则修改所述加密相关文件中的待修正密码规则,包括:将所述通信哈希文件中的当前哈希运算调用函数替换为SM3哈希运算函数;

在所述通信哈希文件新增基于Golang的hmac标准库生成的SM3使用的哈希消息认证码函数。

4.根据权利要求1所述的方法,其特征在于,所述加密相关文件包括加密规则文件,相应的,所述根据安全密码规则修改所述加密相关文件中的待修正密码规则,包括:在所述加密规则文件中增加带关联数据的认证加密的标准加密接口,其中,所述标准加密接口至少包括密封Seal接口函数、启封Open接口函数、随机数NonceSize接口函数以及Overhead接口函数;

调整所述加密规则文件的握手过程使用的消息发起方法和消息响应方法的握手消息长度。

5.根据权利要求4所述的方法,其特征在于,所述密封Seal接口函数通过封装SM4_GCMEncrpt函数实现,以及,所述启封Open接口函数通过封装SM4‑GCMDecrypt函数实现。

6.一种加密通信装置,其特征在于,所述装置包括:

文件确定模块,用于确定虚拟专用网络的加密相关文件,其中,所述加密相关文件至少包括密钥交换文件、通信哈希文件以及加密规则文件;

文件修改模块,用于根据安全密码规则修改所述加密相关文件中的待修正密码规则;

安全通信模块,用于基于修改后的所述加密相关文件进行加密通信;

所述文件修改模块包括:

密钥功能提取单元,用于提取所述密钥交换文件中的功能代码块,其中,功能代码块包括公钥生成代码块、共享密钥生成代码块和公钥磁盘存储代码块中至少之一;

密钥功能替换单元,用于按照所述安全密码规则修改所述功能代码块中的所述待修正密码规则;

所述密钥功能替换单元具体用于:

将所述公钥生成代码块修改为如下处理逻辑:按照SM2算法中的椭圆曲线标量基线相乘函数确定私钥的第一公钥分量和第二公钥分量,将所述第一公钥分量和所述第二公钥分量分别转换为32字节数组,并将转换后的所述第一公钥分量和所述第二公钥分量拼接为公钥;

将所述共享密钥生成代码块修改为如下处理逻辑:将公钥拆分为所述第一公钥分量和所述第二公钥分量,将所述第一公钥分量、所述第二公钥分量和所述私钥按照SM2算法中的椭圆曲线的标量乘法函数确定第一共享密钥分量和第二共享密钥分量,将所述第一共享密钥分量和所述第二共享密钥分量转换为32字节数组,并将转换后的所述第一共享密钥分量和所述第二共享密钥分量拼接为共享密钥;

在所述公钥磁盘存储代码块中按照所述公钥修改用户配置读取函数以及用户配置设定函数中所述公钥对应的数据结构定义和读写长度。

7.一种电子设备,其特征在于,所述电子设备包括:

一个或多个处理器;

存储器,用于存储一个或多个程序;

当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1‑5中任一所述的加密通信方法。

8.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1‑5中任一所述的加密通信方法。

说明书 :

一种加密通信方法、装置、电子设备和存储介质

技术领域

[0001] 本发明实施例涉及信息安全技术领域,尤其涉及一种加密通信方法、装置、电子设备和存储介质。

背景技术

[0002] 随着互联网技术的发展,电子商务得到了蓬勃发展。基于互联网的电子商务加快了企业发展的速度,在企业内部分支机构迅速增长,在企业外部商业伙伴间的联系日益密切,为了加快信息交流速度,越来越多的企业允许分支机构以及商业伙伴使用虚拟专用网络(Virtual Private Network,VPN)访问自己的内部网络。
[0003] 虽然VPN具有低成本和易扩展的特性,但是也对企业内部网络安全带来了挑战。企业在使用VPN时,往往需要加密算法的参与,通过加密算法提高信息交流的安全性,保障内部网络的安全。然而,近年来越来越多的国际通用加密算法被破解,基于通用加密算法的VPN通信也面临着攻击威胁。为了提高内部网络的安全程度,需要对改进VPN通信中使用的加密规则,在不改变原有VPN功能的前提下,增强网络通信的安全性。

发明内容

[0004] 本发明提供一种加密通信方法、装置、电子设备和存储介质,以实现虚拟专用网络的加密通信,在不改变原有功能的前提下增强网络通信的安全性。
[0005] 第一方面,本发明实施例提供了一种加密通信方法,其中,该方法包括:
[0006] 确定虚拟专用网络的加密相关文件,其中,所述加密相关文件至少包括密钥交换文件、通信哈希文件以及加密规则文件;
[0007] 根据安全密码规则修改所述加密相关文件中的待修正密码规则;
[0008] 基于修改后的所述加密相关文件进行加密通信。
[0009] 第二方面,本发明实施例还提供了一种加密通信装置,其中,该装置包括:
[0010] 文件确定模块,用于确定虚拟专用网络的加密相关文件,其中,所述加密相关文件至少包括密钥交换文件、通信哈希文件以及加密规则文件;
[0011] 文件修改模块,用于根据安全密码规则修改所述加密相关文件中的待修正密码规则;
[0012] 安全通信模块,用于基于修改后的所述加密相关文件进行加密通信。
[0013] 第三方面,本发明实施例还提供了一种电子设备,该电子设备包括:
[0014] 一个或多个处理器;
[0015] 存储器,用于存储一个或多个程序;
[0016] 当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如本发明实施例中任一所述的加密通信方法。
[0017] 第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如本发明实施例中任一所述的加密通信方法。
[0018] 本发明实施例,通过确定虚拟专用网络使用的加密相关文件,该加密相关文件至少包括密钥交换文件、通信哈希文件以及加密规则文件,按照安全密码规则修改加密相关文件中的待修正密码规则,使用修正后的加密相关文件进行加密通信,实现虚拟专用网络加密规则的改造,可在不改变虚拟专用网络功能的前提下增强通信的安全性。

附图说明

[0019] 图1是本发明实施例一提供的一种加密通信方法的流程图;
[0020] 图2是本发明实施例二提供的一种加密通信方法的流程图;
[0021] 图3是本发明实施例二提供的一种功能代码块的修改示例图;
[0022] 图4是本发明实施例二提供的一组椭圆曲线的标量乘法函数的示例图;
[0023] 图5是本发明实施例三提供的一种加密通信装置的结构示意图;
[0024] 图6是本发明实施例四提供的一种电子设备的结构示意图。

具体实施方式

[0025] 下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构,此外,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
[0026] 实施例一
[0027] 图1是本发明实施例一提供的一种加密通信方法的流程图,本实施例可适用于虚拟专用网络中进行加密通信情况,该方法可以由加密通信装置来执行,该装置可以采用硬件和/或软件的方式来实现,参见图1,本发明实施例提供的方法具体包括如下步骤:
[0028] 步骤110、确定虚拟专用网络的加密相关文件,其中,加密相关文件至少包括密钥交换文件、通信哈希文件以及加密规则文件。
[0029] 其中,虚拟专用网络可以是在公用网络上建立的专用网络,该专用网络可以进行加密通信,虚拟专用网络属于远程访问技术中的一种。虚拟专用网络的加密通信功能可以由一系列的代码文件支持,可以包括密钥交换文件、通信哈希文件以及加密规则文件等,其中,密钥交换文件可以是存储有密钥交换实现规则的文件,密钥交换可以是指通过双方交换数据建立共享密钥的过程。通信哈希文件可以是存储通信过程使用的哈希处理规则的代码文件,通信哈希文件可以包括一种或多种哈希处理方法,常见的哈希处理方法可以包括blake2s、SM3等。加密规则文件可以是用于存储加密解密规则的代码文件,该代码文件可以用于通信数据的加解密。
[0030] 在本发明实施例中,可以在终端设备上确定虚拟专用网络的功能文件,可以在该功能文件中确定出与加密通信功能相关的密钥交换文件、通信哈希文件以及加密规则文件等加密相关文件。可以理解的是,由于不同种类的虚拟专用网络的功能文件的开发过程不同,密钥交换文件、通信哈希文件以及加密规则文件可以存储在一个相同的代码文件,也可以存储在不同的多个代码文件中。
[0031] 步骤120、根据安全密码规则修改加密相关文件中的待修正密码规则。
[0032] 其中,安全密码规则可以是加密通信使用的规则,安全密码规则可以是现有的加密通信规则,也可以是用户自定义的加密通信规则,安全密码规则的加密规则对于用户可控,安全密码规则可以包括密钥交换规则、哈希处理规则和加解密规则等。待修正密码规则可以是虚拟专用网络中原有的加密通信规则。
[0033] 具体的,可以在各加密相关文件中查找待修正密码规则对应的代码块,可以使用安全密码规则对该代码块的内容进行替换,使得替换后的代码块可以实现安全密码规则对应的加密通信逻辑。
[0034] 步骤130、基于修改后的加密相关文件进行加密通信。
[0035] 在本发明实施例中,在虚拟专用网络中,可以通过调用修改后的加密相关文件实现密钥交换、哈希通信以及通信数据加解密等过程,从而实现虚拟专用网络的加密通信。
[0036] 本发明实施例,通过获取虚拟专用网络的加密相关文件,该加密相关文件包括密钥交换文件、通信哈希文件和加密规则文件等,将加密相关文件中的待正在密码规则修改为安全密码规则,按照修正后的加密相关文件实现加密通信,可增强虚拟专用网络中的加密规则的可控性,实现虚拟专用网络中通信加密规则的改造,在不改变虚拟专用网络功能的前提下增强通信的安全性。
[0037] 实施例二
[0038] 图2是本发明实施例二提供的一种加密通信方法的流程图,本发明实施例是在上述发明实施例基础上的具体化,参见图2,本发明实施例提供的加密通信方法可以包括如下步骤:
[0039] 步骤210、确定虚拟专用网络的加密相关文件,其中,加密相关文件至少包括密钥交换文件、通信哈希文件以及加密规则文件。
[0040] 步骤220、提取密钥交换文件中的功能代码块,其中,功能代码块包括公钥生成代码块、共享密钥生成代码块和公钥磁盘存储代码块中至少之一。
[0041] 其中,功能代码块可以是使用开发语言生成的源文件,可以由一组由字符、符号或信号码元表示信息处理过程,密钥交换文件中的功能代码块可以实现密钥交换功能的代码块,功能代码块可以包括公钥生成代码块、共享密钥代码块和公钥磁盘代码块中至少一种,公钥生成代码可以包括生成加密通信使用的加密公钥的代码,共享密钥代码可以包括生成通信双方共同使用的公钥的代码,公钥磁盘代码块可以包括在磁盘中存储和读取公钥的代码。
[0042] 在本发明实施例中,在获取到密钥交换文件后,可以在密钥交换文件中提取公钥生成代码块、共享密钥代码块以及公钥磁盘存储代码块中的一种或者多种,其中,提取功能代码块的方式可以使用字符匹配或者文字识别的方式,例如,可以预先存储公钥生成代码块、共享密钥代码块和公钥磁盘存储代码块的类名或者方法名,可以基于类名或者方法进行字符匹配,可以将类名或者方法名后面的代码块作为功能代码块。又例如,可以通过对密钥交换文件中的功能代码块的注解文字进行识别,根据不同的注解内容确定出与该注解关联的代码块作为功能代码块。
[0043] 步骤230、按照安全密码规则修改功能代码块中的待修正密码规则。
[0044] 在本发明实施例中,可以在功能代码块中使用安全密码规则替换原有的待修正密码规则,其中,安全密码规则可以是用户自定义的通信加密规则或者经过安全认证的商用通信加密规则。示例性的,可以在功能代码块中通过字符匹配的方式获取各待修正密码规则的存储位置,并将安全密码规则存储到该存储位置以实现待修正密码规则的替换。
[0045] 在一个示例性的实施方式中,参见图3,按照安全密码规则修改功能代码块中的待修正密码规则,可以包括以下步骤:
[0046] 步骤2301、将公钥生成代码块修改为如下处理逻辑:按照SM2算法中的椭圆曲线的标量乘法函数确定私钥的第一公钥分量和第二公钥分量,将第一公钥分量和第二公钥分量分别转换为32字节数组,并将转换后的第一公钥分量和第二公钥分量拼接为公钥。
[0047] 在本发明实施例中,可以对功能代码块中的公钥生成代码块修改为SM2算法的椭圆曲线标量基线相乘函数的调用过程,该函数可以将输入的私钥处理为第一公钥分量和第二公钥分量,其中,第一公钥分量和第二公钥分量可以相当于原始的公钥生成代码块生成的公钥,可以将第一公钥分量和第二公钥分量分别转换为32字节数组,然后将两个32字节数值拼接为一个64为字节数组作为公钥,可以理解的是,将第一公钥分量和第二公钥分量拼接的方式可以包括第一公钥分量和第二公钥分量首位相连,也可以将第一公钥分量分为多段,并将各段分别插入到第二公钥分量。
[0048] 步骤2302、将共享密钥生成代码块修改为如下处理逻辑:将公钥拆分为第一公钥分量和第二公钥分量,将第一公钥分量、第二公钥分量和私钥按照SM2算法中的椭圆曲线的标量乘法函数确定第一共享密钥分量和第二共享密钥分量,将第一共享密钥分量和第二共享密钥分量转换为32字节数组,并将转换后的第一共享密钥分量和第二共享密钥分量拼接为共享密钥。
[0049] 其中,共享密钥可以是在数据通信时接收端与发送端临时协商的密钥,可以用于加密通信信息,共享密钥可以基于公钥生成。
[0050] 在本发明实施例中,还可以修改共享密钥生成代码块,修改后的处理逻辑可以为将公钥拆分为第一公钥分量以及第二公钥分量,可以理解的是,公钥拆分的方式可以与密钥生成代码块中公钥拼接的方式相对应,可以调用SM2算法中的椭圆曲线的标量乘法函数,将私钥、第一公钥分量和第二公钥分量转换为第一共享密钥分量和第二共享密钥分量,其中,第一共享密钥分量和第二共享密钥分量可以为一组椭圆曲线分量,第一共享密钥分量和第二共享密钥分量可以表示椭圆曲线中一个位置点的横纵坐标。可以将生成的第一共享密钥分量和第二共享密钥分量分别转换为32字节数组并拼接为一个64字节数组的共享密钥,共享密钥的拼接方式可以采取与密钥生成代码块中的公钥拼接方式相同。
[0051] 具体的,椭圆曲线的标量乘法函数可以是SM2算法中实现加密通信的核心操作之一,可以基于输入的一组公钥生成另一组数据作为共享密钥,该公钥可以包括第一公钥分量和第二公钥分量,可以表示椭圆曲线中一个位置点的横纵坐标,而共享密钥可以由第一共享密钥分量和第二共享密钥分量组成,可以表示椭圆曲线中另一个位置点,该位置点与代表公钥的位置点存在关联关系,例如,一个位置点可以为椭圆曲线乘法的积,另一个位置点可以为椭圆曲线乘法的乘数。椭圆曲线的乘法函数的处理逻辑可以是对于给定曲线E以及该曲线上的一点P(公钥),在椭圆曲线E计算乘法操作Q=kP,即k个相同的点P相加的结果确定出点Q(共享密钥)。参见图4,该图示出了椭圆曲线标量乘法中Q=P+P+P=2P+P=3P的示例。目前常见的椭圆曲线标量乘法的实现方式可以包括二进制/m进制方法、固定窗口法、滑动窗口法等。一种SM2的椭圆曲线标量乘法函数的执行过程可以包括:
[0052] 输入:比特串Z,整数klen,klen表示共享密钥的位长;
[0053] 输出:位长为klen的共享密钥比特串K。
[0054] 1)初始化一个32位构成的计数器ct==0X00000001;
[0055] 2)对i从1到klen/v下取整的值执行:
[0056] 2.1)计算Hai=HV(Z||ct);
[0057] 2.2)ct++;
[0058] 3)若klen/v是整数,令 否则,令 为 最左边的 比特;
[0059] 4)令
[0060] 步骤2303、在公钥磁盘存储代码块中按照公钥修改用户配置读取函数以及用户配置设定函数中公钥对应的数据结构定义和读写长度。
[0061] 具体的,在公钥生成代码块中公钥以及共享密钥的生成方法发生改变时,公钥的存储长度可以发生变换,为了保证磁盘存储正确,可以对公钥磁盘存储代码块进行修改,可以将用户配置读取函数以及用户配置设定函数中的原有公钥的数据结构定义和读写长度修改为与当前公钥对应的数据结构定义和读写长度。其中,用户配置读取函数可以是安全通信过程中对用户配置进行读取的处理函数,该用户配置读取函数中可以涉及用户的公钥的读取,用户配置设定函数可以是安全通信过程中对用户进行配置的处理函数,该用户配置设定函数可以对用户的公钥进行存储。其中,数据结构定义可以是磁盘中存储公钥的特定数据类型以及对应的数据操作,而读写长度可以是磁盘中公钥的存储空间占用长度。
[0062] 可以理解的是,按照安全密码规则修改功能代码块中的待修正密码规则的过程中,可以仅执行步骤2301‑步骤2303中一种或者两种,例如,公钥生成代码块修改后使用的公钥的读写长度和数据结构定义与待修正密码规则中原有的公钥的读写长度以及数据结构定义相同时,无需执行步骤2303,实现对用户配置读取函数以及用户配置设定函数中公钥对应的数据结构定义和读写长度的修改。步骤2301‑2303为修改待修正密码规则的过程,而修改后的公钥生成代码块、共享密钥生成代码块、公钥磁盘存储代码块在加密通信过程中并非顺序调用,例如,接收端和发送端协商公钥时,可以调用公钥生成代码块生成公钥;在公钥存储时可以使用公钥磁盘存储代码块实现公钥的存储和读取;在进行安全通信时,可以调用共享密钥生成代码块生成共享密钥进行安全通信。
[0063] 步骤240、将通信哈希文件中的当前哈希运算调用函数替换为SM3哈希运算函数。
[0064] 其中,SM3哈希运算函数可以主要用于数字签名以及验证,消息认证码生成以验证,随机数生成等,具有良好的安全性。SM3哈希运算函数可以分为位填充以及计算过程两个阶段组成。
[0065] 在本发明实施例中,可以将通信哈希文件中当前使用的哈希运算调用函数替换为SM3哈希运算函数,其中,当前哈希运算调用可以为虚拟专用网络中现有的哈希运算函数,例如,blakes2S、MD5、SHA‑1、SHA‑224等。
[0066] 步骤250、在通信哈希文件新增基于Golang的hmac标准库生成的SM3使用的哈希消息认证码函数。
[0067] 具体的,由于SM3哈希算法不支持密钥相关的哈希运算消息认证码(Hash‑based Message Authentication Code,HMAC)功能,可以在通信哈希文件中增加hmac标准库,该hmac标准库可以基于Golang语言生成,hmac标准库中可以由一个或者多个执行函数组成,可以共同实现哈希运算消息认证码的生成、验证和存储等操作。可以理解的是,通信哈希文件中的hmac标准库可以不限于Golang语言的hmac标准库,还可以包括Python语言的hmac标准库甚至是自定义的hmac标准库。
[0068] 步骤260、在加密规则文件中增加带关联数据的认证加密的标准加密接口,其中,标准加密接口至少包括密封Seal接口函数、启封Open接口函数、随机数NonceSize接口函数以及Overhead接口函数。
[0069] 在本发明实施例中,可以在加密规则文件中增强带关联数据的认证加密(Authenticated Encryption with Associated Data,AEAD)标准加密接口,该标准加密接口可以对密文数据的隐私性和完整性进行保证,还可以对未加密的关联数据的完整性进行包装,关联数据可以包括消息的长度和消息的编码方式等,该标准加密接口可以包括密封Seal接口函数、启封Open接口函数、随机数NonceSize接口函数以及Overhead接口函数等,其中,密封Seal()接口函数可以用于使用关联数据add和共享密钥key和nonce加密明文pt,产生密文ct以及标签tag,启封Open接口函数可以用于使用关联数据add和共享密钥key和nonce解密密文ct,产生明文pt,其中,需要验证密文tg和标签tag是否有效。而随机数NonceSize接口函数以及Overhead接口函数可以在密钥加密过程中生成随机数以及确定加密负载。
[0070] 步骤270、调整加密规则文件的握手过程使用的消息发起方法和消息响应方法的握手消息长度。
[0071] 具体的,由于加密规则文件中使用的共享密钥的生成方式发生了改变,而握手过程(handshake)会对消息长度进行验证,可以对消息发起方法和消息响应方法中的握手消息长度进行调整,其中,握手消息长度可以是在握手过程中被检测的消息的长度临界值,例如,原有消息长度为32字节,共享密钥被更改为64字节,可以将消息发起方法和消息响应方法中被验证的握手消息长度更改为64字节。
[0072] 本发明实施例,通过确定虚拟专用网络的密钥交换文件、通信哈希文件、加密规则文件等加密相关文件,提取密钥交换文件中的功能代码块,将功能代码块中的带修正密码规则替换为安全密码规则,在通信哈希文件中将当前韩信运算调用函数替换为SM3哈希运算函数,并新增SM3使用的哈希消息认证码函数,该函数基于Golang的hmac标准库生成,在加密规则文件中新增带关联数据的标准加密接口以及调整握手过程使用的消息发起方法和消息响应方法的握手消息长度,实现虚拟专用网络加密规则的改造,可在不改变虚拟专用网络功能的前提下增强通信的安全性。
[0073] 进一步的,在上述发明实施例的基础上,所述共享密钥的数据结构定义修改为不固定长度的字符数据结构,所述共享密钥的读写长度修改为64字节。
[0074] 具体的,可以在公钥磁盘存储代码块中将用户配置读取函数以及用户配置设定函数中的共享密钥的数据结构定义替换为不固定长度的字符数据结构,以及将读写长度替换为64字节。
[0075] 进一步的,在上述发明实施例的基础上,所述方法中密封Seal接口函数通过封装SM4_GCMEncrpt函数实现,以及,所述启封Open接口函数通过封装SM4‑GCMDecrypt函数实现。
[0076] 在本发明实施例中,密封Seal接口函数可以是对SM4中的SM4_GCMEncrpt函数封装形成,可以通过密钥、nonce以及明文计算出密文,并生成对应的标签tag附加在密文后返回。而启封Open接口函数可以是对SM4中的SM4_GCMDecrypt函数封装形成,可以将消息分离为密文和tag,使用密钥、密文以及nonce计算出明文以及tag,比较计算出的tag与分离出的tag是否匹配,从而验证密文是否正确。
[0077] 在一个示例性的实施方式中,以改造Wireguard虚拟专用网络的加密通信方法为例,可以将现有支持的加密通信规则更换为国密算法,该方法可以包括如下步骤:
[0078] 1、通过改造Wireguard虚拟专用网络的密钥交换过程,使其支持SM2/ECDH。
[0079] SM2和Curve25519在系统层面(非算法层面)的主要区别在于公钥的存储形式,Curve25519是一个32字节数组,而SM2是X,Y两个分量,分别是32字节数组。针对这个变化的改造包括:从私钥导出公钥、共享密钥生成、公钥磁盘存取。
[0080] 1)从私钥导出公钥
[0081] 在“noise框架辅助功能”文件中,对公钥生成函数进行如下改造:通过调用SM2的椭圆曲线标量基线相乘函数,以SM2私钥作为输入,计算出SM2公钥的X,Y分量,然后把X,Y分量分别转换成32字节数组,并拼接成一个64字节数组返回。
[0082] 2)共享密钥生成
[0083] 在“noise框架辅助功能”文件中,对“生成共享密钥函数”进行如下改造:首先将输入的64字节数组公钥拆分成2个32字节数组,并转换为SM2椭圆曲线公钥的X,Y分量;然后调用SM2椭圆曲线的标量乘法函数,以SM2私钥sk,和刚刚计算出的X,Y作为输入计算出新的SM2椭圆曲线分量X1,Y1;之后把X1,Y1分量分别转换成32字节数组,并拼接成一个64字节数组返回。
[0084] 3)公钥磁盘存取
[0085] Wireguard默认配置中均使用32字节数组以及对应的Base64编码来存储Curve25519公钥信息,在“用户交互API”文件中,对“读取用户配置”和“设定用户配置”两个函数中关于公钥的磁盘读取、磁盘写入的数据结构定义以及读写长度进行调整。Wireguard原有公钥在磁盘文件的存储格式为:
[0086] publickey=12ef...ffef
[0087] 等号后部为固定的32字节的16进制数字,全部小写。为了适应SM2的X,Y分两形式,存储格式调整为不固定长度,由程序判断公钥类型,如果长度为64字节,则当作SM2的X,Y分量读入。
[0088] 2、Wireguard通信过程的哈希算法是blake2s,改造替换为SM3摘要算法。
[0089] blake2s替换为SM3算法的主要修改主要有两个方面:
[0090] 1)将所有的blake2s‑256的哈希运算调用替换为标准的SM3哈希运算调用,输入是字节数组,输出是32字节哈希值(blake2s‑256与SM3的哈希长度相同,都为256比特);
[0091] 2)Wireguard用到了blake2s的128比特hmac功能,而SM3并不具备hmac功能,需要为结合Golang的hmac标准库,生成SM3‑hmac函数。
[0092] 3、Wireguard对称加密采用了chacha20‑poly1305算法,通过改造替换为SM4‑GCM。
[0093] 使用SM4‑GCM算法替代Wireguard中的chacha20‑poly1305算法的主要改造分为两部分:一部分是SM4‑GCM支持AEAD标准接口;一部分是适配chacha20‑poly1305和SM4算法切换导致的消息长度变化。
[0094] 1)SM4‑GCM支持AEAD:
[0095] a.Wireguard使用了标准的AEAD接口,包括4个接口函数Seal(),Open(),NonceSize()和Overhead()。Seal()函数是对SM4_GCMEncrypt()函数的包装,通过密钥、nonce、明文计算出密文之后,将mac tag附加在密文后面一并返回。
[0096] b.Open()函数是对SM4_GCMDecrypt()函数的包装,首先分离密文和tag,然后通过密钥、密文、nonce计算出明文,然后比较计算输出的tag和刚分离出来的tag是否匹配,匹配则校验成功,否则返回失败。
[0097] 2)Wireguard对所有handshake消息的长度都有严格的检查,由于算法替换的原因,对于handshake过程中的MessageInitiation和MessageResponse需要适当的调整,否则会校验失败。
[0098] 实施例三
[0099] 图5是本发明实施例三提供的一种加密通信装置的结构示意图,该装置可以集成在计算机设备中,例如,服务器、个人电脑以及移动终端等,图5示出的装置可执行本发明任意实施例所提供的加密通信方法,具备执行方法相应的功能模块和有益效果,该装置可以由软件和/或硬件实现,具体包括:文件确定模块301、文件修改模块302以及安全通信模块303。
[0100] 文件确定模块301,用于确定虚拟专用网络的加密相关文件,其中,所述加密相关文件至少包括密钥交换文件、通信哈希文件以及加密规则文件。
[0101] 文件修改模块302,用于根据安全密码规则修改所述加密相关文件中的待修正密码规则。
[0102] 安全通信模块303,用于基于修改后的所述加密相关文件进行加密通信。
[0103] 本发明实施例,通过文件确定模块获取虚拟专用网络的加密相关文件,该加密相关文件包括密钥交换文件、通信哈希文件和加密规则文件等,文件修改模块将加密相关文件中的待正在密码规则修改为安全密码规则,安全通信模块按照修正后的加密相关文件实现加密通信,可增强虚拟专用网络中的加密规则的可控性,实现虚拟专用网络中通信加密规则的改造,在不改变虚拟专用网络功能的前提下增强通信的安全性。
[0104] 进一步的,在上述发明实施例的基础上,所述文件修改模块302包括:
[0105] 密钥功能提取单元,用于提取所述密钥交换文件中的功能代码块,其中,功能代码块包括公钥生成代码块、共享密钥生成代码块和公钥磁盘存储代码块中至少之一。
[0106] 密钥功能替换单元,用于按照所述安全密码规则修改所述功能代码块中的所述待修正密码规则。
[0107] 进一步的,在上述发明实施例的基础上,所述密钥功能替换单元具体用于:
[0108] 将所述公钥生成代码块修改为如下处理逻辑:按照SM2算法中的椭圆曲线标量基线相乘函数确定私钥的第一公钥分量和第二公钥分量,将所述第一公钥分量和所述第二公钥分量分别转换为32字节数组,并将转换后的所述第一公钥分量和所述第二公钥分量拼接为公钥;
[0109] 将所述共享密钥生成代码块修改为如下处理逻辑:将公钥拆分为所述第一公钥分量和所述第二公钥分量,将所述第一公钥分量、所述第二公钥分量和所述私钥按照SM2算法中的椭圆曲线的标量乘法函数确定第一共享密钥分量和第二共享密钥分量,将所述第一共享密钥分量和所述第二共享密钥分量转换为32字节数组,并将转换后的所述第一共享密钥分量和所述第二共享密钥分量拼接为共享密钥;
[0110] 在所述公钥磁盘存储代码块中按照所述公钥修改用户配置读取函数以及用户配置设定函数中所述公钥对应的数据结构定义和读写长度。
[0111] 进一步的,在上述发明实施例的基础上,所述密钥功能替换单元中共享密钥的数据结构定义修改为不固定长度的字符数据结构,所述共享密钥的读写长度修改为64字节。
[0112] 进一步的,在上述发明实施例的基础上,所述文件修改模块302还包括:
[0113] 哈希功能替换单元,用于将所述通信哈希文件中的当前哈希运算调用函数替换为SM3哈希运算函数。
[0114] 功能新增单元,用于在所述通信哈希文件新增基于Golang的hmac标准库生成的SM3使用的哈希消息认证码函数。
[0115] 进一步的,在上述发明实施例的基础上,所述文件修改模块302还包括:
[0116] 接口配置单元,用于在所述加密规则文件中增加带关联数据的认证加密的标准加密接口,其中,所述标准加密接口至少包括密封Seal接口函数、启封Open接口函数、随机数NonceSize接口函数以及Overhead接口函数;
[0117] 消息调整单元,用于调整所述加密规则文件的握手过程使用的消息发起方法和消息响应方法的握手消息长度。
[0118] 进一步的,在上述发明实施例的基础上,所述接口配置单元中所述密封Seal接口函数通过封装SM4_GCMEncrpt函数实现,以及,所述启封Open接口函数通过封装SM4‑GCMDecrypt函数实现。
[0119] 实施例四
[0120] 图6是本发明实施例四提供的一种电子设备的结构示意图,如图5所示,该电子设备包括处理器40、存储器41、输入装置42和输出装置43;电子设备中处理器40的数量可以是一个或多个,图6中以一个处理器40为例;电子设备中的处理器40、存储器41、输入装置42和输出装置43可以通过总线或其他方式连接,图6中以通过总线连接为例。
[0121] 存储器41作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的加密通信方法对应的程序指令/模块(例如,加密通信装置中的文件确定模块301、文件修改模块302以及安全通信模块303)。处理器40通过运行存储在存储器41中的软件程序、指令以及模块,从而执行电子设备的各种功能应用以及数据处理,即实现上述的加密通信方法。
[0122] 存储器41可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器41可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器41可进一步包括相对于处理器40远程设置的存储器,这些远程存储器可以通过网络连接至电子设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
[0123] 输入装置42可用于接收输入的数字或字符信息,以及产生与电子设备的用户设置以及功能控制有关的键信号输入。输出装置43可包括显示屏等显示设备。
[0124] 实施例五
[0125] 本发明实施例五还提供一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行一种加密通信方法,该方法包括:
[0126] 确定虚拟专用网络的加密相关文件,其中,所述加密相关文件至少包括密钥交换文件、通信哈希文件以及加密规则文件;
[0127] 根据安全密码规则修改所述加密相关文件中的待修正密码规则;
[0128] 基于修改后的所述加密相关文件进行加密通信。
[0129] 当然,本发明实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的方法操作,还可以执行本发明任意实施例所提供的加密通信方法中的相关操作。
[0130] 通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(Read‑Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
[0131] 值得注意的是,上述加密通信装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
[0132] 注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。