基于高性能国密算法的数据库透明加密技术研究

2024-10-29 00:00李恒
中国新通信 2024年18期

摘要:本文主要研究了基于国密算法的数据库加密技术,该加密技术采用了中国自主研发的国密算法,包括SM 2、SM 3和SM4,实现对数据库中的敏感信息进行高效且安全的加密。

关键词:高性能;国密算法;数据库;透明加密

一、引言

大数据已经成为社会发展的重要推力。但大数据也包含了很多敏感信息,如个人隐私、商业机密,这些信息一旦泄露,将会给个体或组织带来严重的损失。因此,如何保护数据安全,特别是数据库中的敏感信息,是目前亟需解决的问题。传统的数据库加密技术虽然可以在一定程度上保护数据安全,但由于其算法复杂度高、性能低以及安全性不足等问题,使其在应用中受到了限制。为此,提出一种新的数据库加密方案,该方案采用了中国自主研发的国密算法,以实现对数据库中的敏感信息进行高效且安全地加密。国密算法是中国自主研发的密码算法标准,包括SM 2、SM 3和SM4,具有良好的安全性和性能。通过将国密算法应用于数据库加密,不仅可以防止数据泄露,还可以在保证数据安全的同时,满足数据库的高并发访问需求。

二、数据库透明加密概述

数据库透明加密技术,也被称为Transparent Data Encryption(TDE),是一种用于保护存储在数据库中的数据的安全技术。它通过对数据库文件进行实时加密和解密,以确保数据在存储、处理和传输过程中的安全性。

TDE的优点是透明性。对于应用程序和用户而言,数据的加密和解密过程是完全透明的,无需进行任何修改,简化了数据安全管理的复杂性,降低了维护成本。

TDE工作原理包括两个步骤:首先,当数据写入数据库时,TDE会自动对数据进行加密。然后,当用户或应用程序请求访问数据时,TDE会自动对数据进行解密。这两个过程是在数据库层面进行的,对上层应用程序和用户而言是完全透明的。

尽管TDE可以保护数据安全,但它并不能防止所有类型的攻击。例如,如果攻击者能够获得数据库的访问权限,他们仍然可以读取和修改数据。因此,TDE通常需要与访问控制、身份验证等安全措施结合使用。

总体而言,数据库透明加密技术是一种重要的数据安全保护手段,它可以防止数据在存储、处理和传输过程中的泄露,同时能够保证数据的可用性和访问性。

三、数据库透明加密技术

(一)密文格式设计

设计密文格式时,需要考虑数据的安全性、完整性和可用性。因此,将密文分为四个部分:版本标识、密文内容、校验位和是否是密文标识。

1.版本标识

这部分用于标识加密算法的版本。由于加密算法会随着时间的推移而更新,因此需要一个版本标识确保解密过程可以正确使用对应的算法版本进行解密,版本标识通常包含算法名称和版本号。

2.密文内容

这部分是实际加密数据,它通过将原始数据输入加密算法得到。密文内容的长度取决于加密算法和原始数据的大小,采用SM4算法进行加密。

3.校验位

这部分用于检查密文内容是否在传输或者存储过程中被篡改。校验位通常是通过对密文内容进行哈希运算得到的,如果密文内容被修改,则校验位也会发生变化,从而可以检测到数据被篡改。

4.是否是密文标识

这部分用于标识数据是否已经被加密,对于混合存储明文和密文的情况非常有用,可以快速判断数据是否需要进行解密操作。

通过这种方式设计的密文格式,不仅可以保证数据的安全性和完整性,还可以提高数据处理效率。

(二)透明加密实现方式

需要对JDBC进行封装以实现透明加密。创建一个新的数据库连接类,该类在内部使用JDBC API与数据库交互,并自动处理加密和解密操作。以下是一种实现的方法。

1.创建一个新的数据库连接类,例如EncryptedConnection。这个类应包含一个私有的java.sql.Connection对象,用于与数据库交互。

