APP下载

基于GMSSL公共库应用的测试研究

2023-11-09常卫浮明军徐亚超黄显果刘静静

微型电脑应用 2023年10期
关键词:国密加解密私钥

常卫, 浮明军, 徐亚超, 黄显果, 刘静静

(1.许继电气股份有限公司,河南,许昌 461000; 2.许继电源有限公司,河南,许昌 461000)

0 引言

随着电力行业安全性标准的提高,基于GMSSL库的应用已经成为基础设施的一部分。SSL/TLS协议可以有效保证通信[1]的机密性。鉴于SSL/TLS安全协议的通信重要性及广泛性,针对TLS协议实现及国密算法的安全审查漏洞检测及应用研究已成为了热点。目前研究的已知漏洞,包括BEAST攻击、BREACH攻击、CRIME攻击等,相关研究发现开源工具testssl.sh能够检测出这些漏洞[2-3];基于图像密文重构与卷积神经网络[4-5]等手段的分析方法,对主流密码算法的密文随机性进行了分析,这也为TLS密码套件选择与加密流量的深层分析提供了参考;对SM2加密算法的核心加密流程[6]进行优化,在不影响算法安全性的前提下,提出基于优化的SM2国密算法替换ECDSA公钥签名算法的区块链设计;区块链技术结合签名密钥算法[7]提高电子存证数据的安全性。以上都是对TLS协议实现库存在的安全漏洞、国密算法优化等方面进行的相关研究,但GMSSL库中的接口实现只是对核心功能进行了设计,目前业界对公用接口的封装使用漏洞缺乏相关研究分析,因此本文的研究很有必要性。

1 TLS通信实现机制

1.1 TLS简介

TLS(安全传输层),TLS[8-10]是建立在传输层TCP协议之上的协议,服务于应用层,它的前身是SSL(安全套接字层),实现了将应用层的报文进行加密后再交由TCP进行传输的功能。

图1 TLS通信层

1.2 通信机制

TLS通信机制可以分为两步[11]:服务器端和客户端进行“握手”,身份验证通过后分别生成对称密钥;客户端使用对称密钥加密,服务端使用对称密钥解密,双方通过“对称密钥”进行加密通信。可以细分为四步:

1) 客户端向服务器发送TLS协议的版本号、一个随机数A、以及所支持的加密算法(如RSA)。

2) 服务器确认是否支持客户端发送的TLS协议版本,同时给出数字证书(包含服务器的公钥)以及一个随机数B。

3) 客户端验证数字证书有效后,生成一个新随机数C,并且使用证书中的公钥加密此随机数,最后将加密后的随机数发送到服务器。

4) 服务器使用自己的私钥解密被加密后的随机数C,使用加密算法对随机数A、B、C进行加密,生成对称密钥。客户端使用同样的加密算法生成与服务器相同的对称密钥。

SSL/TLS协议本身的复杂性为应用者增加了负担,为了减轻开发者的负担及防范由代码缺陷导致的安全风险,SSL/TLS协议实现细节通常被封装在OpenSSL,NSS等开源软件库中。而国密算法[12-13]是国家密码局制定标准的一系列算法,其中包括SM2椭圆曲线非对称加密算法、SM3杂凑算法、SM4[14-15]对称加密算法。

1.3 本文工作

GMSSL是支持国密算法和标准的OpenSSL分支,增加了对国密SM2/SM3/SM4算法和ECIES、CPK、ZUC算法的支持。GMSSL库对TLS协议通信、国密算法的核心功能进行了封装,应用者只需要调用提供的接口即可实现所需的功能。本文首先介绍了TLS通信机制及被测软件功能,重点阐述了基于被测软件设计的软件测试框架,最后对GMSSL库提供的SM2、SM3、SM4国密算法及常规的数字证书操作接口、TLS通信接口进行的二次封装软件进行了测试,发现对GMSSL库函数的调用漏洞,将会导致TLS通信初始化错误、加解密错误等问题。本文的研究对于正确实现TLS加密通信具有重要的参考意义。

2 测试环境搭建

二次封装完毕后,需要确认功能、性能、效率及内存等是否满足要求。此时,测试就是重要的保障环节。功能测试用于确保接口实现的全面性及功能正确性;性能测试用于考核加解密速度能力;内存测试主要考核最大资源消耗情况。应设计测试驱动测试上述项目符合相关标准或要求。

2.1 静态测试环境

测试环境搭建要从静态测试和动态测试两方面考虑。静态测试主要通过checkmarx、CoBot和fortify、polyspace等工具按照源代码编译环境、工具配置要求及选择编码规则对静态测试环境进行搭建。测试工具通过扫描源代码分析程序的系统结构、数据结构、数据接口、内部控制逻辑等内部结构并形成扫描结果报告文件,测试员阅读报告文件检查代码中那些违反编码规则的地方是否存在潜在的风险。此次测试是对于接口的静态扫描,对于公共库的源码部分未能检测到,所以静态测试结果只是表明在接口二次封装源代码中的一些变量定义未使用、变量未初始化等编码规范问题,其他安全性问题本次不进行研究。

2.2 动态测试环境

如图2所示,TLS通信软件测试框架主要包括客户端测试驱动和服务器端测试驱动2个大模块。通过设计客户端和服务端测试驱动,调用GMSSL库中相关接口实现通信。

图2 测试驱动软件框架

