一种基于国密算法实现IPsec‑VPN的方法与流程

文档序号:12131453阅读:1978来源:国知局
一种基于国密算法实现IPsec‑VPN的方法与流程

本发明提供了一种实现IPsec-VPN的方法,尤其是一种基于国密算法实现IPsec-VPN的方法。



背景技术:

随着密码技术和计算技术的发展,1024位RSA公钥密码算法正面临日益严重的安全威胁,国密SM2算法相比RSA算法具有如下优势:签名速度和密钥对生成速度都远快于RSA;国密SM2算法的单位安全强度高于RSA算法。为保障重要经济系统密码应用的安全,防止出现非自主密码算法受到攻击导致重要经济系统敏感数据泄露、危害国家安全等影响,国密局推荐使用国产密码算法,包括非对称加密算法SM2、哈希算法SM3和对称加密算法SM4。

要使用国密算法就涉及到算法扩展的问题,算法扩展分两种情况:一是在用户层的算法扩展,二是内核层的算法扩展。用户层的算法扩展,通常的做法就是首先实现需要扩展的算法,然后在软件代码中调用原有算法的地方替换成调用扩展的算法,这样使用软件算法尚可,但是如果要使用硬件算法,各个厂家应用程序接口不统一,不能屏蔽硬件之间的差异性,就需要在软件代码中每个调用硬件算法接口的地方修改接口函数名,这样毫无疑问会增加开发者的工作量,也不利于软件代码的维护;内核层的算法扩展,通常的做法是首先在内核代码里实现需要扩展的算法,然后在内核中调用算法的地方替换成调用扩展的算法,最后进行内核的编译,这样生成的内核会很大,而且要在现有的内核中添加很少的功能,都要重新编译整个内核,在系统中进行内核的更新,更新内核必然会导致整个系统功能暂停,很不利于现场业务的持续性开展。



技术实现要素:

本发明要解决的技术问题是现有的国密算法扩展在用户层存在应用程序接口不统一的问题,在内核层存在占用内核空间且需要重新编译系统内核的问题。

为了解决上述技术问题,本发明提供了一种基于国密算法实现IPsec-VPN的方法,其特征在于,包括用户层算法扩展和内核层算法扩展,其中,

用户层算法扩展包括如下步骤:

步骤1.1,建立加密库和加密引擎库,在加密引擎库中存储SM2加密引擎,在加密库中存储SM2算法接口;

步骤1.2,动态加载加密引擎库,根据加密需要在加密引擎库中选择SM2加密引擎,并利用SM2加密引擎调用加密库中的SM2算法接口;

内核层算法扩展包括如下步骤:

步骤2.1,构建国密算法驱动模块,根据系统内核模块的GPL兼容许可权,对构建的国密算法驱动模块进行许可申明;

步骤2.2,加载国密算法驱动模块,根据加密需要在系统内核动态加载时执行国密算法驱动模块,注册国密SM3算法结构体和国密SM4算法结构体,利用国密SM3算法结构体实现SM3算法接口的加载初始化,利用国密SM4算法结构体实现对国密SM4算法接口的加载初始化;

步骤2.3,应用国密算法驱动模块,利用国密算法驱动模块在系统内核中实现IPsec-VPN保护分组流的功能;

步骤2.4,卸载国密算法驱动模块,在应用加密完成后,注销国密SM4算法结构体和国密SM3算法结构体,从而实现SM3算法接口和SM4算法接口的卸载。

在用户层采用加密引擎机制,不需要改动系统内核代码,只需要定义一个加密库和加密引擎库,在加密引擎库中实现需要扩展的密码算法接口,在使用前进行动态加载即可,能够透明地使用第三方提供的软件加密库或者硬件加密设备进行加密,非常方便;在内核层采用将扩展的算法功能实现模块化,在需要的时候在系统中动态地加载,这样做的好处是,只需要在系统内核中增加少量的代码,模块本身不编译进内核,从而控制了内核的大小,模块一旦被加载,将和系统内核其它的部分完全一样,系统内核可以直接调用模块所实现的功能,同时,系统内核只需要升级一次,模块和系统内核分开,其自身功能有问题时也不需要重新编译系统内核来升级内核。

作为本发明的进一步限定方案,国密算法驱动模块为系统内核加密框架的一部分,用于系统内核自带的IPsec模块的加载调用。国密算法驱动模块作为系统内核加密框架的一部分,能够直接被系统内核自带的IPsec模块的加载调用,使用方便灵活。