2.在EncryptedConnection类中,重写所有需要处理数据的方法,例如prepareStatement()、createStatement()等。在这些方法中,首先使用内部的Connection对象创建一个PreparedStatement或Statement对象,然后返回一个新的EncryptedPreparedStatement或EncryptedStatement对象,这些对象在内部处理加密和解密操作。

3.创建EncryptedPreparedStatement和EncryptedStatement类,这些类应该包含一个私有的PreparedStatement或Statement对象。在这些类中,重写所有需要处理数据的方法,例如setString()、setInt()、executeQuery()等。在这些方法中,首先对输入的数据进行加密,然后调用内部的PreparedStatement或Statement对象的相应方法来执行数据库操作。当从数据库获取数据时,再对数据进行解密。

4.在EncryptedConnection类中,还可以提供额外方法,例如设置加密密钥、更改加密算法。

通过以上步骤,可以创建一个新的JDBC封装,它可以自动处理数据库操作的加密和解密操作,这样应用程序就可以像使用普通JDBC一样使用新的封装,而不需要关心数据的加密和解密问题。

(三)针对密文的模糊查询实现

将数据加密前先使用分词算法对明文数据进行分解,将明文数据分解为多个关键字或短语。对每个关键字或短语,通过SM 3算法生成一个唯一的标识符,并将该标识符与原始数据位置相关联。然后,将这些标识符和位置信息存储在一个索引表中,并将对分词后的数据和索引表进行加密,然后将加密后的数据和索引表存储至数据库中。当需要模糊查询时,首先对查询条件进行同样的分词和标识符生成处理,然后在加密索引表中查找匹配的标识符,得到原始数据位置,最后返回相应的加密数据。这种方法的优点是可以在不解密数据的情况下进行模糊查询,提高了数据的安全性。

四、SM4加密算法性能优化

(一)SM4轮密钥缓存

通过以上方式实现的透明加密方式,在实际使用过程中出现的高频加密与解密操作对性能会产生比较大的影响,例如在对原本有大量数据的数据库进行全量加密操作时,调用基础的SM4算法接口:

cipher=SM4Enc(key, plain)

密码接口需要对128bit的SM4加密密钥转换为32个32bit的轮密钥。如果频繁调用该接口使用相同密钥进行加密,将花费大量时间通过加密密钥key重复生成相同的轮密钥rk,降低小数据包整体加解密吞吐性能。

将密码接口调整为:

ctx=SM4SetKey(key)

cipher=SM4Enc(ctx, plain)

应用可以预先调用SM4SetKey接口将加密密钥传入密码模块,密码模块转换加密密钥key为轮密钥并保存于接口上下文ctx中。当需要使用相同加密密钥key进行加密时,调用SM4Enc接口传入上下文ctx,使用已保存的轮密钥进行加解密,从而跳过反复重复生成的轮密钥步骤,优化加密流程,提升SM4-GCM算法性能。

密码接口优化前后调用示意图如图1所示。

(二)指令层优化SM4

在标准c代码实现的SM4-GCM算法基础上,可以通过处理器指令对SM4算法实现进行优化,下文描述了x86架构硬件平台的两种优化方式。而在信创硬件平台环境中,也可以使用信创平台指令进行优化,包括兆芯的GMI、鲲鹏的KAE,这些指令以SDK形式提供,信创环境安全密码模块密码接口可以直接调用这些SDK优化SM4算法性能。

SM4算法的轮函数包含线性变换和非线性变换,其中非线上变换是基于SM4算法S盒进行查表变换,相对线性变换,非线性变换的查表操作耗时是很多的。因此,优化SM4算法的S盒查表过程,可以提高SM4算法运行效率。

SM4和AES的S盒生成均为基于GF(2^8)构造的。其中,GF(2^8)是一个有限域,它的元素是8位二进制数。S盒通过将GF(2^8)上的元素进行逆运算和仿射变换得到的。具体而言,S盒生成过程中首先通过一个固定的置换将输入的8位二进制数打乱,然后将结果代入一个由仿射变换和逆运算组成的函数中,最后得到输出的8位二进制数。在仿射变换中,变换本身可以表示成逻辑运算的形式,如异或、与或等。因此,S盒生成中使用了逆运算和逻辑运算进行数学变换,得到最终的S盒。

