王 煜,朱 明,夏 演
(1.安徽大學 電子信息工程學院,安徽 合肥 230601;2.安徽理工大學 計算機科學與工程學院,安徽 淮南 232001)
隨著信息時代的快速發(fā)展,網絡給人們帶來的信息安全問題越來越嚴重,亦是當前社會急需解決的一個難題。近年來,國內外主要通過加密的方式來保證信息的安全。1977年美國國家標準局正式公布了一種數據加密標準DES(data encryption standard)[1],這是第一個加密算法。但是隨著DES的廣泛應用,人們發(fā)現(xiàn)DES有個明顯的弱點,那就是它的密鑰長度太短,安全性受到質疑。后來,美國國家標準與技術研究院聯(lián)合發(fā)布了高級加密標準AES(advanced encryption standard)[2]。這種算法的安全性和實用性無疑是優(yōu)于DES算法的,但這兩者都屬于對稱密碼體制,在這個密碼體制中加密和解密使用的是同一個密鑰,而且整個系統(tǒng)的保密性主要取決于密鑰的保密性,一旦密鑰泄露,將會給整個系統(tǒng)帶來威脅。數字加密技術不僅包括對稱加密技術,還包括非對稱加密技術[3]。1978年,Rivest,Shamir和Adleman提出了一個比較完善的公鑰體制RSA(Rivest,Shamir和Adleman姓氏開頭字母的組合)[4],它的密鑰包括公鑰和私鑰,公鑰是對外公開的,私鑰由用戶保存,這樣就避免了密鑰被泄露的可能性,從而更好地保障了信息的安全。
1.1.1 PKI的定義
PKI(public key infrastructure)即公開密鑰基礎設施體系,是一種網絡基礎服務設施,它充分利用公鑰密碼學的理論基礎,為密鑰和證書建立了一個安全的網絡環(huán)境,為各種網絡應用提供了全面的安全服務[5]。RSA密碼機制包括一組密鑰,即公鑰和私鑰,私鑰由CA認證用戶獨自掌管,該用戶發(fā)布或傳遞用其私鑰加密的信息,只能用其對應的公鑰解密,進而證明信息的真正來源,即完成身份認證;公鑰是公開的,需要在網上公開,所以公鑰體制的密鑰管理主要針對公鑰進行管理[6]。
1.1.2 PKI公鑰體系結構
PKI主要用于公鑰的管理和數字簽名的服務,主要包括三個部分:認證中心(certification authority,CA)、服務提供商和用戶[7],如圖1所示。
圖1 PKI公鑰體系結構
(1)認證中心。CA中心是PKI的核心部分,主要負責證書的發(fā)放和管理,申請證書的用戶合法性的驗證以及密鑰的生成和管理。CA中心對密鑰的管理具有高度的保密性,而且可以保證密鑰在傳送過程中的完整性,所以CA中心頒布的證書具有合法性和權威性。
(2)服務提供商。服務提供商持本機構的合法營業(yè)執(zhí)照或合法公司的注冊信息向CA中心提交申請,從而獲得有CA數字簽名的證書。該證書中包含服務提供商加密信息時所需要的密鑰。
(3)用戶。當用戶需要驗證某個服務提供商提供的信息是否真實時,可以從CA中心下載該服務提供商的證書,此時CA中心會先驗證用戶身份的合法性,如果審核通過,則CA向用戶提供相應的證書,該證書中包含信息解密所需要的密鑰。
非對稱加密算法需要兩個密鑰:公鑰和私鑰。非對稱加密算法的公鑰和私鑰是成對產生的,如果用公鑰對信息加密,那么只能用對應的私鑰解密,相反,如果用私鑰對信息加密,那么只能用對應的公鑰解密。目前,RSA算法和ECC算法是應用最為廣泛的兩種非對稱加密算法[8]。下面對這兩種算法進行說明分析。
1.2.1 RSA算法
RSA算法是一種非對稱加密算法,也是目前最有影響力的公鑰加密算法。在RSA公開密鑰密碼體制中包含一組密鑰對,即公鑰和私鑰,公鑰對外公開,而私鑰是私密的,由用戶保管[9]。RSA算法的安全性依賴于大數的因式分解,將兩個大質數相乘很容易,但是要將其乘積因式分解則是非常困難的,所以用乘積作為加密密鑰,安全系數高。RSA算法的安全性主要基于大整數分解的困難(兩個素數的乘積),而且它數學原理簡單、在工程應用中比較易于實現(xiàn),但是它的單位安全強度相對較低。目前用國際上公認的對于RSA算法最有效的攻擊方法—一般數域篩(NFS)方法去破譯和攻擊RSA算法,它的破譯或求解難度是亞指數級[10]。在RSA中發(fā)送者有一個密鑰(加密指數,公鑰),接收者有一個密鑰(解密指數,公鑰)。加密指數也稱為公鑰,用于加密;解密指數也稱為私鑰,用于解密。RSA是目前最有影響力和最常用的公鑰加密算法,能夠抵抗到目前為止已知的絕大多數密碼攻擊,已被ISO推薦為公鑰數據加密標準[11]。身份認證技術是在計算機網絡中確認操作者身份的過程而產生的有效解決方法。
1.2.2 ECC算法
ECC(error correcting code)算法的安全性主要基于有限域上的橢圓曲線離散對數問題,在工程應用中比較難于實現(xiàn),但它的單位安全強度相對較高。用國際上公認的對于ECC算法最有效的攻擊方法—Pollard rho方法去破譯和攻擊ECC算法,它的破譯或求解難度基本上是指數級。ECC算法目前僅僅只能完成密鑰的生成與解析,如果想要獲得ECC算法實現(xiàn),需要調用硬件完成加密/解密,這過程相對而言是比較復雜的,所以文中主要對RSA算法進行研究。
無論是RSA算法還是ECC算法,由于采用公鑰加密,所以很難證明加密后的密文是來自真正的發(fā)送者,即很難證明信息的真?zhèn)?,也就是很難驗證信息發(fā)布者的真實身份。為了較好地解決這個問題,文中提出了私鑰加密公鑰解密的思想。
RSA密鑰是成對產生的,而且公鑰和私鑰是一對大素數(100到200位十進制數或更大)的函數。通過公鑰和密文來恢復明文,等價于分解兩個大素數之積,難度非常大[12-13]。
RSA密鑰的生成算法如下:
(1)隨機產生兩個大素數p和q,且p、q互異;
(2)計算n=p*q,同時令φ(n)=(p-1)(q-1);
(3)隨機產生一個與φ(n)互質的整數e,令gcd(e,φ(n))=1,且滿足1 (4)計算d≡e-1(modφ(n)),即d*e≡1(modφ(n)); (5)公鑰PU={e,n},私鑰PR={d,n}。 注:p和q保密。gcd()函數的作用是返回兩個或多個證書的最大公約數。≡是數論中表示同余的符號,它的左右兩邊必須同余,也就是兩邊的模運算結果相同。 首先將明文編碼成整數分組m,m對應的十進制數小于n,即整數分組m的位數小于log2nbits,然后再對每個分組用私鑰PR={d,n}進行加密操作[14-15]。其中c為密文,即c=E(m)≡md(modn)。 利用公鑰PU={e,n}對密文c進行解密,得到明文m,即m=D(c)≡ce(modn)。 算法性能的好壞直接決定了整個系統(tǒng)的性能,所以在搭建一個系統(tǒng)之前選擇一個好的算法是至關重要的。通過對系統(tǒng)進行多次試驗測試,可以看出RSA算法具有一定的性能優(yōu)勢,如圖2所示。通過近10次重復計算統(tǒng)計,task-clock也就是運行的周期數,占用了0.943,說明大部分時間都是CPU的運行時間;同時通過對perf-stat的研究分析可得,程序的運行時間是6.288 ms,這表明程序運行的速率是非??斓腫11]。所以RSA算法在性能上具有一定的優(yōu)勢。 該系統(tǒng)設計了一個RSA工具集,主要包括密鑰生成器模塊、加密模塊和解密模塊。其中密鑰生成器模塊就扮演著PKI公鑰體系中CA認證中心的角色,管理著密鑰對。當加密文本或文件的時候,就向CA中心申請經過CA中心數字簽名的證書,CA中心在驗證申請者身份的真實合法性后,向其頒發(fā)證書,證書中包含加密所需的私鑰;當解密文本或文件的時候,就向CA中心申請訪問證書,這時需要向CA中心提供要訪問的對象以及自身的相關信息,CA中心在驗證其提供的信息的真實合法性后,向其頒發(fā)證書,證書中包含著解密所需的公鑰。加密模塊所扮演的就是PKI公鑰體系中服務提供商的角色,必要的時候向CA中心申請證書,獲取私鑰。解密模塊所扮演的就是PKI公鑰體系中用戶的角色,必要的時候向CA中心申請訪問證書,獲取公鑰。 2.4.1 密鑰生成器模塊 密鑰生成器主要負責生成一組密鑰,即公鑰和私鑰,然后將這兩個密鑰分別保存到相應的文件夾,以備后續(xù)的加密、解密使用。該系統(tǒng)的密鑰長度和數據的顯示形式都是可以選擇的。首先,密鑰的長度在512位到4 096位,原則上密鑰的長度越大,密鑰就越難破解,它的安全系數就越高,但同時解密的復雜度就越高,所需的時間也越長。該系統(tǒng)中選擇了512位密鑰長度。其次,在數據的顯示形式上,可以選擇二進制,也可以選擇十進制。當選擇好密鑰長度和顯示形式后,選中生成密鑰,這時系統(tǒng)會自動生成P,Q,n,E,D參數的值,而且系統(tǒng)會生成一個后綴名為PublicKey的公鑰文件和一個后綴名為PrivateKey的私鑰文件,這時將公鑰文件和私鑰文件分別保存到指定路徑。密鑰生成器模塊如圖2所示。 圖2 密鑰生成器模塊 2.4.2 加密模塊 加密模塊主要有加密文本和加密文件,如果是加密文本就直接在文本框中輸入要加密的信息,然后選擇密鑰路徑,這里是用私鑰進行加密,所以只要選中私鑰所在文件的路徑即可,最后點擊加密按鈕,則實現(xiàn)了對文本信息的加密。如果是加密文件,則需要分別選擇加密的密鑰路徑、明文路徑以及密文的存放路徑,然后選中加密按鈕,實現(xiàn)了對文件的加密。加密模塊如圖3所示。 2.4.3 解密模塊 解密模塊主要有解密文本和解密文件,如果是解密文本就直接在文本框中輸入要密文文本,然后選擇密鑰路徑,這里是用公鑰進行解密,所以只要選中公鑰所在文件的路徑即可,最后點擊解密按鈕,則實現(xiàn)了對文本信息的解密。如果是解密文件,則需要分別選擇解密的密鑰路徑、密文路徑以及明文的存放路徑,然后選中解密按鈕,實現(xiàn)對文件的解密。解密模塊如圖3所示。 圖3 加密、解密模塊 系統(tǒng)以微軟公司的Microsoft Visual Studio 2010作為開發(fā)的IDE工具,利用C#語言進行編程。系統(tǒng)主要包括三個模塊,分別為密鑰生成器模塊、加密模塊和解密模塊。 系統(tǒng)通過密鑰生成器生成密鑰對,即公鑰和私鑰,選擇密鑰長度為512位,顯示方式為十進制,然后點擊“生成密鑰”,得到P,Q,n,E,D所有參數的值,如圖4所示。密鑰生成后會彈出提示框顯示密鑰生成完畢以及生成密鑰所耗的時長,如圖5所示。最后,將私鑰、公鑰分別保存到相應的文件夾以備后面的加密、解密使用。 圖4 密鑰生成器模塊 這里以加密文本為例,比如對非對稱加密算法的研究進行加密。首先,點擊RSA工具集中的加密文本按鈕,如圖6所示。點進去后需要選擇加密密鑰的路徑,也就是私鑰所在的路徑,然后在左邊文本框中輸入要加密的文本信息,即非對稱加密算法的研究,如圖7所示。點擊加密,會發(fā)現(xiàn)右邊的模塊出現(xiàn)了信息加密后的密文,而且會彈出提示框顯示是否加密成功以及加密所耗的時長,如圖8所示。最后需要將密文保存在相應的文檔里,以備后面解密文本需要。 圖5 密鑰生成 圖6 RSA工具集 圖7 文本加密 圖8 文本加密完成 這里以解密文本為例,比如有一串密文需要解密。首先,點擊RSA工具集中的解密文本按鈕,如圖6所示。點進去后需要選擇解密密鑰的路徑,也就是公鑰所在的路徑,然后在左邊文本框中粘貼要密文文本,如圖9所示。點擊解密發(fā)現(xiàn)右邊的模塊出現(xiàn)了解密后的文本,而且會彈出提示框顯示是否解密成功以及解密所耗的時長,如圖10所示。最后通過將解密后的文本與明文作對比,可以檢驗系統(tǒng)的準確性。 圖9 文本解密 圖10 文本解密完成 文中主要研究了非對稱加密算法—RSA算法,它是目前最有影響力且應用最廣泛的公鑰加密算法。RSA算法中主要包含一組密鑰,即公鑰和私鑰,用來對信息進行加密和解密。文中主要利用私鑰進行加密,公鑰進行解密,由于密鑰是整個方案的核心,所以提出用PKI公鑰體系來自動生成和管理密鑰,對于密鑰的分發(fā)都需要經過CA中心的審核,審核通過后才會通過一定的安全途徑分發(fā)密鑰,這大大增加了密鑰的安全性。采用公鑰進行解密無疑降低了信息的保密程度,如何解決這個問題是今后繼續(xù)研究的重點,例如是否可以采用雙重加密方法加以解決,即利用對稱加密算法先加密保證信息的保密程度,再利用非對稱加密算法加密實現(xiàn)身份認證等等。2.2 改進RSA加密、解密算法
2.3 RSA算法性能分析
2.4 算法設計
3 編程與實驗
3.1 密鑰生成器模塊實驗
3.2 加密模塊實驗
3.3 解密模塊實驗
4 結束語