




摘要:本文主要研究了基于國密算法的數據庫加密技術,該加密技術采用了中國自主研發的國密算法,包括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? + x3 + 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?+x3+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算法優化方式,通過實驗驗證是有效的,減少了加解密算法帶來的性能損耗??傮w而言,盡管透明加密在實施過程中存在一定的挑戰,但其在確保數據安全和隱私保護方面的潛力巨大,值得進一步探索。
作者單位:李恒 上海 徐匯公安部第三研究所
李恒(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.