由于SM4和AES的S盒均基于GF(2^8)一个有限域进行构造,通过AES和SM4算法的S盒在有限域上不可约多项式转换,可以实现S盒的变换。

因此,先分别分析AES和SM4的S盒特征。

AES算法的S盒定义如图3所示。

AES算法的S盒定义在GF(2^8)有限域的不可约多项式为x⁸ + x⁴ + x³ + x + 1,表达式为S(x)=Ax-1+c,通过矩阵显示为:

SM4算法的S盒定义如图4所示。

SM4算法的S盒定义在GF(2^8)有限域的不可约多项式为x8+x7+x6+x5+x4+x2+1,生成方式为S(x)=A(Ax+c)-1+c,其中:

可以看到,SM4算法和AES算法采用的有限域不可约多项式有所不同。

SM4算法采用的有限域不可约多项式为x⁸+x⁶+x⁵+x+1,生成方式为Ss(x)=As·Is(Asx+Cs)+Cs。

AES算法采用的有限域不可约多项式为x⁸+x⁴+x³+x+1,生成方式为Sa(x)=Aa·Ia(x)+Ca。

其中,上述表达式中计算Is和Ia求逆是最复杂、最耗时的运算。可以构造出同构映射T将SM4对应的有限域元素映射到AES对应的有限域元素中,再借助指令求逆,最后再逆映射。

AES和SM4的S盒同构映射运算如图6所示。

记y=Asx+Cs,由SM4有限域映射到AES有限域的函数为 T(xs)→xa。

则SM4算法有限域求逆为:

Is(y) =T-1Aa-1·{Sa(T(y))+Ca}=T-1Aa-1·Sa(T(y))+T-1Aa-1Ca

将Is(y)代入Ss(x)=As·Is(Asx+Cs)+Cs,那么SM4算法S盒计算方式为:

Ss(x)=AsT-1Aa-1·Sa(T(y))+AsT-1Aa-1Ca+Cs={AsT-1Aa-1}·Sa({TAs}x+{TCs})+{AsT-1Aa-1Ca+Cs}

通过上述推导分析,SM4算法的S盒运算可以通过求逆和映射等方式转换使用AES的S盒计算方式进行运算。

在x86架构的运行环境的AVX2指令集提供了硬件加速的AES-NI指令,其中包括S盒的计算。在AES加密中,S盒运算是将每个输入字节映射到一个对应的输出字节。这个映射关系在AES算法中通过一个固定的S盒实现,而在AES-NI指令集中,这个S盒储存在CPU内部的专门寄存器中。对于每个输入字节,AES-NI指令集都会自动从这个S盒中查找对应的输出字节,并将其作为输出。该查找过程通过硬件电路实现,可以在单个时钟周期内完成。因此,使用AES-NI指令实现的SM4算法S盒运算的方法,可以提升SM4算法非线性变换部分的执行效率。

AES-NI指令中,最适合执行S盒运算的指令为AESENCLAST指令。AESENCLAST指令执行AES加密的最后一轮,功能是对16字节的AES状态数据依次做S盒变换、行移位、异或子密钥这三个操作。因为SM4算法执行过程只需要AES算法S盒变换,所以使用AESENCLAST指令进行S盒变换需要消除行移位和子密钥异或。其中,行移位可利用调序指令去除,子密钥异或可将子密钥设置为全0即可。

由于AES-NI指令操作的是128bit的数据,一组SM4加密的消息每轮需要S盒查表的数据仅有32bit,故将4组消息通SMID指令打包至一块,使处理数据内容达到128bit。

打包操作过程如下:

1.将4个32位整数分别存储在4个128位寄存器的低位。

2.对于每个寄存器,将其低16位和高16位分别取出来,得到两个16位的整数。

3.对于这两个16位的整数,分别进行饱和转换(即将超出16位范围的值截断)。

4.将4个饱和转换后的16位整数组合成一块128位数据,并返回该数据。

