周金杰
同濟(jì)大學(xué)計(jì)算機(jī)科學(xué)及技術(shù)系,上海 201804
隨著信息共享范圍的不斷擴(kuò)大,網(wǎng)絡(luò)上的許多不安全因素對(duì)用戶數(shù)據(jù)構(gòu)成了極大的威脅。出于日常應(yīng)用的各種需要,一些敏感的數(shù)據(jù)需要在網(wǎng)上供多人共享,這也增加了信息泄露的可能性。面對(duì)巨大的,無(wú)處不在的信息安全威脅,人們想出了各種應(yīng)對(duì)措施。其中最通常的方式就是對(duì)數(shù)據(jù)進(jìn)行加密操作,只有通過(guò)相應(yīng)的解密才能使其恢復(fù)原貌,獲取有用信息。
近年來(lái)隨著密碼學(xué)技術(shù)的不斷發(fā)展,各種加密算法也層出不窮,然而加密安全性與加密效率如何兼顧一直是一個(gè)讓人頭疼的問(wèn)題。
本文從這個(gè)實(shí)際問(wèn)題出發(fā),旨在設(shè)計(jì)并實(shí)現(xiàn)一種高級(jí)的加密方案。該方案既能保障數(shù)據(jù)的絕對(duì)安全性,又具有較高的加解密效率,為保護(hù)私密數(shù)據(jù)信息抵御各種不安全因素的威脅提供了一個(gè)較為良好的解決方案,具有一定的實(shí)用價(jià)值。
在整個(gè)密碼學(xué)安全機(jī)制中,加密算法可謂是它的核心[1]。實(shí)現(xiàn)數(shù)據(jù)加密的算法可以根據(jù)密鑰類型的不同分成兩大類別:對(duì)稱加密算法和非對(duì)稱加密算法。
1.1.1 對(duì)稱加密算法
對(duì)稱加密算法是應(yīng)用較早的加密算法,技術(shù)成熟。所謂的對(duì)稱加密算法,就是數(shù)據(jù)加密和解密采用的是同一個(gè)密鑰,因此,它的安全性依賴于該密鑰的安全性。在對(duì)稱加密算法中,數(shù)據(jù)發(fā)送方將明文(原始數(shù)據(jù))和加密密鑰一起經(jīng)過(guò)特殊加密算法處理后,使其變成復(fù)雜的加密密文后發(fā)送出去。收信方收到密文后,若想解讀原文,則需要使用加密用過(guò)的密鑰及相同算法的逆算法對(duì)密文進(jìn)行解密,才能使其恢復(fù)成可讀明文。在對(duì)稱加密算法中,使用的密鑰只有一個(gè),發(fā)送和接收雙方都使用這個(gè)密鑰對(duì)數(shù)據(jù)進(jìn)行加密和解密操作,這就要求解密方事先必須知道加密密鑰。
1.1.2 非對(duì)稱加密算法
非對(duì)稱加密算法使用兩把完全不同但又是完全匹配的一對(duì)鑰匙—公鑰和私鑰。在使用非對(duì)稱加密算法加密數(shù)據(jù)時(shí),只有使用匹配的一對(duì)公鑰和私鑰,才能完成對(duì)明文的加密和解密過(guò)程。加密明文時(shí)采用公鑰加密,解密密文時(shí)使用私鑰才能完成,而且加密者知道接收方的公鑰,只有解密者才是唯一知道自己私鑰的人。非對(duì)稱加密算法的基本原理是,如果加密方想發(fā)送只有解密方才能解讀的加密信息,加密方必須首先知道解密方的公鑰,然后利用解密方的公鑰來(lái)加密原文;解密方收到加密密文后,使用自己的私鑰才能解密密文。
簡(jiǎn)單地說(shuō),所謂數(shù)字簽名就是在數(shù)據(jù)單元上附加一些數(shù)據(jù),或?qū)?shù)據(jù)單元作一定的密碼變換,以達(dá)到允許數(shù)據(jù)單元的接收者用以確認(rèn)數(shù)據(jù)單元的來(lái)源和并保護(hù)數(shù)據(jù)完整性,防止被偽造的目的,是對(duì)數(shù)據(jù)進(jìn)行簽名的一種方法?;诠€密碼體制和私鑰密碼體制都可以進(jìn)行數(shù)字簽名,目前主要得以應(yīng)用的是基于公鑰密碼體制的數(shù)字簽名。
基于公鑰密碼體質(zhì)的數(shù)字簽名機(jī)制通常定義兩種互補(bǔ)的運(yùn)算,一個(gè)用于簽名,另一個(gè)用于驗(yàn)證。數(shù)字簽名主要的功能是:保證信息的完整性、認(rèn)證發(fā)送者的身份。從本質(zhì)上說(shuō),數(shù)字簽名是一個(gè)對(duì)數(shù)據(jù)進(jìn)行加密的過(guò)程,而數(shù)字簽名的驗(yàn)證則是一個(gè)對(duì)數(shù)據(jù)解密的過(guò)程。
之前我們?cè)?jīng)提到,實(shí)現(xiàn)數(shù)據(jù)加密的算法可以根據(jù)密鑰類型的不同分成兩大類別:對(duì)稱加密算法和非對(duì)稱加密算法。對(duì)稱加密算法速度較快,但是存在一定的安全隱患。非對(duì)稱加密算法雖然安全性高,卻速度偏慢。顯然,如果只使用其中任何一種單一的加密算法,都無(wú)法使加密系統(tǒng)兼顧安全性與高效性。因此,我們需要取兩類加密算法之所長(zhǎng),在加密過(guò)程中通過(guò)對(duì)這兩種加密算法的結(jié)合使用,來(lái)構(gòu)建一個(gè)既安全又高效的加密系統(tǒng)。
2.1.1 加密方案概述
加密方首先利用對(duì)稱加密算法對(duì)主加密數(shù)據(jù)進(jìn)行加密,然后利用接收方的公鑰給對(duì)稱密鑰進(jìn)行非對(duì)稱加密,將加密了的對(duì)稱密鑰與主加密數(shù)據(jù)的密文一同存入加密數(shù)據(jù)中(如圖 1所示)。解密方在收到數(shù)據(jù)后,利用對(duì)應(yīng)的非對(duì)稱私鑰對(duì)加密了的對(duì)稱密鑰進(jìn)行解密操作。得到對(duì)稱密鑰后,再用該密鑰對(duì)主加密數(shù)據(jù)密文進(jìn)行解密操作,從而得到主加密數(shù)據(jù)的內(nèi)容。
圖1
2.1.2 安全性分析
在上述加密方案中,雖然主要數(shù)據(jù)是由安全性較差的對(duì)稱加密機(jī)制加密的,但是鑒于對(duì)稱密鑰通過(guò)非對(duì)稱加密算法得到了加密,所以整個(gè)系統(tǒng)的安全性也就可以說(shuō)是逼近于非對(duì)稱加密機(jī)制了。因?yàn)閷?duì)稱加密算法的安全性依賴于其密鑰的安全性,而其密鑰的安全性又由非對(duì)稱加密算法得以保障,故而可以消除對(duì)稱加密中存在的最大安全隱患,即每次交換對(duì)稱密鑰時(shí)的不安全性。
2.1.3 加密效率分析
由于上述加密方案中,主要加密數(shù)據(jù)都是由速度較快的對(duì)稱加密算法加密的,而速度較慢的非對(duì)稱加密算法只負(fù)責(zé)加密對(duì)稱加密算法的密鑰(其長(zhǎng)度一般為幾十到上百個(gè)字節(jié)不等,相對(duì)于主加密數(shù)據(jù),基本可以忽略不計(jì)),故其效率基本上可與對(duì)稱加密算法相媲美。
上述加密方案保證了加密的安全性與效率,但是為了讓這個(gè)組合加密安全方案更加完備,我們需要提供消息完整性的驗(yàn)證,以及發(fā)送方身份認(rèn)證的功能。
于是在上述加密方案的基礎(chǔ)上:我們讓加密方對(duì)主加密數(shù)據(jù)的摘要再做一次非對(duì)稱加密的操作,并將加密了的主加密數(shù)據(jù)消息摘要密文一起放入加密數(shù)據(jù)(如圖 2所示)。該非對(duì)稱加密操作使用的密鑰與之前加密對(duì)稱密鑰時(shí)使用的密鑰不同,它使用的是一個(gè)能夠標(biāo)識(shí)加密方身份的非對(duì)稱密鑰中的私鑰,該私鑰只有加密方自己擁有,其相應(yīng)的公鑰則是對(duì)外公開的,其實(shí)這就是一種常見(jiàn)的數(shù)字簽名方案,因?yàn)樗借€只有加密方擁有,所以能夠表明其身份,而公開的公鑰則用來(lái)讓解密方驗(yàn)證加密方的身份。解密方在獲取了主加密數(shù)據(jù)的原文之后,通過(guò)計(jì)算得到其消息摘要。同時(shí),通過(guò)加密方公開的公鑰對(duì)主加密數(shù)據(jù)消息摘要的密文進(jìn)行非對(duì)稱解密操作,將主加密數(shù)據(jù)的消息摘要明文還原出來(lái),并將該明文與之前計(jì)算而得的主加密數(shù)據(jù)原文的消息摘要進(jìn)行比較。若匹配,則在證明了數(shù)據(jù)完整性未遭破壞的同時(shí)也驗(yàn)證了數(shù)據(jù)來(lái)源的可靠性,這樣做可以讓解密方驗(yàn)證加密方的身份,以防止有惡意破壞企圖的第三方冒充加密方,將虛假信息發(fā)送給解密方。
3.1.1 對(duì)稱加密算法
當(dāng)前最常用的對(duì)稱加密標(biāo)準(zhǔn)無(wú)疑是AES[2]加密標(biāo)準(zhǔn)與DES加密標(biāo)準(zhǔn)。AES加密標(biāo)準(zhǔn)作為DES加密標(biāo)準(zhǔn)的替代者,其效率與安全性均高于DES。故選擇AES加密標(biāo)準(zhǔn)的實(shí)現(xiàn)算法Rijndael[3]算法作為對(duì)稱加密算法。
3.1.2 非對(duì)稱加密算法與數(shù)字簽名算法
RSA加密算法是當(dāng)下最常見(jiàn)的非對(duì)稱加密算法,由于數(shù)字簽名也是基于非對(duì)稱加密算法的,故本加密方案將選擇RSA算法作為非對(duì)稱加密與數(shù)字簽名所使用的算法。
3.1.3 驗(yàn)證數(shù)據(jù)完整性的散列算法
本文加密方案選擇SHA1算法作為驗(yàn)證數(shù)據(jù)完整性的散列算法。SHA1散列算法可以對(duì)任意長(zhǎng)度的數(shù)據(jù)運(yùn)算生成一個(gè)160位的數(shù)值,它具有不可從消息摘要中恢復(fù)原信息及兩個(gè)不同的消息不會(huì)產(chǎn)生同樣的消息摘要的特性,可以滿足驗(yàn)證數(shù)據(jù)完整性的需求。
本高級(jí)加密方案實(shí)現(xiàn)流程分兩大部分流程闡述,即加密流程與解密流程。
3.2.1 加密流程
功能定義:對(duì)于輸入的原始數(shù)據(jù)進(jìn)行加密與組合
輸入:待加密數(shù)據(jù)原文
輸出:加密后的密文組合
具體流程:
Step1:使用對(duì)稱密鑰,通過(guò)Rijndael算法加密主數(shù)據(jù),得到密文1
Step2:用非對(duì)稱加密算法的公鑰,通過(guò)RSA算法加密先前Rijndael算法的對(duì)稱密鑰,得到密文2
Step3:用SHA1算法對(duì)主數(shù)據(jù)做消息摘要計(jì)算
Step4:用簽名密鑰的私鑰,為消息摘要做RSA加密,得到密文3
Step5:將密文1,密文2,密文3組合成新的密文數(shù)據(jù)
3.2.2 解密流程
功能定義:對(duì)于輸入的密文組合進(jìn)行逐步拆分與解密
輸入:待解密的密文組合
輸出:數(shù)據(jù)原文
具體流程:
Step1:使用非對(duì)稱加密的私鑰,通過(guò)RSA算法解密Rijndael算法的對(duì)稱密鑰
Step2:使用上一步解密所得的對(duì)稱密鑰解密,通過(guò)Rijndael算法解密主加密數(shù)據(jù)明文
Step3:用簽名密鑰的公鑰,通過(guò)RSA算法解密消息摘要獲得其明文
Step4:使用SHA1算法對(duì)Step2獲得的主加密數(shù)據(jù)明文進(jìn)行消息摘要的計(jì)算,并與Step3所獲得的解密的消息摘要明文進(jìn)行比較,若相同,則解密成功,輸出明文,否則輸出錯(cuò)誤信息
基于上述組合加密安全方案,我們?cè)赪indows .NET Framework 2.0上進(jìn)行了實(shí)驗(yàn),并對(duì)實(shí)驗(yàn)結(jié)果進(jìn)行分析。
由于.NET Framework 2.0環(huán)境集成了本加密安全方案所需的基礎(chǔ)加密算法(即 Rijndael對(duì)稱加密算法,RSA非對(duì)稱加密算法以及SHA1散列算法)的實(shí)現(xiàn),故我們選取該平臺(tái)作為我們的實(shí)驗(yàn)平臺(tái)。
由于數(shù)據(jù)安全性的測(cè)試很難用量化數(shù)據(jù)來(lái)界定,而之前第二節(jié)中提到的安全性分析也表明本高級(jí)安全加密方案的安全性可以逼近于非對(duì)稱加密。鑒于非對(duì)稱加密的安全性是業(yè)界公認(rèn)的,所以其安全性應(yīng)該可以得到保障。
這里我們主要對(duì)本組合加密安全方案的效率做實(shí)驗(yàn)與分析。
實(shí)驗(yàn)中,我們將通過(guò)組合加密安全方案,分別對(duì)不同大小的數(shù)據(jù)(1MB, 2MB, 5MB, 10MB)進(jìn)行加/解密,記錄加/解密時(shí)間,并且將該加密時(shí)間與單純使用對(duì)稱加密或非對(duì)稱加密的加/解密時(shí)間進(jìn)行比較。
為了保證實(shí)驗(yàn)數(shù)據(jù)的有效性,同時(shí)將實(shí)驗(yàn)中可能發(fā)生的偶然事件的影響降到最低,我們分別對(duì)每個(gè)大小的數(shù)據(jù),取100個(gè)樣本進(jìn)行實(shí)驗(yàn),然后求得其時(shí)間的平均值。
根據(jù)上述實(shí)驗(yàn)方案,我們得到如下的實(shí)驗(yàn)結(jié)果,如圖 3圖4所示
圖3
通過(guò)實(shí)驗(yàn)數(shù)據(jù)我們可以看到,無(wú)論是加密還是解密,本組合加密安全方案所使用的時(shí)間都很接近于純對(duì)稱加密的時(shí)間(多出來(lái)的時(shí)間開銷主要為使用非對(duì)稱加密算法加密對(duì)稱密鑰,以及對(duì)明文做計(jì)算散列時(shí)的開銷,但由于數(shù)據(jù)量不大,這些開銷與主要加密用時(shí)相比可以忽略不計(jì)),在保證了安全性接近于非對(duì)稱加密的前提下,在效率上有很大的提升,與之前的分析相符。
本文提出了一種基于基礎(chǔ)安全機(jī)制構(gòu)建的組合加密安全方案,對(duì)傳統(tǒng)加密方法效率與安全性難以兼得的問(wèn)題做出了一個(gè)較為合理的解答。同時(shí)通過(guò)理論分析與實(shí)驗(yàn)說(shuō)明并驗(yàn)證了該方案的安全性與效率性。為保護(hù)數(shù)據(jù)安全提供了一種較為切實(shí)可行的解決方案。
圖4
[1]R.Stinson Douglas.密碼學(xué)原理與實(shí)踐[M].北京:電子工業(yè)出版社,2007.
[2]姚華楨.AES和DES的效率及安全性比較[J].仲愷農(nóng)業(yè)技術(shù)學(xué)院學(xué)報(bào),2006,19(2):44-48.
[3]Barr,T.Invitation to Cryptology.Upper Saddle River, NJ:Prentice Hall, 2002.