曹虎山 劉國彥 曾小舟
摘 要:數(shù)字簽名技術(shù)建立在數(shù)據(jù)加密的基礎(chǔ)上,目前常用的加密方式有對稱加密和非對稱加密,對稱加密使用同一把密鑰加解密,而非對稱加密技術(shù)使用私鑰和公鑰實現(xiàn)加密過程,兩種加密技術(shù)各有優(yōu)缺點。在互聯(lián)網(wǎng)應(yīng)用中,信息的完整性和傳遞的時效性同等重要,在保證數(shù)據(jù)可靠性的同時兼顧好用戶體驗,提出混合型數(shù)字簽名技術(shù),并簡單介紹其實現(xiàn)原理,并且通過面向?qū)ο缶幊陶Z言Java來實現(xiàn)。
關(guān)鍵詞:混合型;數(shù)字簽名;網(wǎng)絡(luò)安全;面向?qū)ο?/p>
隨著信息技術(shù)的飛速發(fā)展,互聯(lián)網(wǎng)技術(shù)滲透到當(dāng)今社會的每個角落,“互聯(lián)網(wǎng)+”概念的推廣,傳統(tǒng)產(chǎn)業(yè)加快了信息化建設(shè)的腳步,網(wǎng)絡(luò)作為信息傳遞的途徑,信息的安全和保密越發(fā)變得重要。目前,為了保證數(shù)據(jù)在互聯(lián)網(wǎng)傳遞時的保密性,常用的技術(shù)手段有訪問控制、身份認(rèn)證及安全審計等。但是這些手段主要是從外部保護(hù)數(shù)據(jù)在傳遞過程中的安全性,一旦數(shù)據(jù)在發(fā)送前或接收后遭到攻擊,則不能驗證信息的完整性。因此,數(shù)字簽名技術(shù)因此誕生,數(shù)字簽名技術(shù)是在數(shù)據(jù)加密的基礎(chǔ)上演化而來,目前加密的方式主要有兩種:一種是對稱加密,另一種是非對稱加密。對稱加密指的是加密和解密使用的是同一把密鑰,它的優(yōu)點是加密速度快,效率高,缺點是密鑰分發(fā)及管理比較困難;而非對稱加密分為公鑰和私鑰,公鑰解決了密鑰分發(fā)的問題,但是公鑰的加解密操作速度較慢。因此,結(jié)合兩種加密方式的優(yōu)缺點,提出混合數(shù)字簽名技術(shù),在保證信息完整性的同時,提高數(shù)據(jù)加密的效率,對當(dāng)前各類互聯(lián)網(wǎng)應(yīng)用有積極的促進(jìn)作用。
1.加密技術(shù)
1.1對稱加密技術(shù)
對稱加密也稱單密鑰加密,指的是通信雙方使用的同一個密鑰,既可以加密又可以解密。對稱加密通常在消息發(fā)送方需要加密大量數(shù)據(jù)時使用,具有加密速度快、計算量小、加密效率高、算法公開等特點。但是在數(shù)據(jù)傳送前,發(fā)送方和接收方必須約定好密鑰,且雙方都能保管好密鑰,否則只要一方的密鑰泄露,那么信息也就不安全了。此外,每次通信雙方都需要使用其他人不知道的唯一密鑰,多次通信則意味收、發(fā)雙方所擁有的密鑰變得越來越多,密鑰的管理成為雙方的負(fù)擔(dān)。常用的對稱加密算法有DES、AES等。
1.2非對稱加密技術(shù)
非對稱加密的密鑰由公鑰和私鑰組成,并且可以使用多對密鑰。通常有以下幾種加解密方式:私鑰解密公鑰加密,公鑰解密私鑰加密數(shù)據(jù),私鑰公鑰可以互相加密解密。私鑰只能由一方保管,公鑰交給請求方。非對稱加密速度較慢,但密鑰的管理較方便,也更安全。常見的非對稱加密算法有RSA等。
1.3混合型加密技術(shù)
在實際的網(wǎng)絡(luò)環(huán)境中,通常是將兩者混合使用,這樣即解決了密鑰管理的問題,也保證了在非安全信道中密鑰交換的安全性,同時大大提高了加解密的速度。尤其是在安全性與用戶體驗同等重要的互聯(lián)網(wǎng)應(yīng)用中,混合型加密技術(shù)是一種非常有效的數(shù)字簽名技術(shù)。
1.4數(shù)字簽名
不管是對稱加密還是非對稱加密,都只能保證數(shù)據(jù)的完整性,在網(wǎng)絡(luò)通信中,數(shù)據(jù)的不可抵賴性則要借助證書中心(Certificate Authority,簡稱CA)來實現(xiàn),證書中心的作用是為公鑰作認(rèn)證,CA通過自己的私鑰,對通信雙方的公鑰和一些相關(guān)信息一起加密,生成“數(shù)字證書”。該證書能使通信接收方確認(rèn)數(shù)據(jù)的來源和數(shù)據(jù)完整性,防止被他人偽造。當(dāng)通信雙方發(fā)生爭議時,CA根據(jù)消息上的簽名來判定這條消息是否確實由發(fā)送方發(fā)出,因為數(shù)字簽名的本質(zhì)是簽名只能通過簽名者的私鑰才能產(chǎn)生,從而保證數(shù)據(jù)在傳輸過程中的不可抵賴性。
2.混合型數(shù)字簽名技術(shù)在Java中的實現(xiàn)
Java作為最熱門的Web應(yīng)用開發(fā)語言,在網(wǎng)絡(luò)安全編程中實現(xiàn)數(shù)字簽名具有很大的優(yōu)勢,它提供了兩種API實現(xiàn)數(shù)據(jù)的加密與解密,即JCA和JCE。在此我們采用混合密鑰算法實現(xiàn)數(shù)字簽名,不僅可以提高信息在傳輸過程中的保密性,也使服務(wù)器端的工作效率大大提高。例如針對客戶機(jī)/服務(wù)器模型(C/S架構(gòu)),實現(xiàn)過程如下:
(1)服務(wù)器Server使用 Hash 算法對所發(fā)送的數(shù)據(jù)內(nèi)容進(jìn)行計算得到信息摘要,用自己的私鑰ServerPrivateKey對其加密形成數(shù)字簽名;
(2)服務(wù)器Server生成對稱密鑰 ServerSingleKey,使用客戶端Client的公鑰ClientPublicKey對其加密;
(3)服務(wù)器Server使用對稱密鑰ServerSingleKey對信息內(nèi)容進(jìn)行加密;
(4)服務(wù)器Server將加密后的對稱密鑰和加密后的密文打包;
(5)服務(wù)器Server將打包后的數(shù)據(jù)和數(shù)字簽名發(fā)送至客戶端Client;
(6)客戶端Client收到加密的數(shù)據(jù)包后,用客戶端的私鑰ClientPrivateKey解密得到ServerSingleKey;
(7)客戶端Client使用解密后的對稱密鑰ServerSingleKey對密文數(shù)據(jù)包解密,得到明文內(nèi)容;
驗證數(shù)字簽名過程:
(1)客戶端Client獲取數(shù)字簽名;
(2)客戶端Client采用相同的Hash算法對解密后的數(shù)據(jù)內(nèi)容進(jìn)行計算得到信息摘要,并使用服務(wù)器Server的公鑰ServerPublicKey檢驗數(shù)字簽名;
(3)如果數(shù)字簽名相同,那么就可以確認(rèn)該數(shù)字簽名是來自服務(wù)器Server,并且數(shù)據(jù)在傳輸過程中沒有遭到破壞或篡改。
服務(wù)器Server實現(xiàn)密鑰生成和簽名的部分代碼:
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");//初始化參數(shù)
keyPairGenerator.initialize(512);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
RSAPublicKey ServerPublicKey = (RSAPublicKey)keyPair.getPublic();//服務(wù)器公鑰
RSAPrivateKey ServerPrivateKey = (RSAPrivateKey)keyPair.getPrivate();//服務(wù)器私鑰
//執(zhí)行簽名
PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(ServerPrivateKey.getEncoded());
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);
Signature signature = Signature.getInstance("MD5withRSA");
signature.initSign(privateKey);
signature.update(src.getBytes());
byte[] result = signature.sign();
客戶端Client驗證簽名的部分代碼:
X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(ServerPublicKey.getEncoded());
keyFactory = KeyFactory.getInstance("RSA");
PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
signature = Signature.getInstance("MD5withRSA");
signature.initVerify(publicKey);
signature.update(src.getBytes());
boolean bool = signature.verify(result);//驗證簽名
3.結(jié)束語
在網(wǎng)絡(luò)通信過程中,數(shù)字簽名技術(shù)是保障信息安全的重要手段。混合型加密算法不僅實現(xiàn)了數(shù)字簽名,而且保證了數(shù)據(jù)在傳輸過程中的保密性與可靠性,以及通信雙方的不可抵賴,同時提高了加解密過程的效率,在保證信息安全的基礎(chǔ)上對用戶體驗的影響也降到最小,是一項值得推廣的互聯(lián)網(wǎng)安全應(yīng)用技術(shù)。
參考文獻(xiàn):
[1]王方鑫.基于RSA簽名方案的研究[J].電腦知識與技術(shù),2018,14(36):28-29.
[2]段鎮(zhèn)源.探究網(wǎng)絡(luò)安全技術(shù)中數(shù)字簽名的基本原理[J].通訊世界,2019,26(04):31-32.
[3]趙悅. 基于RSA加密解密的即時通訊系統(tǒng)的設(shè)計與實現(xiàn)[D].吉林大學(xué),2016.
[4]鄭鴻雁. 移動數(shù)字簽名關(guān)鍵技術(shù)研究[D].北京郵電大學(xué),2014.
[5]李瑞俊.基于混合密碼體制的數(shù)據(jù)加密模型的研究[J].赤峰學(xué)院學(xué)報(自然科學(xué)版),2014,30(18):10-11.
作者簡介:
曹虎山(1967—),男,漢族,湖南益陽,教授,湖南生物機(jī)電職業(yè)技術(shù)學(xué)院,研究方向:信息技術(shù)。
劉國彥(1978—),男,漢族,湖南益陽,副教授,湖南生物機(jī)電職業(yè)技術(shù)學(xué)院,研究方向:軟件測試。
曾小舟(1986—),男,漢族,湖南常德,講師,湖南生物機(jī)電職業(yè)技術(shù)學(xué)院,研究方向:軟件工程。
基金項目:
湖南省教育廳科學(xué)研究項目《混合型數(shù)字簽名技術(shù)在O2O電子商務(wù)網(wǎng)絡(luò)安全中的應(yīng)用研究》(項目編號:15C0810)階段性成果。