高新成
(東北石油大學現代教育技術中心,黑龍江 大慶 163318)
王莉利,李蘇龍
(東北石油大學計算機與信息技術學院,黑龍江 大慶 163318)
?
基于RSA算法的圖像加密系統設計與實現
高新成
(東北石油大學現代教育技術中心,黑龍江 大慶 163318)
王莉利,李蘇龍
(東北石油大學計算機與信息技術學院,黑龍江 大慶 163318)
隨著互聯網的快速發展,數字圖像網絡傳輸的安全問題日益突出。采用RSA非對稱的加密體制,提出了一套完整的基于RSA算法的圖像加密解決方法,并對多種算法進行優化。試驗數據測試表明,該方法具有加密、解密速度快,密鑰復雜破譯難度大,網絡傳輸安全性高等優點。
RSA;圖像加密;算法優化;圖像安全
圖像數據的獲取、傳輸和處理已經遍及了數字時代的各個角落,圖像的安全問題日益嚴重,尤其是在軍事、商業和醫療等特殊領域[1]。RSA是一種目前被公開應用的加密算法,它采用非對稱的加密體制[2]。下面,筆者在研究圖像加密算法的基礎上,將RSA算法應用到圖像加密技術中,重點研究了算法優化、密鑰生成、密鑰分發和文件傳輸等內容,提出了一套完整的數字圖像加密和解密解決方案。
RSA算法采用一種非對稱密碼加密體制,在整個加密過程中密鑰和算法獨立分開,使得密鑰更能有效的等到分配[3]。其采用大素數因子分解的難度來保障安全性,目前,大素數分解問題仍然沒有很好的解決方法[4]。
RSA算法加密的基本步驟如下:
Step1 選取不同的2個大素數a,b,然后計算2個數乘積m=a×b。
Step2 選取大整數加密密鑰d,要求d與(a-1)×(b-1)互質。
Step3 求解密密鑰e,e×d =1 mod(a -1)×(b -1)。
Step4 將明文P加密為密文C(C=Pdmod m),密文C解密為明文P(P=Cemod m)。
根據以上步驟可以看出,只知道m和d不能計算出解密密鑰e,可見,任何人都可以對明文P進行加密,但只有獲得授權許可后才能對密文C進行解密。
RSA圖像加密流程設計是先對圖像進行讀取并轉化成十六進制數據流;然后生成RSA算法所需密鑰,將密鑰與圖像進行冪乘及取模運算,生成十進制數據;最后將數據轉換為字符串數據流進行保存。其中,最重要的是密鑰的生成[5,6],其決定最后圖像加密效果。密鑰的生成過程包括自動生成大素數并存儲、對大素數進行算術運算、大數冪模與乘模運算和素數的自動生成4部分,具體加密流程如圖1所示。
根據RSA圖像加密流程,設計圖像加密功能,主要包括RSA圖像加密、解密和密鑰生成等功能。系統功能模塊如圖2所示。

圖1 RSA圖像加密流程圖
1)數字圖像加密。對數字圖像進行字節流的讀取并轉換為十六進制流,應用RSA算法對十六進制流進行加密,將加密后的數據轉化為文本輸出。
2)數字圖像解密。加載加密后圖像文件,利用密鑰對其進行解密,對加密的圖像進行還原。

圖2 系統功能模塊圖
3)加密解密預覽。在數字圖像加密解密過程中,確保待加密及解密后的數字圖像可視化。
4)密鑰自動生成。RSA算法需要用戶自定義輸入2個大素數,主要實現自動生成大素數及密鑰以減少用戶操作,并能確保密鑰使用的素數足夠大。
5)密鑰長度設定。用戶可根據不同情況設定密鑰的長度,能夠靈活控制加密和解密速度。
6)密鑰文件導出。以文件形式導出密鑰文件,確保傳輸或存儲過程的安全性。
7)密鑰文件導入。對導出的密鑰文件進行讀入,具有識別功能。可以識別本軟件導出的密鑰文件,并對內容檢查,確保導入文件安全。
8)密鑰輸入。解密時支持手動輸入加密處理的密鑰串,確保解密操作安全。
9)文件打印。實現對密鑰文件的打印,可以更好的保存私鑰。
10)文件傳輸。實現加密后的文件及圖像直接傳輸,方便快捷且能更好的確保安全。
4.1 RSA密鑰的大數存儲
RSA算法生成密鑰需要2個大素數為21024或更大比較安全[7]。但編程語言中unsigned int類型最多存儲2個字節,遠遠小于RSA安全密鑰長度。筆者設計單元線性數組實現大素數存儲,解決編程中大素數的存儲問題。首先設置一個以unsigned為單元的線性數組用來存儲大素數,定義2個無符號整數z和 n來控制存儲單元數,z是分配空間的單元數,如果大素數的長度超過unsigned數組的預定義數組長度,z會隨著數字變大不斷增大;n表示當前存儲大素數已占用單元數。每個大素數最大可以達到232*占用單元數滿足RSA的各種運算。
4.2 RSA密鑰的大數運算
由于生成的大素數超過21024,原有數據運算方式不再適用。在大數存儲基礎上采用類間派生與關聯方式實現大數運算。定義flex_unit派生得到vlong_value類實現新的運算函數,將原vlong_value類關聯到新類vlong中,在新vlong類實現運算符重載。本類運算是按一定數制對數字的計算,乘除和取余也都按照豎式運算的原理實現。加運算的核心代碼如下:
vlong operator +( const vlong& x, const vlong& y )
{ vlong result = x;
result += y;
return result; }
4.3 大素數冪模與乘模運算優化
冪模運算是RSA 算法中比重最大的計算,其主要決定生成最后的公鑰和私鑰,直接地決定了RSA 算法的性能[8]。依據乘模的性質 ,把冪模運算轉換成乘模運算,實現思想是指數不斷的對分,具體流程如圖3所示。