本发明的有益效果在于:(1)在用户层采用加密引擎机制,不需要改动系统内核代码,只需要定义一个加密库和加密引擎库,在加密引擎库中实现需要扩展的密码算法接口,在使用前进行动态加载即可,能够透明地使用第三方提供的软件加密库或者硬件加密设备进行加密,非常方便;(2)在内核层采用将扩展的算法功能实现模块化,在需要的时候在系统中动态地加载,这样做的好处是,只需要在系统内核中增加少量的代码,模块本身不编译进内核,从而控制了内核的大小,模块一旦被加载,将和系统内核其它的部分完全一样,系统内核可以直接调用模块所实现的功能,同时,系统内核只需要升级一次,模块和系统内核分开,其自身功能有问题时也不需要重新编译系统内核来升级内核。

附图说明

图1为本发明的openssl引擎工作流程示意图;

图2为本发明的IPsec-VPN实现框架示意图。

具体实施方式

本发明公开了一种基于国密算法实现IPsec-VPN的方法,包括用户层算法扩展和内核层算法扩展,其中,

用户层算法扩展包括如下步骤:

步骤1.1,建立加密库和加密引擎库,在加密引擎库中存储SM2加密引擎,在加密库中存储SM2算法接口;

步骤1.2,动态加载加密引擎库,根据加密需要在加密引擎库中选择SM2加密引擎,并利用SM2加密引擎调用加密库中的SM2算法接口;

内核层算法扩展包括如下步骤:

步骤2.1,构建国密算法驱动模块,根据系统内核模块的GPL兼容许可权,对构建的国密算法驱动模块进行许可申明;

步骤2.2,加载国密算法驱动模块,根据加密需要在系统内核动态加载时执行国密算法驱动模块,注册国密SM3算法结构体和国密SM4算法结构体,利用国密SM3算法结构体实现SM3算法接口的加载初始化,利用国密SM4算法结构体实现对国密SM4算法接口的加载初始化;

步骤2.3,应用国密算法驱动模块,利用国密算法驱动模块在系统内核中实现IPsec-VPN保护分组流的功能,国密算法驱动模块为系统内核加密框架的一部分,可被系统内核自带的IPsec模块的直接加载调用;

步骤2.4,卸载国密算法驱动模块,在应用加密完成后,注销国密SM4算法结构体和国密SM3算法结构体,从而实现SM3算法接口和SM4算法接口的卸载。

本发明是基于开源软件实现的IPsec-VPN,IPsec(Internet Protocol Security,因特网协议安全性)是为了在IP层提供提供高质量的、可互操作的、基于密码学的通信安全而制定的一套协议族,IPsec-VPN是指采用IPsec协议来实现远程接入的一种VPN(Virtual Private Network,虚拟专用网络)技术。IPsec-VPN支持Linux2.6以上内核。从Linux2.6内核开始,内核就自身带有IPsec模块。IPsec-VPN的作用是建立安全分组流的密钥交换,而保护分组流的功能在Linux内核中实现。建立安全分组流的密钥交换过程中用到非对称加密算法,保护分组流过程中用到哈希算法和对称加密算法。

要使用国密算法就涉及到算法扩展的问题,算法扩展分两种情况:一是在用户层的算法扩展,二是内核层的算法扩展。

针对用户层存在的问题,本发明利用openssl的加密引擎机制,不需要改动其核心代码,只需要定义一个加密引擎,在加密引擎中调用需要扩展的密码算法接口,在使用前进行动态加载即可,使openssl能够透明地使用第三方提供的软件加密库或者硬件加密设备进行加密,非常方便,而且可以屏蔽硬件之间的差异,在改变硬件加密设备时,只需要在外部扩展的加密引擎中修改硬件算法调用接口,不需要修改应用程序。具体步骤为:

步骤1.1,建立加密引擎库,首先在加密引擎库中存储各个需要扩展的SM2加密引擎,其中包括SM2加密引擎,加密引擎用于中会调用到第三方提供的软件加密库或者硬件加密设备中的算法接口,SM2加密引擎则用于调用加密库中的SM2算法接口;

步骤1.2,首先动态加载加密引擎,在加密引擎库中调用各个加密引擎,然后指定所需要的加密引擎,应用程序中会用到不只一个加密引擎,最后通过SM2加密引擎调用SM2算法接口。

如图1所示,应用程序openssl的通用加密接口有两种方式来调用安全模块:一是直接调用 openssl 内部支持的加密引擎库,二是通过加密引擎调用扩展的硬件加密库,对于不支持的硬件,需要先实现外部扩展的加密引擎,即上述步骤1,通过内部动态引擎(Dynamic Engine)加载步骤1实现的加密引擎库,再由外部的加密引擎访问具体硬件的算法接口,即上述步骤2。

