商密算法数据包解析工具的设计与实现

2020-10-15 11:02樊金坡胡荣磊
计算机应用与软件 2020年10期
关键词:完整性数据包密钥

蒋 华 樊金坡 张 罡 胡荣磊

(北京电子科技学院 北京 100070)

0 引 言

随着信息化的发展,商用密码已经成为保障网络安全的重要一环,在包交换网络中,商密数据包承载着协商安全关联、密态数据传输、会话保持和状态查询等任务。网络协议是通信双方为进行数据交换建立的标准体系,通过网络协议解析,可以了解网络数据包在产生和传输过程中的行为[1]。

目前网络协议解析方面的研究多集中在私有协议设计与解析上[2-4],对私有协议的解析通常可以分为插件型和内嵌型两种方式[5]。为了满足保障关键信息基础设施安全的需求,网络安全协议被不断改进,密钥协商、密码算法的使用与标准协议相比产生变化,导致网络流量的解析与网络活动的识别较为不便。

本文介绍了网络协议解析的基本流程与一般方法,研究了网络协议的语法设计与字段处理,对Wireshark进行二次开发,在内嵌型开发方式下,完成了对使用商密算法的安全协议全生命周期的解析支持。以使用商密算法的ISAKMP[6]和ESP[7]协议为例,验证了数据包解析的有效性和正确性。为商密数据包的解析与内容检测提供了借鉴,同时为后续安全测评、用户行为统计等应用打下了基础。

1 商密数据源的生成

网络安全协议运用密码算法和协议逻辑实现加密和认证功能,用于解决计算机网络面临的安全威胁问题,常见的网络安全协议有SSL、TLS、IPSec和SET等。根据实际应用需求,文献[8-9]对相关协议的技术规范给出了特定要求。本文使用商密IPSec VPN作为数据源。

1.1 商密IPSec简介

IPSec是在IETF(The Internet Engineering Task Force)的赞助下开发的一组协议,旨在通过IP分组交换网络提供安全服务[10],也是目前易于扩展的、完整的网络安全方案。IPSec有两种工作模式:传输模式和隧道模式。在传输模式下,相互通信的设备IP地址必须在其间的网络上可路由,这种模式不具备NAT穿越功能。在实际应用中,隧道模式更为常见。下面对隧道模式下商密IPSec的两种数据封装方式进行分析,AH协议与ESP协议的数据封装分别如图1(a)和(b)所示。

图1 商密IPSec数据封装方式

在隧道模式下,需要产生一个新IP头部,IPSec头(AH头或ESP头)被插入到新IP头与原IP头之间。在AH协议中,IPSec头包含一个带密钥的hash散列,用于提供数据包的完整性保护和抗重放攻击,其密码算法使用SM3;在ESP协议中,ESP报头包括安全参数索引、序列号信息,ESP报尾标识了下一个报头与扩展位信息,认证报尾中则写入了数据包的hash校验值。与AH协议相比,ESP协议的安全性更高,除了提供完整性保护和数据源认证外,还具有加密功能,其密码算法使用SM3与SM4。

1.2 商密密钥材料的生成

IPSec协议使用IKE协议[11]建立安全联盟SA并完成密钥交换的过程。在IKEv2的消息交换过程中,除了IKE_SA_INIT交换,其余的交换都为密态消息,SK{}中的数据受到加密和完整性保护。密钥材料的生成为后续的商密数据包的机密与完整性校验提供了支持。IKEv2的消息交换过程如图2所示。

图2 IKEv2的消息交换过程图

IKE_SA的共享密钥以如下方式进行计算:从IKE_SA_INIT交换中交换的nonce值和DH共享密钥计算出称为SKEYSEED的数。SKEYSEED的生成算法如下:SKEYSEED=prf(Ni|Nr,g^ir)。SKETSEED用于生成七个其他的密钥。各密钥以如下顺序和方式生成:

{SK_d|SK_ai|SK_ar|SK_ei|SK_er|SK_pi|SK_pr}=prf+(SKEYSEED,Ni|Nr|SPIi|SPIr)

在本文选用的商密VPN中,prf+就是HMAC-SM3,所以:

SK_d=HMAC-SM3(SKEYSEED,Ni|Nr|SPIi|SPIr|0x01)

SK_ai=HMAC-SM3(SKEYSEED,SK_d|Ni|Nr|SPIi|SPIr|0x02)

SK_ar=HMAC-SM3(SKEYSEED,SK_ai|Ni|Nr|SPIi|SPIr|0x03)

SK_ei|SK_er=HMAC-SM3(SKEYSEED,SK_ar|Ni|Nr|SPIi|SPIr|0x04)

SK_pi=HMAC-SM3(SKEYSEED,SK_ei|SK_er|Ni|Nr|SPIi|SPIr|0x05)