例如,如果输入的4个32位整数分别为0x0000FFFF、0x00000000、0x00008000、0x00007FFF,则打包成的128位数据就为0xFFFF0000FFFF0000000080007FFF。

SMID打包数据可以将多个标量数据打包成一个更大的向量。而计算机处理芯片执行一个小向量数据与一个大向量数据的时间周期是相同。因此,将4组32bit SM4消息转换为SMID向量,还可以提高计算速度。

结合S盒转换、AES-NI指令、SMID指令的SM4算法运算流程如表2所示。

x86平台SM4算法性能比较情况如表3所示。

五、结束语

本文探讨了数据库透明加密的实现方法和它对系统性能的影响,虽然透明加密带来了挑战,如计算、存储和网络开销的增加,以及查询效率的下降,但本文提出和实现的SM4-GCM算法优化方式,通过实验验证是有效的,减少了加解密算法带来的性能损耗。总体而言,尽管透明加密在实施过程中存在一定的挑战,但其在确保数据安全和隐私保护方面的潜力巨大,值得进一步探索。

作者单位:李恒 上海 徐汇公安部第三研究所

李恒(1996.08-),男,汉族,湖北咸宁,本科,实习员,研究方向:数据安全。

参考文献

[1]张才贤.基于CUDA的并行SM4-GCM设计与实现[D].西安电子科技大学,2019.

[2] HU G Y, CHEN R. Improving the performance of multi-mode SM4 block cipher[J]. International Journal of Performability Engineering, 2019, 15(10): 2589–2596.

[3]王德民,陈达.基于CUDA的SM4加密算法高速实现[J].石家庄铁路职业技术学院学报,2017,16(01):59-63.

[4]REBEIRO C, SELVAKUMAR D, DEVI A S L. Bitslice implementation of AES[C]. In: Cryptology and Network Security—CANS 2006. Springer Berlin Heidelberg, 2006: 203-212.

[5]KÄSPER E, SCHWABE P. Faster and timing-attack resistant AES-GCM[C]. In: Cryptographic Hardware and Embedded Systems—CHES 2009. Springer Berlin Heidelberg, 2009: 1-17.

[6]LI L, YANG F, PAN Y M, et al. An implementation method for SM4-GCM on FPG&A[C]. In: Proceedings of 2017 IEEE 2nd Advanced Information Technology, Electronic and Automation Control Conference (IAEAC). IEEE, 2017: 1921-1925.

[7]CHENG H, DING Q, HUANG C, et al. Improvements of SM4 algorithm and application in Ethernet encryption system based on FPG&A[J]. Journal of Information Hiding and Multimedia Signal Processing, 2014, 5(3): 518-526.

[8]ABED S, JAFFAL R, MOHD B J, et al. Performance evaluation of the SM4 cipher based on fifield‐programmable G&Ate array implementation[J]. IET Circuits, Devices & Systems, 2021, 15(2): 121-135.

参考文献

[1]UIPATH, INC.Determining sequences of interactions, process extraction, and robot generation using artificial intelligence / ma-chine learning models,US202017070168[P].2022-04-12.

[2]王建周.胡一川.汪冠春.基于AI的RPA流程的生成方法、装置、设备及介质,CN112070416A[P].2020-12-11.

[3]赖琪,蔡宇辉,夏斯琼,等.RPA流程标准化定义与设计[J].计算机科学,2023,50(12):82-88.

[4]陈翼鹰,黄斐.基于序列两两对比的软件行为踪迹分析[J].计算机应用与软件,2013,30(04):174-176+260.

[5]辛晓宇,刘正捷,慕爽等.自动工具辅助用户行为捕捉与分析方法[J].计算机工程与设计,2021,42(01):287-293.

[6]王继民,李雷明子,郑玉凤.基于日志挖掘的移动搜索用户行为研究综述[J].情报理论与实践,2014,37(03):134-139.

[7]李多芹,方贤文,王丽丽,等.基于感知成本的流程模型与事件日志有效对齐[J].计算机应用,2022,42(10):3154-3161.

[8]章瑞,苏莹,段金奎等.RPA在自动化办公数据管理中的研究[J].信息系统工程,2023(10):123-126.