趙鑫
摘要:RSA公鑰加密算法當今十分受歡迎,它的特點就是能夠?qū)嵲跀?shù)據(jù)加密的,同時在數(shù)字簽名的算法中也得到了廣泛的應用。更主要的是軟件更容易操作與理解。本文首先對RSA算法的現(xiàn)狀進行分析,進一步論述文件加密應用RSA算法的可行性和意義。對RSA算法深入研究,設計出一套非常實用的加密文件解決方案,從常規(guī)RSA算法出發(fā),用C++實現(xiàn)RSA加密算法類庫,在.Net平臺引用此組件,實現(xiàn)可以對任意文件進行RSA加密操作的窗體應用程序。
關鍵詞:RSA RSA算法 文件加密 加密成文本
中圖分類號:TP393.08 文獻標識碼:A 文章編號:1007-9416(2014)08-0173-03
1 RSA應用現(xiàn)狀及應用于文件加密的分析
1.1 RSA算法介紹與應用現(xiàn)狀
RSA算法已經(jīng)有二十年的歷史,它通過了各種破解的考驗,如今,已廣泛的被人們所接受,被公認為是最佳的分鑰之一,RSA算法它主要分為三個部份,加密、解密數(shù)據(jù)和生成RSA密鑰,是公鑰密碼算法最為容易理解與操作的一種,RSA的安全性依賴于大數(shù)的因子分解,但并沒有從理論上證明破譯RSA的難度與大數(shù)分解難度等價。
1.2 RSA應用于文件加密的分析
(1)文件加密使用RSA的可行性;如今,RSA技術一般在一些小數(shù)據(jù)方面的加密解密得到廣泛應用,例如,數(shù)字證書和簽名。這是因為RSA算法加密在過程中速度非常慢,和速度非??斓腄ES對稱密鑰加密技術相比,只是它的千分之一而已。所以,在一些普通文件加密方面一直沒有得到重視,現(xiàn)在由于PC性能的快速發(fā)展,即使RSA加密運算速度不是很快,但對于一個幾千字節(jié)的數(shù)據(jù)做出幾百位的加密這一特點,所以在時間消耗方面還是可以被人們所能接受的。(2)RSA文件加密的意義;RSA在被廣泛的應用中,它的安全性得到了大量事實的證明,技術方面也同時日趨成熟,因此,人們對RSA技術也越來越重視。但在RSA加密文件時,它的算法之中含有大數(shù)的乘方運算,而計算機要消耗太多的時間去運算這些數(shù)據(jù),加密的效率會受到很大程度的影響,嚴重的限制了它的普遍利用。如今,人們正在對如何提高RSA的運算速度做為重點研究對象,具有十分現(xiàn)實意義。
2 RSA文件加密軟件的設計與實現(xiàn)
2.1 RSA文件加密軟件的設計
2.1.1 功能分析
將對軟件的要求總結(jié)如下:
(1)對軟件界面要求簡潔明了,操作容易。(2)設計中要完成非對稱密鑰。(3)加密之后自動生成的數(shù)據(jù)格式為純文本。(4)對加密過的文件可以做到安裝與卸載。并能還原文件。(5)密鑰和裝載密鑰進行保存。根據(jù)功能分析后,得出Use Case和Statechart流程。(見圖1)
2.1.2 工程方案選擇
工程設計方案選用了比較穩(wěn)妥的方法----分層設計。因為這一方法具有可維護性、復用性及執(zhí)行效率這一特點。用C++類庫來實現(xiàn)RSA算法最核心的部份,運用這種開發(fā)方式,最底層集中了整個設計的核心功能,在不斷的封裝中針對具體環(huán)境對組件功能不斷擴充,任意一個層面的封裝都可以被直接應用到其他項目,但是每一層都需要依賴底層的所有組件。下圖2 分別介紹了層設計的優(yōu)點。
在整個設計過程中,工程分四層,分別為RSA加密算法的C++核心類庫、封裝C++核心類庫的DLL組件、引用DLL的.Net類、實現(xiàn)文件操作功能的.Net窗體應用程序。上層使用C#,底層算法使用C++,可以由一個Visual Studio解決方案管理,給調(diào)試帶來極大的方便。
2.2 RSA文件加密軟件部分的設計與開發(fā)
2.2.1 大數(shù)冪模與乘模運算·Montgomery冪模算法
的情況下。整個設計需要實現(xiàn)vlong類型,這樣大部份的四則運算和存儲功能就基本完成。但在RSA算法之中要加入冪模運算,要完成這一運算,需要寫入一個vlong的友元,在RSA算法之中,冪模運算直接決定它的性能,所以在整個設計之中最為重要的運算之一,西方學者針對冪模運算提出了多種解決辦法,發(fā)現(xiàn)都是通過乘模的分解性質(zhì),先將冪模運算轉(zhuǎn)化為乘模運算。
一般情況下。分解指的是將指數(shù)分為對半,如果需要分解的指數(shù)是奇數(shù)。那就需要減去一半,將其變成偶數(shù),之后再對指數(shù)進行分半處理,,例如求D=,E=15,可分解為如下6個乘模運算。
根據(jù)上述辦法進行分析,對于任意指數(shù)E,見下面圖3流程圖進行分析。
在本次設計之中,運用的乘模算法是M(A*B,它做為RSA核心運算,但它并非是RSA想要的真正運算結(jié)果,還需要在冪模算法中進行二次修改,這樣的話就可以在乘模算法之中正常計算了。在設計過程中,最初時并沒有運用Montgomery 乘模算法,速度一定沒有Montgomery乘模算法快,但加密整度相差并不大。此次設計中結(jié)合冪模算法,最后形成標準Montgomery冪模算法,代碼如下:
在具體的實現(xiàn)中,使用的時候直接調(diào)用modexp即可。
2.2.2 核心類庫綜述
在實現(xiàn)RSA加密算法之中,所運用的C++核心類庫是由6個類組成而成,類名和對應的功能如表1。
類之間的關系如圖4。
在設計核心類為時應用了輾轉(zhuǎn)相除法求最大公約數(shù)的函數(shù)gcd、解同余方程的函數(shù)modinv等。這些在程序之中并不歸類于任何全局函數(shù),通常情況下,設計之中并不應該出現(xiàn)類以外的函數(shù)。但這些函數(shù)頻繁的被使用,設計時也考慮到要置于全局,機器的效率等因素,所以并沒有另行進行包裝。
2.2.3 引用DLL的.Net類與實現(xiàn)文件操作功能的窗體應用程序
在C#編寫的.Net類里,使用特性[DllImport("sanpack_rsa.dll")]引用C接口的DLL組件。類中接口DLL的函數(shù)都以靜態(tài)成員的方式對外公開,其他.Net程序可以直接使用。在類庫中還提供了任意長度隨機串的生成函數(shù),此函數(shù)用于生成尋找素數(shù)的大數(shù)起點。endprint
文件操作使用.Net基礎類庫中的System.IO中的類實現(xiàn)。一般因為文件操作十分簡單,用流輸入輸出的方式包裝完成,程序中將文件操作直接放在菜單項關聯(lián)的事件處理函數(shù)中。
窗體等圖形操作界面直接由Visual Studio的所見即所得的方式完成,不需要編碼實現(xiàn)。
最終實現(xiàn)的應用程序,結(jié)構(gòu)如圖5所示。
3 性能分析與改進優(yōu)化
根據(jù)對此軟件的測試,軟件需要對以下幾點進一步改進和優(yōu)化。
(1)在要對文件進行加密解密的時候,先將文件按一定的數(shù)據(jù)結(jié)構(gòu)讀入內(nèi)存,然后進行加密或解密操作。運算數(shù)據(jù)都讀取自內(nèi)存。(2)在對加密或解密完成的數(shù)據(jù)進行寫出的時候,都是將其直接寫到指定好的文件,即直接寫入磁盤。這是因為,考慮到中途可能因為意外斷電等原因引起操作中斷,為了保護已經(jīng)花費時間運算完成的數(shù)據(jù),將其直接寫入磁盤。(3)在關鍵算法上做進一步優(yōu)化,例如在尋找素數(shù)時,素數(shù)測試使用更快速的算法;還有3.3節(jié)提到的,在用私有密鑰進行冪模運算時使用中國余數(shù)定理等。(4)對C++核心類庫進行重點優(yōu)化,使其運算效率盡可能提高。其中包括對各類之間的組織細節(jié)、各程序模塊的具體編寫等,進行全面細致的檢查和修改,例如將大數(shù)據(jù)類型以對象指針傳遞而不拷貝,將簡單的for循環(huán)展開等。
4 結(jié)語
本文分析了利用文件夾的加密來實現(xiàn)對文件或程序的保護方案。采用了“對稱式”加密技術即采用文件逐字節(jié)與密碼異或方式對文件或可執(zhí)行程序加密。選用C++編程語言,設計了一個加密程序,該軟件不拘泥于花俏的界面,僅使用了一個簡單的對話框,具有簡單實用的特點。在該方案的實現(xiàn)中,由于使用了可靠的密碼學算法,使軟件加密的強度大大提高。
參考文獻
[1]菲菲.利用Windows7中的自帶功能實現(xiàn)U盤加密[J].網(wǎng)絡與信息,2010(1).
[2]包奇金寶,張景龍.使用PCTOOLS輕松破解高強度加密大師[J].科技創(chuàng)新導報,2009(33).
[3]夏云程.企業(yè)辦公系統(tǒng)的信息安全及控制措施[J].現(xiàn)代經(jīng)濟信息,2008(11).
[4]Heather Clancy,梁曉平.破解數(shù)據(jù)加密難題[J].創(chuàng)業(yè)邦,2010(5).
[5]陳惠風.小議異或算法實現(xiàn)外殼加密的程序設計[J].中小企業(yè)管理與科技(下旬刊),2009(10).endprint
文件操作使用.Net基礎類庫中的System.IO中的類實現(xiàn)。一般因為文件操作十分簡單,用流輸入輸出的方式包裝完成,程序中將文件操作直接放在菜單項關聯(lián)的事件處理函數(shù)中。
窗體等圖形操作界面直接由Visual Studio的所見即所得的方式完成,不需要編碼實現(xiàn)。
最終實現(xiàn)的應用程序,結(jié)構(gòu)如圖5所示。
3 性能分析與改進優(yōu)化
根據(jù)對此軟件的測試,軟件需要對以下幾點進一步改進和優(yōu)化。
(1)在要對文件進行加密解密的時候,先將文件按一定的數(shù)據(jù)結(jié)構(gòu)讀入內(nèi)存,然后進行加密或解密操作。運算數(shù)據(jù)都讀取自內(nèi)存。(2)在對加密或解密完成的數(shù)據(jù)進行寫出的時候,都是將其直接寫到指定好的文件,即直接寫入磁盤。這是因為,考慮到中途可能因為意外斷電等原因引起操作中斷,為了保護已經(jīng)花費時間運算完成的數(shù)據(jù),將其直接寫入磁盤。(3)在關鍵算法上做進一步優(yōu)化,例如在尋找素數(shù)時,素數(shù)測試使用更快速的算法;還有3.3節(jié)提到的,在用私有密鑰進行冪模運算時使用中國余數(shù)定理等。(4)對C++核心類庫進行重點優(yōu)化,使其運算效率盡可能提高。其中包括對各類之間的組織細節(jié)、各程序模塊的具體編寫等,進行全面細致的檢查和修改,例如將大數(shù)據(jù)類型以對象指針傳遞而不拷貝,將簡單的for循環(huán)展開等。
4 結(jié)語
本文分析了利用文件夾的加密來實現(xiàn)對文件或程序的保護方案。采用了“對稱式”加密技術即采用文件逐字節(jié)與密碼異或方式對文件或可執(zhí)行程序加密。選用C++編程語言,設計了一個加密程序,該軟件不拘泥于花俏的界面,僅使用了一個簡單的對話框,具有簡單實用的特點。在該方案的實現(xiàn)中,由于使用了可靠的密碼學算法,使軟件加密的強度大大提高。
參考文獻
[1]菲菲.利用Windows7中的自帶功能實現(xiàn)U盤加密[J].網(wǎng)絡與信息,2010(1).
[2]包奇金寶,張景龍.使用PCTOOLS輕松破解高強度加密大師[J].科技創(chuàng)新導報,2009(33).
[3]夏云程.企業(yè)辦公系統(tǒng)的信息安全及控制措施[J].現(xiàn)代經(jīng)濟信息,2008(11).
[4]Heather Clancy,梁曉平.破解數(shù)據(jù)加密難題[J].創(chuàng)業(yè)邦,2010(5).
[5]陳惠風.小議異或算法實現(xiàn)外殼加密的程序設計[J].中小企業(yè)管理與科技(下旬刊),2009(10).endprint
文件操作使用.Net基礎類庫中的System.IO中的類實現(xiàn)。一般因為文件操作十分簡單,用流輸入輸出的方式包裝完成,程序中將文件操作直接放在菜單項關聯(lián)的事件處理函數(shù)中。
窗體等圖形操作界面直接由Visual Studio的所見即所得的方式完成,不需要編碼實現(xiàn)。
最終實現(xiàn)的應用程序,結(jié)構(gòu)如圖5所示。
3 性能分析與改進優(yōu)化
根據(jù)對此軟件的測試,軟件需要對以下幾點進一步改進和優(yōu)化。
(1)在要對文件進行加密解密的時候,先將文件按一定的數(shù)據(jù)結(jié)構(gòu)讀入內(nèi)存,然后進行加密或解密操作。運算數(shù)據(jù)都讀取自內(nèi)存。(2)在對加密或解密完成的數(shù)據(jù)進行寫出的時候,都是將其直接寫到指定好的文件,即直接寫入磁盤。這是因為,考慮到中途可能因為意外斷電等原因引起操作中斷,為了保護已經(jīng)花費時間運算完成的數(shù)據(jù),將其直接寫入磁盤。(3)在關鍵算法上做進一步優(yōu)化,例如在尋找素數(shù)時,素數(shù)測試使用更快速的算法;還有3.3節(jié)提到的,在用私有密鑰進行冪模運算時使用中國余數(shù)定理等。(4)對C++核心類庫進行重點優(yōu)化,使其運算效率盡可能提高。其中包括對各類之間的組織細節(jié)、各程序模塊的具體編寫等,進行全面細致的檢查和修改,例如將大數(shù)據(jù)類型以對象指針傳遞而不拷貝,將簡單的for循環(huán)展開等。
4 結(jié)語
本文分析了利用文件夾的加密來實現(xiàn)對文件或程序的保護方案。采用了“對稱式”加密技術即采用文件逐字節(jié)與密碼異或方式對文件或可執(zhí)行程序加密。選用C++編程語言,設計了一個加密程序,該軟件不拘泥于花俏的界面,僅使用了一個簡單的對話框,具有簡單實用的特點。在該方案的實現(xiàn)中,由于使用了可靠的密碼學算法,使軟件加密的強度大大提高。
參考文獻
[1]菲菲.利用Windows7中的自帶功能實現(xiàn)U盤加密[J].網(wǎng)絡與信息,2010(1).
[2]包奇金寶,張景龍.使用PCTOOLS輕松破解高強度加密大師[J].科技創(chuàng)新導報,2009(33).
[3]夏云程.企業(yè)辦公系統(tǒng)的信息安全及控制措施[J].現(xiàn)代經(jīng)濟信息,2008(11).
[4]Heather Clancy,梁曉平.破解數(shù)據(jù)加密難題[J].創(chuàng)業(yè)邦,2010(5).
[5]陳惠風.小議異或算法實現(xiàn)外殼加密的程序設計[J].中小企業(yè)管理與科技(下旬刊),2009(10).endprint