隨著Internet的飛速發(fā)展和計(jì)算機(jī)技術(shù)的廣泛應(yīng)用,信息的安全問(wèn)題日益突出,以數(shù)據(jù)加密技術(shù)為核心的信息安全技術(shù)也得到了很大的發(fā)展,數(shù)據(jù)加密技術(shù)不僅能對(duì)數(shù)據(jù)進(jìn)行加解密,而且還能夠?qū)崿F(xiàn)數(shù)字簽名、認(rèn)證和鑒別等多種功能,從而保障了在網(wǎng)絡(luò)上傳輸數(shù)據(jù)的機(jī)密性、完整性和確認(rèn)性,本文結(jié)合了DES算法和RSA算法的優(yōu)點(diǎn),設(shè)計(jì)了一個(gè)數(shù)據(jù)加密系統(tǒng),同時(shí)利用Java安全軟件包實(shí)現(xiàn)數(shù)字簽名。
1 數(shù)據(jù)加密技術(shù)
數(shù)據(jù)加密技術(shù)是以加密算法為核心的,根據(jù)密碼算法所使用的加密密鑰和解密密鑰是否相同、能否由加密過(guò)程推導(dǎo)出解密過(guò)程等因素,可將密碼體制分為對(duì)稱(chēng)密鑰加密體制和非對(duì)稱(chēng)密鑰加密體制。
1.1對(duì)稱(chēng)密鑰加密體制
對(duì)稱(chēng)密鑰加密體制又稱(chēng)單密鑰加密體制,在這種加密方法中,信息的加密和解密都使用相同的密鑰,或者說(shuō)從一個(gè)密鑰可以很容易地推導(dǎo)出另一個(gè)密鑰,該機(jī)制優(yōu)點(diǎn)是簡(jiǎn)單,通信雙方只需交換彼此密鑰,即可實(shí)現(xiàn)加解密過(guò)程,對(duì)稱(chēng)加密體制的算法實(shí)現(xiàn)速度極快,軟件實(shí)現(xiàn)速度達(dá)到了每秒數(shù)兆或數(shù)十兆比特,但是,對(duì)稱(chēng)密碼算法存在下面的問(wèn)題:密鑰不能秘密地分配;缺乏自動(dòng)檢測(cè)密鑰泄露的能力;假設(shè)網(wǎng)絡(luò)中每對(duì)用戶(hù)使用不同的密鑰,那么密鑰總數(shù)隨著用戶(hù)數(shù)的增加而迅速增多;無(wú)法解決消息確認(rèn)問(wèn)題。
對(duì)稱(chēng)加密算法中最著名的是美國(guó)數(shù)據(jù)加密標(biāo)準(zhǔn)DES、高級(jí)加密標(biāo)準(zhǔn)AES和歐洲數(shù)據(jù)加密標(biāo)準(zhǔn)IDEA。
1.2非對(duì)稱(chēng)密鑰加密體制
非對(duì)稱(chēng)密鑰加密體制又稱(chēng)公鑰加密體制,該體制的特性是,從公鑰推導(dǎo)出私鑰幾乎不可能,用公鑰密鑰對(duì)明文進(jìn)行加密,只能用私鑰密鑰對(duì)其進(jìn)行解密,公開(kāi)密鑰都是在某些數(shù)學(xué)上的難解的問(wèn)題上發(fā)展而來(lái)的,公開(kāi)密鑰加密體制的優(yōu)點(diǎn)有:加密密鑰是公開(kāi)的,用戶(hù)之間不需要傳遞私鑰;能夠很容易地實(shí)現(xiàn)數(shù)字簽名,保證交易過(guò)程的機(jī)密性、身份確認(rèn)性、數(shù)據(jù)完整性和不可否認(rèn)性,因此最適合電子商務(wù)的應(yīng)用需要,由于公鑰加密系統(tǒng)是基于尖端的數(shù)學(xué)難題,它的缺點(diǎn)就是計(jì)算復(fù)雜,實(shí)現(xiàn)速度遠(yuǎn)遠(yuǎn)趕不上對(duì)稱(chēng)加密系統(tǒng)。
根據(jù)所基于的數(shù)學(xué)難題來(lái)分類(lèi),有整數(shù)因子分解系統(tǒng)(代表性的有RSA)、離散對(duì)數(shù)系統(tǒng)(代表性的有DSA)、橢圓曲線離散對(duì)數(shù)系統(tǒng)(ECC)。
2 數(shù)字簽名技術(shù)
數(shù)字簽名技術(shù)是以公鑰密碼技術(shù)為基礎(chǔ),主要用來(lái)保證信息傳輸過(guò)程中信息的完整性和認(rèn)證信息發(fā)送者的身份,數(shù)字簽名的算法很多,應(yīng)用最為廣泛的三種是:HaSh簽名、DES簽名、RSA簽名,這三種算法可單獨(dú)使用,也可綜合在一起使用。
數(shù)字簽名如果用對(duì)稱(chēng)算法實(shí)現(xiàn),需要第三方認(rèn)證,較麻煩;如果采用公鑰加密算法實(shí)現(xiàn),可以避免上述的麻煩,采用公鑰加密算法實(shí)現(xiàn)數(shù)字簽名和驗(yàn)證過(guò)程如下:
1)發(fā)送方首先用公開(kāi)的單向函數(shù)對(duì)報(bào)文進(jìn)行一次變換,得到數(shù)字簽名,然后利用私有密鑰對(duì)數(shù)字簽名進(jìn)行加密后附在報(bào)文之后一同發(fā)出。
2)接收方用發(fā)送方的公開(kāi)密鑰對(duì)數(shù)字簽名進(jìn)行解密交換,得到一個(gè)數(shù)字簽名的明文,發(fā)送方的公鑰可以由一個(gè)可信賴(lài)的技術(shù)管理機(jī)構(gòu)即認(rèn)證中心(CA)發(fā)布,接收方將得到的明文通過(guò)單向函數(shù)進(jìn)行計(jì)算,同樣得到一個(gè)數(shù)字簽名,再將兩個(gè)數(shù)字簽名進(jìn)行對(duì)比,如果相同,則證明簽名有效,否則無(wú)效。
這種方法使任何擁有發(fā)送方公開(kāi)密鑰的人都可以驗(yàn)證數(shù)字簽名的正確性。
3 數(shù)據(jù)加密系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
3.1數(shù)據(jù)加密模塊的設(shè)計(jì)與實(shí)現(xiàn)
數(shù)據(jù)加密系統(tǒng)采用混合加密體制,充分利用了對(duì)稱(chēng)密碼算法的加密速度快、加密強(qiáng)度高、對(duì)大量數(shù)據(jù)的高效的加解密;利用公鑰密碼算法加密強(qiáng)度高,密鑰便于管理,實(shí)現(xiàn)對(duì)明文的密鑰進(jìn)行加密,以彌補(bǔ)傳統(tǒng)密碼算法中的密鑰不便于傳遞的缺點(diǎn),兩者結(jié)合,以達(dá)到數(shù)據(jù)傳輸?shù)陌踩浴?/P>
3.1.1 3DES算法的設(shè)計(jì)與實(shí)現(xiàn)
雖然目前DES的應(yīng)用范圍很廣且能方便地從公開(kāi)渠道獲得,但是由于DES的密鑰長(zhǎng)度只有56位,易于攻擊,加密強(qiáng)度已不能滿(mǎn)足現(xiàn)代安全需要,故使用兩個(gè)56位的密鑰混合加解密,密鑰長(zhǎng)度達(dá)112位,加密強(qiáng)度大大增加,這就是3DES,3DES算法原理圖如圖1所示,其中的密鑰K1、K2隨機(jī)產(chǎn)生。
圖1 3DES算法原理圖
三重DES算法的實(shí)現(xiàn)主要包含兩個(gè)類(lèi):DES類(lèi)和THREE類(lèi)。
DES類(lèi)的主要函數(shù):
3.1.2 RSA算法的設(shè)計(jì)與實(shí)現(xiàn)
RSA的安全性依賴(lài)于大數(shù)分解,公鑰和私鑰都是兩個(gè)大素?cái)?shù)(大于100個(gè)十進(jìn)制位)的函數(shù),RSA算法的實(shí)現(xiàn)主要包括密鑰的生成、加密數(shù)據(jù)、解密數(shù)據(jù),下面是RSA算法的實(shí)現(xiàn)過(guò)程:
1)定義變量:使用Java中的大數(shù)BigInteger()來(lái)定義p、q、n、e、d、t。
2)生成密鑰:使用public b∞lean gener—atePQNTED(String e)來(lái)生成密鑰。
3)加密過(guò)程:使用public String Encrypt(String msg,BigInteger pbkey,BigInteger n)完成,加密中用到了一個(gè)轉(zhuǎn)換函數(shù)copyBytes(),用它將要加密數(shù)據(jù)的字節(jié)數(shù)組進(jìn)行分組。
4)解密過(guò)程:使用之前產(chǎn)生的私鑰d和公鑰n來(lái)對(duì)數(shù)據(jù)進(jìn)行加密,將要解密的數(shù)據(jù)、私鑰d和公鑰n作為參數(shù)傳遞給加密函數(shù):public String Decrypt(String msg,BigIntegERPrikey,BigInteger n)
RSA必須基于大數(shù)運(yùn)算,這樣算法的實(shí)現(xiàn)就要執(zhí)行大量的大數(shù)加、減、乘、除及模冪、模逆運(yùn)算,這導(dǎo)致RSA實(shí)現(xiàn)效率相比于其他尤其是對(duì)稱(chēng)密鑰算法(比如:DES)顯得十分低下,這種速度上的差異也是本文設(shè)計(jì)的系統(tǒng)中用RSA來(lái)交換生成的DES密鑰的原因。
3.2數(shù)字簽名的設(shè)計(jì)與實(shí)現(xiàn)
實(shí)現(xiàn)數(shù)字簽名,主要包括密鑰的生成、簽名的產(chǎn)生、簽名的核實(shí)和密鑰的管理的過(guò)程,可以使用Java中定義好的類(lèi)創(chuàng)建RSA的公鑰和私鑰。
1)密鑰的生成:Java的KeyPair&nerator類(lèi)提供了一些方法來(lái)創(chuàng)建密鑰對(duì),以便用于非對(duì)稱(chēng)加密,密鑰對(duì)創(chuàng)建好后封裝在KeyPair類(lèi)型的對(duì)象中,在KeyPair類(lèi)中提供了獲取公鑰和私鑰的方法。
2)使用SHA生成數(shù)字摘要:從得到的私鑰文件prikey.txt中,以此對(duì)文件中的信息進(jìn)行簽名,簽名將保存在文件nleSSdig.rsa中.Javax.se—curity包中的MessageDigest類(lèi)提供了產(chǎn)生數(shù)字摘要的方法。
3)使用RSA進(jìn)行數(shù)字簽名:在進(jìn)行了上述操作之后,將生成的數(shù)字摘要進(jìn)行RSA簽名認(rèn)證。
4)使用公鑰驗(yàn)證數(shù)字簽名:當(dāng)接收者接收到發(fā)送者發(fā)來(lái)的密文及其簽名meSsdig-rSa后,可以對(duì)其進(jìn)行驗(yàn)證,前提是接收者擁有發(fā)送者的公鑰,使用iN.txt和pubkey.txt對(duì)收到的密文及其簽名文件進(jìn)行驗(yàn)證,確保原文未被修改過(guò),并且確實(shí)是發(fā)送者發(fā)來(lái)的。
Javax.security包中的Signature類(lèi)除了用于簽名外,還可用于驗(yàn)證數(shù)字簽名.Signature對(duì)象的initverfy()方法傳入公鑰,執(zhí)行其verify()方法,用其參數(shù)中的簽名信息驗(yàn)證原始數(shù)據(jù)。
3.3數(shù)據(jù)加密系統(tǒng)的通信模型設(shè)計(jì)與實(shí)現(xiàn)
本系統(tǒng)采用3DES算法對(duì)明文信息加密,通過(guò)RSA算法傳送該算法的數(shù)據(jù)加密密鑰,并用SHA單向散列函數(shù)實(shí)現(xiàn)數(shù)字簽名,達(dá)到保密數(shù)據(jù)安全通信的要求,系統(tǒng)的保密通信模型如圖2所示。
圖2數(shù)據(jù)加密系統(tǒng)的通信模型
為了實(shí)現(xiàn)網(wǎng)絡(luò)通信系統(tǒng)中加密文件在網(wǎng)絡(luò)間的傳輸,本系統(tǒng)使用了windows Socket編程,在WindowS XP操作系統(tǒng)平臺(tái)之上,基于TCP/IP協(xié)議,使用Java中的Socket編程實(shí)現(xiàn)了文件傳輸,本系統(tǒng)的通信主界面如圖3所示。
圖3 數(shù)據(jù)加密系統(tǒng)的主界面
4 結(jié)論
本文設(shè)計(jì)的數(shù)據(jù)加密系統(tǒng),綜合利用了數(shù)據(jù)加密技術(shù)和數(shù)字簽名技術(shù),既解決了密鑰管理問(wèn)題,又保證了數(shù)據(jù)的完整性、不可否認(rèn)性,同時(shí)給出了該系統(tǒng)網(wǎng)絡(luò)通信的界面設(shè)計(jì)和程序設(shè)計(jì)方法,本系統(tǒng)將幾種主要加密算法封裝成類(lèi),增強(qiáng)了代碼的簡(jiǎn)潔性、高效性、可移植性、可擴(kuò)展性,便于二次開(kāi)發(fā)。
轉(zhuǎn)載請(qǐng)注明出處:拓步ERP資訊網(wǎng)http://m.hanmeixuan.com/
本文標(biāo)題:數(shù)據(jù)加密系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
本文網(wǎng)址:http://m.hanmeixuan.com/html/support/1112158459.html