何文才,關少華,2,薛 晗,2,劉培鶴
(1.北京電子科技學院通信工程系,北京100070;2.西安電子科技大學通信工程學院,陜西西安710071)
一種基于網絡的文件加密方法的研究與實現*
何文才1,關少華1,2,薛 晗1,2,劉培鶴1
(1.北京電子科技學院通信工程系,北京100070;2.西安電子科技大學通信工程學院,陜西西安710071)
當今社會互聯網已完全融入到人們的日常生活和工作當中,網絡極大地方便了人們獲取和傳遞信息。為了讓數據加密適應網絡時代更多應用場景的需求,在Visual Studio 2010平臺上構建了一種網絡文件加密系統,系統采用C/S架構,客戶端完成用戶界面和用戶操作處理功能,服務端實現具體的加解密功能。系統應用于OSI參考模型的應用層上,采用了端到端的加密方式,文件在網絡上以密文形式傳輸,確保了文件在傳輸過程中的安全性。
文件加密 NOEKEON RSA 網絡編程 USBKey
近年來,隨著云計算發展的突飛猛進,越來越多的核心業務以及重要的數據被存放在了云端,這樣一來就使得這些機密數據的安全性就只能單方面依靠云服務供應商了。目前而言,確保云端私有數據安全性的最佳方法之一就是對傳輸的數據和存儲的數據進行加密處理,這樣可以讓私有數據保密于其他用戶甚至云計算服務供應商。因此我們可以引入作為第三方的云加密服務供應商,將要存儲在云計算服務供應商的數據進行相關加密處理,以此來確保數據的安全性、機密性。
在云計算、云加密的大背景下,我們設計了該網絡文件加密系統,該系統實現了通過網絡傳輸將客戶端上的待加密文件上傳到服務端進行加密,再通過網絡將密文回傳給客戶端。該系統還利用了USBKey,對用戶進行身份認證以及對加密密鑰進行保存。
1.1 RSA算法
RSA算法[1]是公開密鑰加密算法中的代表算法,以發明者的名字命名:R.Rivest,A.Shamir和L.Adleman。RSA算法利用數論的基本知識,其安全性是基于大整數因式分解這一數學難題,能夠抵抗到目前為止已知的所有密碼的攻擊。
(1)密鑰生成
A.產生兩個大素數p和q,p和q是保密的;
B.計算n=p·q,歐拉函數φ(n)=(p-1)·(q-1),n是公開的;
C.隨機選擇滿足條件gcd(e,φ(n))=1的e,即e與φ(n)互素,e作為公鑰是公開的,加密密鑰就是(e,n);
D.計算滿足e·d≡1(modφ(n))的d作為私鑰,d是保密的,解密密鑰即為(d,n)。
(2)加解密
A.加密運算:使用公鑰e和要加密的明文m進行c=me(modn)運算即得密文;
B.解密運算:使用私鑰d和要解密的密文c進行m=cd(modn)運算即得明文。
1.2 NOEKEON算法
NOEKEON[2]是由比利時的Joan Daemen、Michael Peeters、Gilles Van Assche和Vincent Rijmen共同設計的一個分組密碼,其密鑰長度和分組長度均為128 bit,整體結構采用的是16輪SP網路,它的每個基本模塊都是對合的,這樣可以使加解密過程相似,另外設計者還使用了Serpent的“Bit-Slice”技術,相當于使用4×4的S盒。目前最好的理論分析結果是可以構造9輪的線性逼近,其優勢為2-62。該加密算法可以在各種平臺上安全而有效的實現,在Pentium II(200 MHz)系統下,NOEKEON的軟件加密速度可達49 Mbit/s,該算法的高效性、高安全性使其能夠很好地適用于文件加密的需要。
(1)加密函數

(2)解密函數


(3)輪函數

(4)各功能模塊


這里Key代表輪密鑰,State代表128比特中間變量,Roundct為輪常數,取自以下十六進制數80、1B、36、6C、D8、AB、4D、9A、2F、5E、BC、63、C6、97、35、6A、D4,加密時從左向右依次選取,解密時從右向左依次選取。Gamma為非線性模塊,Theta為密鑰相關模塊,Pi1和Pi2為移位運算模塊,其中Theta、Pi1和Pi2為擴散層函數。
1.3 USBKey認證技術
本系統采用了基于數字簽名技術[3]的挑戰/響應(又作沖擊/響應)式認證方式,它是一種單向認證的認證方式,挑戰-響應式的認證簡便易行,安全性高,認證的過程對用戶透明。
傳統的數字簽名技術,密鑰保存在計算機的硬盤中,因此很容易被竊取。攻擊者竊取了用戶的簽名密鑰后,就可以冒充用戶進行簽名,使得數字簽名的安全性大大降低。在挑戰/響應式的認證中,用于數字簽名的密鑰保存在用戶的USBKey內,由于USBKey硬件設計的特殊性,攻擊者不能通過網絡上的計算機獲取存儲在用戶持有的USBKey內的密鑰。即使攻擊者獲取了用戶持有的USBKey,由于USBKey內置保護電路,攻擊者不能物理地獲取用戶的密鑰。這就保證了數字簽名的安全性,也保證了認證的安全性[4]。
其具體過程如下所示:當用戶需要登錄系統進行加解密操作時,客戶端首先需要對服務端提出登錄請求。服務端維護著一個密鑰庫,其中保存著所有用戶各自對應的公鑰信息,當服務端接收到客戶端的驗證請求后,在本端隨機生成一個隨機數,之后利用該用戶的公鑰對它進行加密,并將所得結果發送給客戶端,即該認證方式的“沖擊”。當客戶端接收到該數據后,便將其傳入USBKey,USBKey使用內部存儲的該用戶對應的RSA私鑰對該數進行解密運算,并將解密的結果傳送給服務端,即該認證方式的“響應”。當服務端接收到客戶端發送的解密結果后,就將該數與原始隨機數進行比對,如果比對結果一致,則認為該用戶是合法用戶。如果比對結果不一致,則認為該用戶為非法用戶。
2.1 系統的整體結構設計
系統運行流程如圖1所示。