圖3 冪模轉換乘模運算流程圖
乘模運算能夠提高運算速度,通常對于千位以上的二進制整數n,利用普通除法求模運算速度很慢[9]。筆者采用Montgomery算法[10]實現冪乘運算的優化來提高加密速度,改進思想是先選取與模數m互素的基數Y(Y=2k),m為奇數滿足2k-1≤m<2k,再選取Y-1(0< Y-1 4.4 算法中素數自動生成及優化 筆者采用Eratosthenes篩選法[11]對素數篩選進行優化,優化策略是對各小素數因子求模,得到當前a在素數搜索范圍內的最小倍數在b[]中的對應位置,繼續后移a個位置,直到將a在搜索范圍內的所有倍數全部找到;在完成對所有小素數因子的類似操作后,其倍數在搜索范圍內的位置標記b[r]被全部標記為0。其流程如圖4所示。 圖4 素數搜索除去小素數因子倍數流程圖 筆者采用費馬小定理[12]對素數測試進行優化,化策略是選取一個整數P,要求與a互素,并滿足關系式為Pa-1mod a=1,輸入大整數a滿足關系式可能不是素數,需要改變P完成多次測試,測試后這個數很大概率為素數。 系統設計采用分層結構,上層界面設計采用C#語言,底層加密算法開發采用C++語言,通過調用RSA算法的C++類庫和封裝的DLL組件以及引用DLL的.NET類等,逐步實現完成系統中各項功能與界面。 圖像加密操作過程:首選將待加密圖像載入,其次讀取并存儲為二進制List和轉換為十六進制數據,然后調用前面自動生成的密鑰進行冪模運算,最后輸出加密后文本。具體圖像加密過程和加密效果如圖5和圖6所示。 圖5 圖像加密操作界面 圖6 加密后記事本打開效果 圖像解密操作過程如下:首選載入待解密文件,然后導入加密過程密鑰,最后輸出解密后文件。 6.1 密鑰生成試驗結果與分析 1)底數A對密鑰生成時間影響。在底數A的試驗測試中,n取512位和1024位,小素數因子個數NP取值300,A值選取4到6個,測試結果如表1所示。 表1 底數A對密鑰生成時間的影響 表1結果表明,采用512bit密鑰對隨機密鑰的產生時間影響不大,而采用1024bit密鑰生成時間有著明顯差距,A取6個值時生成隨機密鑰的時間比取4個值時長大很多。為保證密鑰生成速度和素數的準確程度,在實際使用時取A為5個值。 2)n的位數對密鑰生成時間影響。在加密位數n的試驗測試中,A取值2、3、5、7,NP取300,n值自動改變,進行5次隨機密鑰生成,測試結果如表2所示。 表2 加密位數n密鑰生成時間的影響 表2結果表明,隨著加密位數的增加,密鑰生成需要的時間顯著增加,并且每一行中的最大最小值差距也呈增長趨勢。 3)小素數因子個數NP對密鑰生成時間影響。在小素數因子個數NP的測試中,A取值2、3、5、7、11,n取512位和1024位,測試結果如表3所示。 表3 小素數因子NP對密鑰生成時間的影響 通過表3結果發現,NP為300、n為1024bit時與表2中A為2、3、5、7、11,n為1024bit中一行參數設置完全一致,但平均耗時相差6.5s。可見對于長密鑰,同一種情況測試5個數據取均值并不能精確的說明問題。 6.2 加密解密試驗結果與分析 1)加密文件大小與消耗時間影響分析。選取大小為50、100、150、200和250Byte這5種圖像數據文件,隨機生成2組長度512bit和1024bit的密鑰。用同樣的密鑰對大小不同的文件完成公鑰加密和私鑰解密試驗,記錄加密文件大小與消耗時間的關系,如表4所示。 表4 加密文件與消耗時間關系 表4結果表明,對于使用同一公鑰加密文件時,文件越大加密過程中使用時間越長。對于一定的加密位數,私鑰解密所需要的時間比公鑰加密時間長;對于一定大小的文件,密鑰長度越長,私鑰解密與公鑰加密的耗時比越大。 2)加密字節步長對效率的影響分析。選取一個480Byte長的文件作為加密對象,分別對512bit完成公鑰加密和私鑰解密試驗,記錄加密和解密使用的時間,如表5所示。 表5 加密字節步長對效率的影響 表5結果表明,加密步長設置越大,加密和解密運算速度越快,加密后生成的文件體積越小。所以在使用RSA加密時,設置使用合適的數據分塊也是提高加密速度的關鍵。 6.3 系統運行效率分析 通過試驗發現系統運算消耗的時間大部分集中在C++類庫,表現在冪模運算和尋找素數對時間的消耗最大,筆者通過對冪模運算和素數篩選等相關算法進行優化,運算效率有了較大提高,同時,對文件進行加密解密時,先將文件按一定的數據結構讀入內存,然后從內存中讀取運算數據進行加密或解密操作,大大減少了圖像輸入和輸出的執行時間。 重點研究了RSA算法在圖像加密和解密中的關鍵技術,提出了一種高效的基于RSA算法的圖像加密方法,同時對素數篩選、求模等關鍵算法進行優化,進一步提升加密準確性和加密速度。通過對密鑰生成和加密解密試驗數據的對比分析,該方法不僅提高了加密速度,增加了破譯難度,增強了網絡傳輸安全性,而且還適用于任意二進制和文本文件等各種數據,有良好的推廣應用價值。 [1]王秋紅. 密碼學基本原理綜述[J]. 科技資訊, 2011(33) :52~53. [2]吉勝軍. 基于信息隱藏的軟件加密方案[J].大眾科技, 2010(8): 38~39. [3]Sarkar S,Maitra S. Cryptanalysis of RSA with two decryption exponents[J]. Information Processing Letters,2009 (5):1235~1238. [4]楊昔陽,李志偉. 基于RSA的數字圖像加密算法[J]. 福建師范大學學報(自然科學版), 2009(6):28~32. [5]鄧從政,羅永超.一種基于RSA的數字圖象加密技術及其快速實現[J]. 通信技術, 2009(12):67~69. [6]Brier E,Chevallier-Mames B,Ciet M,et al.Why One Should Also Secure RSA Public Key Elements. Lecture Notes in Computer Science,2006. [7]Fouque P A,Guillermin N,Leresteux D,et al. Attacking RSA-CRT signatures with faults on montgomery multiplication[J]. Journal of Cryptographic Engineering, 2013(1) :1021~1024. [8]劉平,趙煥平. 改進RSA算法的分析研究[J]. 計算機與現代化, 2013(7):76~79. [9]姚霽. RSA算法中大素數硬件生成方法研究與設計[J]. 科學技術與工程,2013(1):212~214. [10]曾為民,劉晶晶, 陳光化,等. 基于Montgomery算法的RSA密碼協處理器設計[J]. 微電子學與計算機,2015(8):115~119. [11]孫東雪. 基于Eratosthenes算法快速求解質數的程序設計[J]. 科技傳播,2014(6):245~247. [12]黃嘉威. 多項式除法解高次同余[J]. 數學學習與研究,2015(9):104~106. [編輯] 張濤 2016-06-27 國家自然科學基金項目(41574117) ;黑龍江省教育科學規劃重點課題(GJB1215013, GJB1215018);黑龍江省高教學會教育科研課題(16G154,16G160, 16Q117)。 高新成(1979-),男,博士,副教授,現主要從事數據處理與信息安全等方面研究工作;E-mail:gxc@nepu.edu.cn。 TP399 A 1673-1409(2016)25-0014-06 [引著格式]高新成,王莉利,李蘇龍.基于RSA算法的圖像加密系統設計與實現[J].長江大學學報(自科版),2015,13(25):14~19.
5 系統實現界面

6 試驗測試與系統分析





7 結語