SK_pr=HMAC-SM3(SKEYSEED,SK_pi|Ni|Nr|SPIi|SPIr|0x06)

其中:SK_d用于为IKE_SA的CHILD_SA生成新的密钥;SK_ai和SK_ar为完整性保护算法的密钥;SK_ei和SK_e为加密所有后续交换的密钥;SK_pi和SK_pr用于生成AUTH载荷。

1.3 商密安全隧道的建立

在安全联网终端与服务器之间通过Gmswan建立安全隧道。Gmswan基于开源项目strongSwan设计,对strongSwan中的加密算法进行了替换,其中对称算法通过修改aes_crypter.c文件替换为商密SM4算法,摘要算法通过修改mac_signer.c文件替换为商密SM3算法,非对称算法通过修改openssl_ec_private_key.c文件替换为SM2算法。此外将密钥协商算法DH替换为SM2,将随机数生成算法prf+替换为HMAC-SM3。Gmswan通过ipsec.conf来配置安全管理的协商参数,在完成商密安全隧道的建立之后,使用Wireshark对安全联网终端与服务器之间的数据包进行捕获。

2 协议解析流程

流经网卡的数据被捕获引擎获取后,会将数据包存储到本地,供解析器分析。在Wireshark中,其数据包捕获引擎使用Dumpcap,获取的数据包文件存在Wiretap中。捕获的内容会按层级被解析为帧、段和消息载荷数据。Wireshark采用模块化设计结构,在其六大功能[5]模块中,Epan负责协议的具体解析。商密协议解析的一般流程如图3所示。

图3 商密数据包解析流程图

协议解析一般按照OSI七层模型进行,从链路层的帧开始,进行层层剥离。在加载协议解析器时,通过通信协议端口号或包头获取特征值的方式,进行过协议解析器的选择匹配。当本层协议报头解析完成,数据部分会被送往上层协议解析器解析,直至整个消息被解析完全。在显示方式上,Wireshark使用偏移量进行其树形结构的维护。

3 Wireshark的二次开发

本文使用内嵌型开发方式完成Wireshark对商密算法的支持。与编写插件的方式相比,内嵌型方式对源码进行静态编译,无论是程序的执行速度还是调用功能代码方面都更具优势。在内嵌型开发方式下,对Wireshark协议解析功能的扩展主要是对EpanDissector中的文件进行修改,与IPSec有关的源码主要是isakmp.c和ipsec.c,分别对应IKE的过程和ESP与AH的封包。

3.1 开发环境配置

进行二次开发之前,需要下载Wireshark的源码,安装配置相应的库。下面介绍在Windows平台上搭建Wireshark开发环境的过程[5]。

1)安装Chocolate:用于Windows平台的包管理。

2)安装Microsoft C compiler and SDK:本文采用的是Visual Studio 2015。

3)安装QT:Wireshark的主要应用程序使用QT的窗口工具。

4)安装Cygwin:Cygwin包含了大量GNU和开源工具,在安装过程中,除了默认选项外,还需要将Devel/bison、Devel/flex、Devel/git、Devel/patch、Interpreters/perl和Text/docbook-xml45这些选项选中。

5)安装Python:为Cygwin的包在Win 32下顺利执行提供支持。

6)安装Git:用于下载及管理wireshark源码。

7)安装CMake:用于生成系统的构建文件。

8)安装Asciidoctor, Xsltproc, DocBook:用于生成文档和用户指南。

完成上述工具的安装后,使用git clone下载Wireshark源码,即可对代码进行重构。

3.2 SM3算法替换

Wireshark中默认支持ecdsa-sha256算法,该算法的摘要长度为256位。SM3算法的摘要长度同样是256位,在设计商密VPN时,数据的完整性使用SM3保护,因此在进行商密数据包解析时,需要将受完整性保护的字段找到,使用SM3算法对其进行摘要,再与完整性校验和数据ICD(Integrity Checksum Data)进行比对。Wireshark使用libcrypt库进行密码算法的调用,其摘要函数接口为gcry_md_read(),将其替换为SM3算法的函数接口即可。在算法替换之后,原有的国际算法(如SHA1、SHA2)无法调用,但这与设计商密算法数据包解析的初衷并不冲突,软件解析功能也不会因此受到影响。

3.3 SM4算法替换

在商密VPN设计时,使用SM4对分组算法AES进行了替换。AES与SM4的分组长度均为128位,其密钥长度也相同,均为16字节。这简化了算法替换的过程。对AES的替换主要是两处函数接口,分别为解密函数gcry_cipher_decrypt()和传入密钥函数gcry_cipher_setkey()。由于不同协议对消息机密性保护的字段不同,向SM4解密函数接口中传入的数据长度有所区别。如IKEv2中消息解密函数sm4_crypt()传入的数据长度为encr_data_len,而ESP中消息解密函数sm4_crypt()传入的数据长度为decrypted_len_alloc+esp_iv_len,因此需要在设计时,对原有解析规则进行深入分析。