圖1 系統運行流程Fig.1 Flow chart of system operation
本系統由客戶端(Client)以及服務端(Sever)組成。需要加密的用戶向客戶端提供待加密文件,通過客戶端添加文件、設置輸出目錄并生成密文文件。對于需要加密的用戶來說,系統的客戶端與服務端是一體的,客戶端完成用戶界面和用戶操作處理功能,服務端完成具體的加密步驟。在文件加密服務過程中,服務端返回處理結果,客戶端與服務端均可應用于不同的主機實體上。為了確保數據在傳輸線路上的安全性,在數據發送之前將會利用NOEKEON算法進行加密,并且在對端接收到數據之后再利用相同密鑰對其進行NOEKEON解密使數據還原進而進行下一步操作,其中所使用的傳輸密鑰由收發兩端提前協商確定并集成在程序中。
2.2 系統的客戶端
客戶端實現的主要功能包括USB串口通信、加密文件選擇、保存路徑選擇、加密選項、解密選項,詳細功能描述如下:
1)USB串口通信:實現客戶端與USBKey的數據交互。
2)文件選擇:調用文件系統中文件對話框里選擇文件的功能,以對話框、列表等形式導入待加密的文件。
3)加密選項:通過點擊客戶端的加密按鈕,啟動服務端的加密程序,彈出待加密文件選擇對話框以及加密后文件保存路徑選擇對話框。
4)解密選項:通過點擊客戶端的解密按鈕,啟動服務端的解密程序,彈出待解密文件選擇對話框以及解密后文件保存路徑選擇對話框。
5)傳輸模塊:加密傳輸,利用NOEKEON算法將待傳送的數據進行加密并發往服務端,或將接收到的來自服務端的數據利用NOEKEON算法進行解密。
2.3 系統的服務端
服務端主要由以下模塊構成,傳輸模塊、NOEKEON文件加解密模塊、RSA加解密模塊,詳細功能描述如下:
1)傳輸模塊:利用與客戶端協商的傳輸密鑰進行數據的NOEKEON加密傳輸;將客戶端發送過來的消息進行處理使其成為準確的指令。
2)NOEKEON加解密模塊:從客戶端獲取用戶的NOEKEON根密鑰(保存在用戶的USBKey中);對接收到的數據進行NOEKEON加解密操作。
3)身份認證模塊:利用random函數生成隨機數R,并使用服務端保存的用戶公鑰對該隨機數進行
RSA加密;將接收到的客戶端解密后的隨機數R′與
R進行比對,相等則通過驗證。
2.4 USBKey
USBKey具有獨立的CPU和存儲結構,因此為USBKey和密碼技術結合帶來可能。它在本系統中需具備如下幾點功能:存儲用戶RSA私鑰、存儲用戶NOEKEON根密鑰、實現RSA算法、對用戶登錄的PIN值進行驗證。
3.1 C/S模式下網絡程序的Socket通信
Windows Sockets[5]提供了對傳輸層(OSI第4層)的直接訪問,為了保證傳輸的可靠性,本系統采用的是基于TCP(面向連接)的socket編程。
3.1.1 服務端程序流程
1)創建套接字(socket)。
2)將套接字綁定到一個本地地址和端口上(bind)。
3)將套接字設為監聽模式,準備接收客戶請求(listen)。
4)等待客戶請求到來;當請求到來后,接受連接請求,返回一個新的對應于此次連接的套接字(accept)。
5)用返回的套接字和客戶端進行通信(send/ recv),為了保證傳輸數據的安全性,通信數據利用NOEKEON算法進行加密。
6)關閉套接字。
3.1.2 客戶端程序流程
1)創建套接字(socket)。
2)向服務端發出連接請求(connect)。
3)和服務端進行通信(send/recv),同樣,為了保證傳輸數據的安全性,通信數據利用NOEKEON算法進行加密。
4)關閉套接字。
客戶端應用程序必須能夠定位和識別一個服務端的socket,服務端應用程序通過對自己的socket命名來建立其身份識別,這樣客戶端才能夠引用它,從而建立socket連接。一個TCP/IP的socket名稱包含IP地址、端口號以及協議。客戶端能夠通過Windows Sockets的服務名函數找到服務端的標準端口號,而且,如果知道服務端的主機名,利用Win-dows Sockets的主機名解析函數,可以很容易地找到服務端的IP地址。
3.2 客戶端與USBKey的串口通信
利用VS2010的Mscomm控件在客戶端編寫串口通信程序,實現與USBKey的信息交互。
1)利用CreateFile函數逐一打開客戶端的串口,根據返回的句柄值判斷是否為有效端口,進而自動識別已插入USBKey的串口號。
2)定義CMscomm類的對象,并且對串口屬性進行初始化,打開串口。
3)利用put_Output函數向USBKey發送數據。
4)接收串口到達的來自USBKey的數據:串口通信采用事件驅動方式,利用MSComm控件的On-Comm事件可以捕獲相應通訊事件(如串口有數據到達),并且可以在OnComm事件處理函數中加入與該通訊事件相對應的處理代碼,對來自USBKey的消息進行正確及時的響應。
本文提出的基于網絡的文件加密系統已成功實現了服務端對客戶端進行遠程加解密操作,并且通過使用USBKey,服務端成功對用戶進行了身份認證,確保了操作人的合法性。后續還會加上對服務端的合法性認證,使其成為雙向身份認證進一步提高系統安全性。
隨著大數據時代的到來,數據正以指數速度迅速膨脹,其中包括大量敏感數據、隱私數據。對于大數據,現有的加密系統在加密效率上已無法滿足需要,因此可以在該系統的基礎上進行改進,將數據分段上傳到多個云加密服務提供商進行多Key加密,這樣就極大的提高了大數據文件的加密效率以及安全性。
[1] 盧秀慧.基于RSA快速加密算法的網絡文件加密系統設計[D].太原:中北大學,2013.
LU Xiu-hui.File Encryption Based on RSA Encryption Algorithm Fast Network System Design[D].Taiyuan:U-niversity of North,2013.
[2] 吳文玲,張月玲.關于NOEKEON分組密碼[J].中國科學院研究生院學報,2002,19(02):168-171.
WU Wen-ling,ZHANG Yue-ling.About NOEKEON Block Cipher[J].Journal of Graduate School of Chinese Academy of Sciences,2002,19(2):168-171.
[3] 劉傳領,范建華.RSA非對稱加密算法在數字簽名中的應用研究[J].通信技術,2009,42(03):192-193.
LIU Chuan-ling,FAN Jian-hua.RSA Asymmetric Encryption Algorithm in The Application of Digital Signature Research[J].Journal of Communications Technology, 2009(3):192-193.
[4] 王俊鋒.USBKey認證研究與實現[D].武漢:華中科技大學,2009.
WANG Jun-feng.Research And Implementation of USBKey Authentication[D].Wuhan:Huazhong University of Science and Technology,2009.
[5] 王廣偉,李維釗.Windows Sockets網絡編程[J].計算機應用研究,2000,17(08):51-54.
WANG Guang-wei,LI Wei-zhao.Windows Sockets Network Programming[J].Computer Application Research, 2000,17(8):51-54.
HE Wen-cai(1956-),male,professor,M.Sci.,mainly working at wireless data communication,network security,coding theory.
關少華(1987—),男,學士,主要研究方向為信息安全;
GUAN Shao-hua(1987-),male,B.Sci.,majoring in information security.
薛 晗(1989—),男,學士,主要研究方向為信息安全;
XUE Han(1989-),male,B.Sci.,majoring in information security.
劉培鶴(1972—),男,學士,主要研究方向為信息安全。
LIU Pei-he(1972-),male,B.Sci.,majoring in information security.
Research and Implementation of A File Encryption Method based on Network
HE Wen-cai1,GUAN Shao-hua1,2,XUE Han1,2,LIU Pei-he1
(1.Beijing Electronic Science&Technology Institute,Beijing 100070,China;2.Xidian University,Xian Shaanxi 710071,China)
Nowadays,the Internet has completely integrated into people's daily life and work,and it is greatly convenient for people to obtain and transmit information.In order to make data encryption to meet the needs of more application scenario,a network file encryption system is built in Visual Studio 2010 platform.The system uses C/S architecture,the client completes the function of user interface and user operation,and the server implements specific encryption step.The system is applied to the application layer of the OSI reference model,with the end-to-end encryption.Files on the network are transmitted in the form of cipher text,thus to ensure the file security in the transmission process.
file encryption;NOEKEON;RSA;network programming;USBKey
TP309.7
A
1002-0802(2014)08-0946-05
10.3969/j.issn.1002-0802.2014.08.021
何文才(1956—),男,教授,碩士,主要研究方向為無線數據通信、網絡安全、編碼理論;
2014-05-09;
2014-06-09 Received date:2014-05-09;Revised date:2014-06-09