针对内核层存在的问题,本发明将扩展的算法功能实现代码编译成模块,在需要的时候在Linux系统中动态地加载。这样,只需要在内核中增加少量的代码,模块本身不编译进内核,从而控制了内核的大小,模块一旦被加载,将和内核其它的部分完全一样,内核可以直接调用模块所实现的功能。而且系统的内核只需要升级一次,模块和内核分开,其自身功能有问题时也不需要重新编译内核重新升级内核。Linux内核支持很多加密算法,包括对称加密算法(如AES),摘要算法(如md5),这些算法作为加密功能框架的最底层,提供加密和解密的实际操作,内核提供一个统一的框架,来管理这些算法。其中加密算法通过crypto_register_alg()注册和crypto_unregister_alg()注销,摘要算法通过crypto_register_shash()注册和crypto_unregister_shash()注销。本发明的具体步骤为:

步骤2.1,构建国密算法驱动模块,根据系统内核模块的GPL兼容许可权,对构建的国密算法驱动模块进行许可申明,模块许可(LICENSE)申明是Linux内核驱动模块所必须的,在linux2.6内核中,可接受的LICENSE包括GPL、GPL v2、GPL and additional rights、Dual BSD/GPL、Dual MPL/GPL和Proprietary,大多数情况下,内核模块应遵循GPL兼容许可权,本发明中使用MODULE_LICENSE("GPL")完成模块许可申明,如果不声明,模块被加载时,就会收到内核被污染(kernel tainted)的告警,影响模块的正常使用;

步骤2.2,加载国密算法驱动模块,根据加密需要在系统内核动态加载时执行国密算法驱动模块,本发明是通过insmod命令动态加载系统内核模块的,注册国密SM3算法结构体和国密SM4算法结构体,具体是通过crypto_register_alg()注册国密SM4算法结构体,通过crypto_register_shash()注册国密SM3算法结构体,利用国密SM3算法结构体实现SM3算法接口的加载初始化,利用国密SM4算法结构体实现对国密SM4算法接口的加载初始化;

步骤2.3,应用国密算法驱动模块,利用国密算法驱动模块在系统内核中实现IPsec-VPN保护分组流的功能,国密算法驱动模块为系统内核加密框架的一部分,可被系统内核自带的IPsec模块的直接加载调用;

步骤2.4,卸载国密算法驱动模块,在应用加密完成后,注销国密SM4算法结构体和国密SM3算法结构体,从而实现SM3算法接口和SM4算法接口的卸载,具体是通过crypto_unregister_alg()注销国密SM4算法结构体,通过crypto_unregister_shash()注销国密SM3算法结构体。

如图2所示,IPsec-VPN中的IKE密钥协商模块和配置管理模块处在linux的用户层,分别由密钥管理守护进程和配置管理进程实现,完成密钥协商功能和安全策略库(SPD)安全关联库(SAD)的管理功能,PF_KEY套接口用于上述两个模块与内核之间的交互。对于ESP加密报文的处理在Linux内核层进行,Linux内核自带IPsec处理模块,会调用到加密算法库中的国密SM3、SM4算法,加密库中的国密SM3、SM4算法通过动态加载支持国密SM3、SM4算法的内核模块实现。

相关技术术语的名词解释如下:

IPsec-VPN

IPsec-VPN是指采用IPsec协议来实现远程接入的一种VPN(Virtual Private Network,虚拟专用网络)技术。IPsec(Internet Protocol Security,因特网协议安全性)是为了在IP层提供提供高质量的、可互操作的、基于密码学的通信安全而制定的一套协议族。

IKE

Internet 密钥交换协议,可用于协商虚拟专用网(VPN),也可用于远程用户(其 IP 地址不需要事先知道)访问安全主机或网络,支持客户端协商。

openssl

openssl是一个功能丰富且自包含的开源安全工具箱。它提供的主要功能有:SSL协议实现(包括SSLv2、SSLv3和TLSv1)、大量软算法(对称/非对称/摘要)、大数运算、非对称算法密钥生成、ASN.1编解码库、证书请求(PKCS10)编解码、数字证书编解码、CRL编解码、OCSP协议、数字证书验证、PKCS7标准实现和PKCS12个人数字证书格式实现等功能。openssl采用C语言作为开发语言,这使得它具有优秀的跨平台性能。openssl支持Linux、UNIX、windows、Mac等平台。

加密引擎

Openssl硬件引擎(Engine)能够使用户比较容易地将自己的硬件加入到openssl中去,替换其提供的软件算法。一个Engine提供了密码计算中各种计算方法的集合,它用于控制openssl的各种密码计算。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1