在完成载荷的解密后,使用dissect_payloads()函数对有效载荷进行解析,通过proto_item_append_text()将解析字段发送至GUI,完成解析数据的显示。

3.4 软件编译

完成对源码的扩展后,在编译器的命令行终端VS2015 x86 Native Tools Command Prompt中设置环境变量以满足编译过程中对库的调用,创建构建目录并生成构建文件,使用msbuild/m/p:Configuration=Rel-WithDebInfo Wireshark.sln对Wireshark进行构建。在编译完成后,命令行终端输出如图4所示。

图4 编译Wireshark的输出

4 测试与验证

4.1 测试环境搭建

测试环境拓朴图如图5所示,在局域网环境下部署了IPSec VPN系统,测试环境遵循服务器-客户端模式。PC1与Web服务器通过VPN建立的加密隧道进行数据流的交互。PC2的网卡设置为混杂模式[12],允许网卡获取所有流经网络线路的数据包,运行在其上的Wireshark,基于伯克利数据包过滤器语法[13]对经过服务器网卡的网络数据包进行抓取,并进行协议解析。Wireshark测试环境网络配置如表1所示。

图5 测试环境拓扑图

表1 Wireshark测试环境网络配置

4.2 解析正确性验证

通过抓取数据包并添加过滤规则(isakmp or esp),可以看到IKE过程的4条信息与ESP消息。Wireshark发行版在输入交换密钥并选择加解密算法与完整性校验算法后能够对IPSec协议簇中的密态消息进行解析,但由于Wireshark发行版中不含商密系列算法,因此无法正确解析商密数据包,对数据包完整性校验与密态载荷解析均异常,Expert Info中判定出现严重错误。

Wireshark发行版解析时的完整性校验警告如下:

[Expert Info(Warning/Checksum):IKEv2 Integrity Checksum Data is incorrect]

[IKEv2 Intergrity Checksum Data is incorrect]

[Severity level:Warning]

[Group:Checksum]

Wireshark发行版解析时判定数据包格式错误:

[Expert Info(Error/Malformed):MalformedPacket(Exception occurred)]

[Malformed Packet(Exception occurred)]

[Severity level:Error]

[Group: Malformed]

使用基于Wireshark的商密数据包解析工具解析商密数据包,在菜单栏的编辑/首选项/Protocols中,完成密钥材料的添加。图6为解密后商密数据包解析工具中的明文数据,图7为商密VPN系统日志server.log中的解密消息。经过与Wireshark中Decrypted Data对比,可以看出,本文解析工具对商密数据的解密完全正确。

图6 Wireshark中的解密数据

图7 商密VPN服务器端日志信息

Wireshark显示了数据包信息并为各字段添加标签,按照协议标准将各消息载荷解析为带有标签的、可理解的文本之后,就完成了对商密数据包的完全解析。图8为将商密ESP数据包解密后,Wireshark中显示实际使用的通信协议。图9为在有效维护Wireshark独特的树形结构的基础上,解析后商密数据包中内容,其中各字段按照协议标准规定的明确格式进行排列。

图8 使用二次开发的Wireshark解析商密数据包

图9 解析后商密数据包中内容

5 结 语

随着移动通信和下一代网络等技术的发展,保障网络信息传输的安全性与可靠性成为研究热点。在政务、金融、教育、医疗等诸多领域,越来越多的安全产品及应用不断涌现。对产品安全性与功能正确性的验证需要一个良好的数据解析工具,而Wireshark以其开源和易扩展的特点满足了这一需求。本文对Wireshark的体系结构及开发方式进行了分析与研究,给出了一种可扩展的商密数据解析方法与流程,并以一款符合商密《IPSec VPN技术规范》的VPN网关作为数据源,进行了实例的解析与验证。结果表明,基于Wireshark的商密数据包解析工具能够对商密数据进行正确有效的解析,为后续设备安全性检测与数据内容匹配提供了借鉴。

猜你喜欢
完整性数据包密钥
酶可提高家禽的胃肠道完整性和生产性能
二维隐蔽时间信道构建的研究*
幻中邂逅之金色密钥
幻中邂逅之金色密钥
关于防火门耐火完整性在国标、英标、欧标和美标中的比对分析
民用飞机飞行模拟机数据包试飞任务优化结合方法研究
更正说明
C#串口高效可靠的接收方案设计
Android密钥库简析
一种新的动态批密钥更新算法