客户端驱动实现包括通信初始化(初始化socket、读取CA证书、客户端证书、客户端私钥、网络初始化)、连接服务器、发送/接收数据、通信反初始化(释放资源)。

服务器端驱动实现包括初始化服务器网络(初始化网络环境、初始化TLS环境)、启动监听、接收tcp连接-创建tls连接-接受tls连接、接收客户端数据、定时发送数据。通信效果如图3所示。

(a) 服务器端

3 功能测试及效果

基于上述软件测试框架的动态测试主要对接口的功能实现正确性、功能实现的完备性、是否存在内存泄漏等进行测试。各类功能的测试项目如表1~表3所示。

表1 TLS通信测试项目

表2 读证书接口测试项目

表3 SM2/SM3/SM4测试项目

3.1 TLS通信测试

通过场景测试法设计测试用例对TLS通信进行接口功能验证。TLS通信初始化阶段,需要进行客户端或服务端的证书验证、证书是否与私钥匹配、私钥是否正确等操作。当加载经CA签发但不匹配的证书与私钥文件时,先加载证书进行证书验证,然后加载私钥检查私钥正确性,最后进行证书与私钥匹配性检查,预期实现功能是证书与私钥不匹配。

通过测试发现,若按如上步骤操作,匹配性检查的结果是私钥不正确,没有正确实现匹配性检查的功能。

修改接口调用先后顺序如下。

先检查私钥正确性,在保证私钥文件正确的前提下进行证书与私钥的匹配性检查,此操作的表现能够正确实现匹配性检查的功能要求。

3.2 读证书接口的测试

通过设计测试用例对读证书接口进行调用,测试项目覆盖了表2中的内容,通过测试发现很有价值的问题。对于加密的P12证书文件和加密的私钥文件,在解析这两种文件时,库函数的处理方式是不一样的。读私钥文件,文件解析之前就可以知道是否需要密码,如果不需要就直接丢弃输入的密码;读P12文件时,无法区分该类文件是否需要密码,所以在给一个不加密的P12文件输入密码时密码就使用了。对不加密的P12证书接口进行封装时,务必采取相应措施确保密码为空,否则当用户调用该接口输入密码会引起功能的错误实现。

3.3 加密算法的测试

通过设计测试用例对SM2、SM3、SM4算法进行测试,通过测试发现,对于SM4加密,当加密模式为CFB和OFB时,若在调用ssl库函数EVP_sms4_cfb()和EVP_sm4_ofb()时数据长度传入为0(异常调用),库函数仍能成功加密。若封装该库函数时没有考虑此情况,将会实现错误的功能。

4 性能测试及效果

基于测试框架,设计多次调用加密算法接口并自动统计平均耗时。加解密算法在不同的应用平台,计算能力差别较大,没有统一标准,以下记录均在Win 10,64位操作系统,i7-9700 CPU,3.0 GHz处理器上进行测试,针对SM2、SM3、SM4加解密接口,分别统计调用10 000次、100 000次的平均耗时,结果如表4~表6所示。

表4 SM2签名/验签速度

测试结果表明:SM2签名、SM2验签在调用10 000次和调用100 000次时的平均耗时均比较稳定,说明SM2算法在对消息进行签名和验签时不受次数的影响,同时被签名的消息长度对签名和验签速度的影响也是不存在的。但从上述结果中可以看出,SM2签名平均耗时几乎是SM2验签的2倍,原因在于SM2签名和SM2验签的算法复杂度的不同,在签名过程中,R、S值和椭圆曲线点计算占用了大量的时间资源。

表5是不同长度消息SM3摘要计算的平均耗时测试结果,从该结果可以看出,随着消息长度的增大,消息摘要计算平均耗时逐渐增多;对于同一消息,单次计算和分次计算杂凑值的时间开销存在着很大的差别,如当消息长度为1024 Byte时,分512次计算和单次计算的耗时差达到了10 μs,而对于同一消息相同长度的杂凑值分次计算,调用10 000次和调用100 000次的平均耗时却几乎无差别,也同时验证了该算法比较稳定。

表6为SM4对于不同长度的消息进行加解密速度测试结果,可以看出,随着数据长度的增大,加解密的耗时也逐渐增多,当数据长度为1024 Byte时,耗时达到了26 μs,说明消息长度对于算法的影响较大。

表6 SM4加解密计算速度

5 总结

随着配电信息数据规模的逐渐增大,对数据安全性的要求越来越高,安全通信的正确实现及数据加解密速度是电网数据交互的重要指标。本文通过对GMSSL库的二次封装程序进行测试,发现对GMSSL库中公用接口不能够正确调用时,可能会造成功能实现的不正确;通过对加解密速度进行分析,为国密算法对不同数据长度的加密通信提供了资源消耗的参考。

本文对GMSSL库中的部分接口在实现加密通信过程中的封装使用方法提出了建议,设计的测试环境和测试用例只能覆盖一些基本功能的测试,仍需继续深化开发研究测试方法,进一步拓展测试深度。

猜你喜欢

国密加解密私钥
清扫机器人避障系统区块链私钥分片存储方法
比特币的安全性到底有多高
国密技术在智能燃气表系统的应用与分析
基于改进ECC 算法的网络信息私钥变换优化方法
Hyperledger Fabric平台的国密算法嵌入研究
自助终端设备国密改造方法探究
基于国密算法的银行移动营销终端安全系统研究
一种基于虚拟私钥的OpenSSL与CSP交互方案
PDF中隐私数据的保护方法
电子取证中常见数据加解密理论与方法研究