任琦 王彩梅
摘要:該文基于傳統(tǒng)加解密算法模式衍生出一種動(dòng)態(tài)加密因子的對(duì)稱加解密通信算法,保密性能好,簡單且高效,適用于金融類客戶端/服務(wù)器模式軟件系統(tǒng)的通信。
關(guān)鍵詞:加密;解密;動(dòng)態(tài)因子;安全通信
中圖分類號(hào):TP309.7? ? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A? ? ? ? 文章編號(hào):1009-3044(2018)36-0011-02
1 概述
隨著中國經(jīng)濟(jì)的飛速發(fā)展,我國已經(jīng)是世界第二大經(jīng)濟(jì)體,在互聯(lián)網(wǎng)時(shí)代,國內(nèi)的網(wǎng)絡(luò)金融類軟件系統(tǒng)使用率日益增加,諸如銀行、基金、證券等相關(guān)實(shí)時(shí)交易系統(tǒng),對(duì)系統(tǒng)的安全性有非常高的要求,其中數(shù)據(jù)的加密和脫敏兩類操作是系統(tǒng)安全性的核心指標(biāo)。
恒生電子,同花順,金證股份等國內(nèi)的大型軟件廠商在金融類軟件系統(tǒng)領(lǐng)域投入很多資源進(jìn)行設(shè)計(jì)和開發(fā),在數(shù)據(jù)的交互、傳輸、存儲(chǔ)等方面的架構(gòu)設(shè)計(jì)和開發(fā)上較為周密和嚴(yán)格,而架構(gòu)中的安全性設(shè)計(jì),更是設(shè)計(jì)的重中之重,可見保障金融類軟件系統(tǒng)的網(wǎng)絡(luò)通信安全十分重要。
2 背景和相關(guān)技術(shù)
目前流行的加密通信方法有很多,但是根據(jù)密鑰類型的不同,可以為兩大類,對(duì)稱加密通信和非對(duì)稱加密通信。對(duì)稱加密通信中加密和解密均采用相同的密鑰,即加密密鑰也作解密密鑰。對(duì)稱加密通信加密算法簡單、速度較快,適合大數(shù)據(jù)量的傳輸。非對(duì)稱加密通信中有一對(duì)密鑰,公鑰和私鑰,一般如果使用公鑰對(duì)數(shù)據(jù)進(jìn)行加密,則對(duì)應(yīng)的私鑰用來解密;如果使用私鑰對(duì)數(shù)據(jù)進(jìn)行加密,則對(duì)應(yīng)的公鑰才能解密。非對(duì)稱加密通信算法復(fù)雜、安全性高,但速度慢,適合小數(shù)據(jù)量的傳輸。
在金融類軟件系統(tǒng)中,客戶端\服務(wù)器(C\S)模式的軟件系統(tǒng)十分常見,在設(shè)計(jì)這類軟件系統(tǒng)時(shí),用戶登錄是必不可少的一個(gè)環(huán)節(jié),從狹義上看用戶登錄是客戶端用戶為進(jìn)入服務(wù)器中某一項(xiàng)應(yīng)用程序而進(jìn)行的一項(xiàng)基本操作,而從廣義上看,用戶登錄是服務(wù)器對(duì)客戶端用戶進(jìn)行的身份驗(yàn)證、授權(quán)操作,更是客戶端到服務(wù)器通信的安全傳輸?shù)牡谝坏婪谰€。如何在用戶登錄提交用戶名和密碼時(shí),建立客戶端與服務(wù)器之間的安全通信是個(gè)值得研究的問題。
據(jù)了解,目前現(xiàn)有金融類軟件系統(tǒng)中,通常的做法是在各個(gè)環(huán)節(jié)進(jìn)行加解密,加解密通信算法通常采用的是固定因子,采用固定因子的加解密通信通常對(duì)不同客戶端加密相同數(shù)據(jù)時(shí),產(chǎn)生的密文不唯一,安全性較低,容易被破解。本文提出的加密算法是基于傳統(tǒng)常見的算法模式衍生的動(dòng)態(tài)加密模式,較目前國內(nèi)各大廠商使用的現(xiàn)有加密算法更加安全可靠。
3 基于動(dòng)態(tài)加密因子的對(duì)稱加解密通信算法的設(shè)計(jì)思路
基于動(dòng)態(tài)加密因子的對(duì)稱加解密通信算法,采用動(dòng)態(tài)加密因子作為算法因子。動(dòng)態(tài)加密因子由兩部分組成,一個(gè)是登錄的用戶名(注:包含用戶名但不限用戶名,這里泛指所有可變的動(dòng)態(tài)字符串,例如:時(shí)間戳、GUID(全局唯一標(biāo)識(shí)符)、隨機(jī)數(shù)等等,本文統(tǒng)一采用“登錄用戶名”描述),一個(gè)是可配置的混淆因子。
3.1 客戶端和服務(wù)器端的身份互驗(yàn)算法設(shè)計(jì)思路
首先在客戶端登錄前,與服務(wù)器交互,服務(wù)器端產(chǎn)生動(dòng)態(tài)加密因子,客戶端在獲得用戶令牌(user token)的同時(shí)獲動(dòng)態(tài)因子??蛻舳藢?dòng)態(tài)加密因子,通過一定規(guī)則運(yùn)算后得到一個(gè)密鑰FA,該密鑰為偽密鑰,即不是用來真正作加解密工作的密鑰,該密鑰僅為一個(gè)過程變量。將偽密鑰FA進(jìn)行HASH-SHA1運(yùn)算,得到HASH值hash_A,并將該值傳遞到服務(wù)器端。HASH的目的是隱藏偽密鑰中的登錄用戶名和混淆因子信息。
服務(wù)器端也將動(dòng)態(tài)加密因子,通過相同的規(guī)則運(yùn)算后,得到一個(gè)偽密鑰FB,將偽密鑰FB進(jìn)行HASH-SHA1運(yùn)算,得到HASH值hash_B,并將該值傳遞到客戶端。客戶端和服務(wù)器端各自將hash_B與hash_A值做比較,如果兩個(gè)值相等,則通過雙方的身份驗(yàn)證。
算法流程如圖1所示。
3.2 客戶端和服務(wù)器端的安全通信算法設(shè)計(jì)思路
客戶端將偽密鑰FA進(jìn)行HASH_MD5運(yùn)算,得到密鑰RA,該密鑰為真密鑰,即用來真正作為加解密工作的密鑰。服務(wù)器端也對(duì)偽密鑰FB進(jìn)行HASH_MD5運(yùn)算,得到密鑰RB??蛻舳擞肦A對(duì)傳輸?shù)拿魑臄?shù)據(jù)進(jìn)行加密,將密文傳到服務(wù)器后,服務(wù)器收到密文后,用RB來解密獲得明文,反之亦然。
事實(shí)上,在整個(gè)加解密通信過程中,采用了對(duì)稱加密算法,簡化了加解密的工作量,并且該算法一定程度上保證了用戶傳輸密文的唯一性。
算法流程如圖2所示:
3.3 偽密鑰生成思路
客戶端獲取在服務(wù)器端生成的混淆因子后,使用排隊(duì)的方式形成密鑰,排隊(duì)規(guī)則為,用戶名的第一個(gè)字符排第一位,混淆因子的第一個(gè)字符排第二位,用戶名的第二個(gè)字符排第三位,混淆因子的第二個(gè)字符排第四位,依次類推。通常建議混淆因子要配置為比用戶名字符長度長的字符串,所以當(dāng)用戶名字符排列完畢后,將剩余的混淆因子依次排在最后,最終排隊(duì)形成的新字符串為偽密鑰。
算法流程如圖3所示:
3.4 加密通信算法思路
異或的特點(diǎn)是原始值經(jīng)過兩次異或后,該值后會(huì)還原成原來的值,所以可利用異或的這個(gè)特性來進(jìn)行加解密。在發(fā)送端,可把明文與密鑰進(jìn)行異或操作,生成密文,如圖4所示。將密文發(fā)送到接收端,再利用密鑰進(jìn)行異或操作,就能得到明文,如圖5所示。
4 本算法優(yōu)勢(shì)及擴(kuò)展思路
4.1 本算法的優(yōu)勢(shì)
1) 在客戶端與服務(wù)器端交互過程中,密鑰始終沒有被放到網(wǎng)上傳遞,不存在被截獲、被篡改、被破譯的威脅。密鑰被SHA1-HASH后,其值放到網(wǎng)絡(luò)上傳,長度160位,即使被截獲也很難破譯獲得原文。
2) 密鑰生成具有動(dòng)態(tài)隨機(jī)性,且為一次性密鑰,密鑰不存儲(chǔ),密鑰間的相關(guān)度為零,密鑰之間無法推導(dǎo)獲得。
3) 密鑰長度設(shè)計(jì)為128位,且為一次性密鑰,將明文和密鑰異或既簡單又可靠的加密方式,加解密速度較快,適用于大數(shù)據(jù)量的加解密。
4.2 本算法的擴(kuò)展思路
本算法可以做進(jìn)一步擴(kuò)展設(shè)計(jì),前文提到動(dòng)態(tài)加密因子中的登錄的用戶名可以設(shè)置為其他任何動(dòng)態(tài)值、隨機(jī)字符串等,例如:擴(kuò)展登錄用戶名為用戶名+年月日、用戶名+時(shí)分秒等,其中年月日、時(shí)分秒這些作為一個(gè)動(dòng)態(tài)值是在不斷發(fā)生變化的,具有一定的隨機(jī)性,這樣密鑰的長度和復(fù)雜度既得到增加,隨機(jī)性也得到增強(qiáng)。另外動(dòng)態(tài)加密因子中的可配置的混淆因子可以替換為隨機(jī)函數(shù),實(shí)現(xiàn)起來也比較方便。
參考文獻(xiàn):
[1] 北京銳安科技有限公司.一種基于預(yù)設(shè)密鑰的對(duì)稱加密通信方法[P].中國:CN102387152A,2012.3.21.
[2] 褚萬青.一種對(duì)稱密碼表及對(duì)稱加密法[P].中國:CN104901811A,2015.9.9.
[3] 微軟公司.執(zhí)行對(duì)稱加密的技術(shù)[P].美國:200952438,2009.12.16.
[通聯(lián)編輯:朱寶貴]