龔茜茹,徐 珂
(河南工業(yè)職業(yè)技術(shù)學(xué)院,河南南陽 473009)
合作方協(xié)同設(shè)計的PDM項目,采用Web Services模式下分布式數(shù)據(jù)系統(tǒng),數(shù)據(jù)是分布于互聯(lián)網(wǎng)上的。由于合作方協(xié)同設(shè)計所傳輸信息的敏感性,必須研究合適的傳輸層加密方法,以保證即使第三方截獲了加密的數(shù)據(jù),也將難以解密該數(shù)據(jù)。
加密用于達(dá)到以下目的:第一,確保保密性,防止用戶的標(biāo)識或數(shù)據(jù)被讀取;第二,確保數(shù)據(jù)完整性,防止數(shù)據(jù)被更改;第三,進(jìn)行身份驗證,確保數(shù)據(jù)發(fā)自特定的一方。
傳輸層安全設(shè)計的主要困難,是要仔細(xì)平衡安全性、可用性以及效率這三個幾乎對立的非功能性需求。目前在傳輸層安全方面有以下三種設(shè)計方案:
對稱加密也稱之為單密鑰加密,采用這種加密方法的雙方使用方式用同樣的密鑰進(jìn)行加密和解密。其特點(diǎn)是使用同一密鑰既用于加密又用于解密。由于具有密鑰的任意一方都可以使用該密鑰解密數(shù)據(jù),因此必須保護(hù)密鑰不被未經(jīng)授權(quán)的代理得到。對稱加密算法比較快,特別適用于對較大的數(shù)據(jù)流執(zhí)行加密轉(zhuǎn)換。
私鑰加密的缺點(diǎn)是它假定雙方已就密鑰達(dá)成協(xié)議,但是一旦傳輸信息被解密,攻擊者就可以把所獲得的知識延伸到其他信息中去。
不對稱加密也稱之為公鑰加密。不對稱加密使用一個對未經(jīng)授權(quán)的用戶保密的私鑰和一個公開的公鑰。公鑰和私鑰都在數(shù)學(xué)上相關(guān)聯(lián);用公鑰加密的數(shù)據(jù)只能用私鑰解密,而用私鑰簽名的數(shù)據(jù)只能用公鑰驗證。公鑰可以被任何人使用;該密鑰用于加密要發(fā)送到私鑰持有者的數(shù)據(jù)。兩個密鑰對于通信會話都是唯一的。公鑰加密算法之所以稱為不對稱算法,原因是需要用一個密鑰加密數(shù)據(jù)而需要用另一個密鑰來解密數(shù)據(jù)。
在傳輸公鑰期間,未經(jīng)授權(quán)的代理可能截獲該密鑰。而且,同一代理也可能截獲來自乙方的加密消息。但是,該代理無法用公鑰解密該消息。因為該消息只能用甲方的私鑰來解密,而該私鑰并沒有被傳輸。
不對稱加密保密性比較好,但是傳輸效率比較低,系統(tǒng)結(jié)構(gòu)也比較復(fù)雜。
這是一種通用方法,但是在傳輸體積龐大的文件時,SSL對效率影響太大,可使用性也不是很好。另一方面,如果采用通用的數(shù)據(jù)加密方式,盡管設(shè)計上可能比較簡單,但加密思想容易被人理解而失去秘密。
由于上述各種方案均不能滿足傳輸效率和保密性兼顧的要求,綜合考慮之后,設(shè)計了一種改進(jìn)的非對稱加密方案,使傳輸效率能達(dá)到要求,又有一定的保密性。
通過研究,發(fā)現(xiàn)傳統(tǒng)的不對稱加密方法產(chǎn)生效率問題的主要原因在于一次請求中需要多次往返,但是,由于一次請求實際上是一個完整的過程,有些密鑰數(shù)據(jù)是可以重用的,所以,本系統(tǒng)設(shè)計的目標(biāo)是在保證一定安全性的條件下,減少往返次數(shù),提高傳輸效率。
在正式文件傳輸時,利用RC2加密算法作為公鑰,這種算法的特點(diǎn)是加解密速度快,而且形成的加密文件體積并不會增大。在加密的過程中,如果傳輸?shù)氖潜容^大的圖紙類文件,要先進(jìn)行壓縮。如果是數(shù)據(jù)庫的表文件,則轉(zhuǎn)換成XML文件,然后再進(jìn)行加密。
定義私鑰為一個自定義算法,這個算法可以根據(jù)需要重新編寫,因此具有很強(qiáng)的私密性,而這個算法具體的計算參數(shù),可以在運(yùn)行中隨機(jī)產(chǎn)生的,使得私鑰可變。
在每個約定的使用方,必須存在一個證書,以確保這個請求方是約定的對象。各方面的證書要保證一致,以保證所有參與數(shù)據(jù)傳輸?shù)母鞣?,都是事先約定的成員。這個證書實際上是一個RSA加密算法的密鑰,它是以XML文件形式表現(xiàn)的。同時還利用該證書對登錄密碼和公鑰傳輸進(jìn)行加密。RSA算法的特點(diǎn)是算法復(fù)雜而且加解密速度比較慢,但適合對密碼(或者密鑰)這些比較小的內(nèi)容進(jìn)行加解密處理。
為了避免證書泄露,需要定期由服務(wù)方自動生成新的證書,然后通過系統(tǒng)特定的功能,自動安裝到各個約定對象的服務(wù)器中,這就保證了系統(tǒng)的安全性與可用性達(dá)到要求。
傳輸層加密的體系結(jié)構(gòu)如圖1所示,在該結(jié)構(gòu)中,通過將一些通用的處理業(yè)務(wù)封裝成獨(dú)立的業(yè)務(wù)組件,來提高系統(tǒng)的可理解與可維護(hù)性。
圖1 傳輸層加解密體系結(jié)構(gòu)
1)啟動服務(wù)時生成公鑰(甲)
首先在服務(wù)端啟動服務(wù)的時候需要建立這一階段服務(wù)的公鑰(甲)。
2)客戶登錄獲取公鑰(甲)
客戶第一次申請需要登錄,此時客戶用RSA加密的密碼進(jìn)行登錄,登錄成功以后,服務(wù)方就把已經(jīng)加密的公鑰(甲)傳遞給客戶方,由客戶程序暫時保留,此后客戶對公鑰(乙)的加密將利用所保留的公鑰(甲),直到客戶退出,如圖2所示。
圖2 登錄時即時公鑰的傳輸
3)不對稱加密業(yè)務(wù)流程
利用上面的組件,可以建立任何需要加密的一個請求/響應(yīng)往返所需要的工作流程,本項目請求/響應(yīng)整體業(yè)務(wù)流程如下:第一,當(dāng)客戶發(fā)出某個服務(wù)請求的時候,客戶自動生成一對隨機(jī)密鑰,包括RC2公鑰(Key,IV),以及連接私鑰(M123自定義加密算法)的三個參數(shù)(m1,m2,m3)。這個動態(tài)RC2密鑰用來加密請求內(nèi)容,再由保留在客戶方的公鑰(甲)來加密公鑰(乙),并打包一起發(fā)送給服務(wù)方;第二,服務(wù)方收到后,通過本地的公鑰(甲)來解密相應(yīng)的公鑰(乙),再用這個已經(jīng)解開的密鑰來解密請求內(nèi)容;第三,服務(wù)方用普通方式來處理請求;第四,返回的數(shù)據(jù),也用同一個公鑰(乙)中的RC2密鑰加密返回,此時的數(shù)據(jù)中并不包括密鑰本身;第五,客戶方收到返回數(shù)據(jù)之后,用還保存在客戶方的RC2密鑰(乙)解密,完成這一次操作以后,這一次往返所使用的公鑰(乙)都被刪除掉。整個業(yè)務(wù)流程如圖3所示。
圖3 加密的請求和返回
本項目不對稱算法RSA和對稱算法RC2均采用了通用的算法包。RC2是一種通用的私鑰算法,但本方案中經(jīng)過變形將其作為公鑰存在,也是加解密傳輸內(nèi)容的最主要算法。這種算法加解密速度快,加密后的文件大小不會膨脹。由于系統(tǒng)要求大部分?jǐn)?shù)據(jù)轉(zhuǎn)換成XML格式(由于XML Schema標(biāo)準(zhǔn)的推行,即使二進(jìn)制數(shù)據(jù)也可以用XML表達(dá)),該方法組要求傳入的數(shù)據(jù)是字符串,加密后的數(shù)據(jù)為字節(jié)數(shù)組。反之,解密的傳入值為字節(jié)數(shù)組,而解密后的返回值為字符串。加解密的密鑰分別是16字節(jié)的Key和8字節(jié)的IV,這兩個數(shù)據(jù)是由系統(tǒng)隨機(jī)自動地產(chǎn)生的,將作為公鑰經(jīng)過加密后傳輸。
自定義的私鑰算法M123主要作用是與公鑰的關(guān)聯(lián)以及區(qū)分。依靠三個數(shù)字(m1,m2,m3),所以把這個算法稱作M123。這三個數(shù)字決定了加密的結(jié)果(所以它們也是一種密鑰),而且這三個數(shù)字是系統(tǒng)隨機(jī)自動的產(chǎn)生,這就確保了私鑰的隨機(jī)性。
從算法的角度,使用了算術(shù)加邏輯的方法:
為了避免相同字符得到同一個變形碼,使攻擊者找到規(guī)律,需要把字符串的上一個字符的內(nèi)碼經(jīng)過某種計算,作為下一個字符加密的m1碼存在,也就是:
這樣就實現(xiàn)了某種形式的鏈型加密,增加了破譯的難度。
這個加解密算法的作用,是作為一種輔助,來對相互傳輸?shù)墓€做二次加密,并不直接處理傳輸內(nèi)容,速度上影響很小。而且這種二次加密就使公鑰和私鑰之間具有了關(guān)聯(lián),符合不對稱加密的定義。
目前的算法流程如圖4所示,在運(yùn)行中根據(jù)情況可以重新定義算法。
圖4 自定義M123算法流程
采用該傳輸層加解密機(jī)制有以下優(yōu)點(diǎn):
(1)性能好:RSA加密算法雖然保密性好,但速度慢且計算量大,而RC2算法的速度快得多。為了兼顧性能,這個設(shè)計只是客戶登錄的時候?qū)γ艽a使用RSA加密算法,而對以后傳遞的數(shù)據(jù)都使用RC2算法,極大地提升了傳輸效率。整體速度上不受影響,經(jīng)測試能達(dá)到客戶要求。
(2)安全性好:客戶的每次請求將產(chǎn)生不同的RC2密鑰(乙),所以一次請求被破譯,不至于外推到下一次,提高了傳輸?shù)陌踩?。對于客戶隨機(jī)產(chǎn)生的密鑰傳輸,除使用RC2加密算法外,內(nèi)層還使用了一個自定義算法(M123),形成多層加密,大大提升了敏感的密鑰數(shù)據(jù)解密難度。
(3)公鑰隨機(jī)產(chǎn)生:攻擊者即使盜取了存儲在服務(wù)器(或客戶端)上的證書,也無法解開傳輸中的請求和結(jié)果。因為實際使用的公鑰是在服務(wù)器上隨機(jī)的產(chǎn)生的,其產(chǎn)生頻度為每次服務(wù)應(yīng)用程序被客戶啟動。
(4)證書可更換:通過定期更換存儲的證書,還可以進(jìn)一步提升系統(tǒng)的安全性。
(5)加密流程是自定義:整個加密流程是自定義的,如果不了解具體項目傳輸層加密的思想,即使截獲了數(shù)據(jù),也很難利用通常的思維進(jìn)行解密,加大了解密的難度。
當(dāng)然,如果理解了這個系統(tǒng)的加解密原理,破解這個系統(tǒng)并不是完全不可能。問題在于安全性與系統(tǒng)其它的非功能需求,比如效率、易使用性等的矛盾的,需要平衡各方面因素,尋求一個平衡的解決方案,既不能過分強(qiáng)調(diào)安全,使系統(tǒng)最終無法使用;更不能不考慮安全問題,使系統(tǒng)失去使用價值。
[1]Biham E and Shamir A.Differential Cryptanalysis of DES -like Cryptosystems[J].Journal of Cryptology,1991,4(1):3-72.
[2]劉傳領(lǐng),范建華.RSA非對稱加密算法在數(shù)字簽名中的應(yīng)用研究[J].通信技術(shù),2009,42(3):192 -196.
[3]Robert J.Boncella.Web Services and Web Services Security[J].Communications of the Association for Information Systems,2004,(6):344 -363.
[4]Boehm B,Turner R.Balancing Agility and Discipline - A Guide for the Perplexed[R].USC -CSE Annual Research Review,Los Angeles,2004,(3):1556 -1668.