胡祥義 杜麗萍 郭建偉
(北京市科技情報研究所網絡密碼認證技術北京市重點實驗室 北京 100044)
隨著網絡應用的不斷發展,解決具有海量用戶的網絡快速認證技術需求迫在眉睫,這種安全需求主要是要提高海量用戶的密鑰交換的速度,使用現有技術已經不能滿足處理大數據的安全需求。若使用雙鑰密碼體制如:RSA或ECC算法,建立安全認證協議,PKI架構建設成本較高,認證協議效率較低,制約了PKI技術針對海量用戶的應用。基于令牌設備的動態口令認證系統提高了時效,但是,這類動態口令是由用戶根據動態令牌顯示屏上顯示的動態口令,實時輸入計算機后,由客戶端再提交到網絡認證中心端,實施網絡身份認證,該認證模式容易受到“假銀行”式的病毒攻擊,安全等級相對來說較低些。
為解決動態口令的安全隱患,我們提出采用輕量級密碼算法和一種安全單鑰管理方法,在客戶機和認證中心兩端建立加密和認證協議,將用戶在客戶機端輸入的靜態口令和認證系統自動生成的靜態口令,通過密鑰元素代替表,代替成一次一變的認證密鑰,再生成動態口令,實現身份認證,從而,建立一種基于動態口令的身份認證系統。
在客戶端的客戶機上使用USB接口的智能卡,或者在移動終端上使用SD智能卡,在智能卡的芯片里,建立客戶端的加密系統,寫入:輕量級密碼算法、單鑰組合生成算法、客戶端動態口令認證協議,且寫入數據:客戶端智能卡的標識和一套“密鑰種子”表C的元素。
每個用戶的客戶端智能卡都有唯一的標識,且兩兩互不相同,每位用戶都持有不同的一支基于USB接口的智能卡或SD智能卡。
認證中心由認證服務器和加密卡硬件設備組成,在認證服務器的PCI接口上插入加密卡,在加密卡的芯片里建立認證中心端的加密系統,寫入輕量級密碼算法、單鑰組合生成算法、認證中心端用戶的靜態口令和“密鑰種子”表C元素的加密和數字簽名協議,認證中心端用戶的靜態口令和“密鑰種子”表C元素密文的解密和簽名驗證協議,認證中心端動態口令認證協議,在認證中心端認證服務器的硬盤存儲區,建立“密鑰種子”數據庫,該數據庫中存儲每條記錄的字段內容為:①用戶名i、用戶客戶端智能卡的標識Ti、②用戶的靜態口令密文、③“密鑰種子”表Ci元素的密文、④靜態口令和“密鑰種子”表Ci元素的數字簽名即:靜態口令和“密鑰種子”表 Ci元素摘要信息Gi的密文,其中:i=1~n, n為全體云用戶數量總和。
安全單鑰管理技術是指:通過單鑰組合生成算法來實時產生認證密鑰,解決認證系統中單鑰更新的管理方法。
單鑰組合生成算法是通過一組時間戳和隨機數組成的選取參數,來對一套“密鑰種子”表C的元素進行選取,用時間戳對“密鑰種子”表C的“行”元素進行選取,選出W行Y列的“密鑰種子”表C的(V×Y)子表D,再根據隨機數,對(V×Y)子表D的“列”元素進行選取,選出V個元素,將這V位元素組成一套(V×1)“密鑰種子”子表E,其中:W=109,V=36,Y=32,將“密鑰種子”子表E的元素,與全體靜態口令元素之間,建立一一對應關系,生成密鑰元素代替表,再根據用戶輸入的靜態口令和認證系統自動增添的靜態口令,從密鑰元素代替表中選出對應的密鑰元素,并合成一組認證密鑰。
在密鑰初始化過程中,由認證中心端加密卡芯片里的隨機數發生器,生成一組F1字節隨機數,F1= 1744字節,將F1字節的隨機數組成,一套W×Y的密鑰種子表C,

其中:表C的元素為占1字節, W=109, Y=16;
密鑰種子表C的組成:“年”子集 、“月”子集 、“日”子集 、“時”子集 和固定子集組成,“年”子集占10行16列,“月”子集占12行16列,“日”子集占31行16列,“時”子集占24行16列,“固定”子集占32行16列,5個子集共占W=109行,16列。
2.3.1 由時間戳從“密鑰種子”表C的元素中選V=36行元素,首先,根據時間戳從表C選出4行,其方法是:用時間戳“年”數字中個位數的數值,取表C中“年”對應的行數,如:時間戳為:2013XXXXXX,則:取表C中的第4行,……,用時間戳“時”數字的數值,取表C中“時”對應的“行”,如:時間戳為:20XXXXXX21,則:取表C中的第74行,再將表C的“固定”子集共32行全部選出,共選出V=36行,組成:36×16表C的子表D,

其中:表D的元素占1字節,表D中第5行~第V=36 行的元素與表C的第78行~第W=109行的元素完全相同;
2.3.2 根據隨機數從表D中選出V=36位元素,設:隨機數為:Q1,Q2,......,Q36,對應隨機數的數值分別為:q1,q2,......,q36,當Y=16時,每位隨機數為4比特十六進制數組成,36位隨機數對應的數值為:0~15之間,用:q1,q2,......,q36,對表D的1~ V=36行中列的元素進行選取,即:用第1位隨機數Q1的數值q1,來選取表D第1行的第q1 +1列的元素,用第2位隨機數Q2的數值q2,來選取表D第2行的第q2 +1列的元素, ......,用第V=36位隨機數Q36的數值q36,來選取表D第V=36行的第q36 +1列的元素,共選取V=36個元素,將選取出的這36個元素組成一個(36×1)的子密表E;

其中:“密鑰種子”子密表E的元素占1字節,V=36 。
2.3.3 建立密鑰元素代替表
用戶的全體靜態口令由0~9或A~Z組成,將這36個數字或字母與表E的元素建立一一對應關系,即:將“0”對應子表E的第1行元素E1,將“1”對應子表E的第2行元素E2,……,將“Z”對應子表E的第36行元素E36,組成密鑰元素代替表:

表1 組成密鑰元素代替表
2.3.4 生成認證密鑰
(1)增添靜態口令,設:用戶的靜態口令的長度為:N1=6~16位,認證密鑰K占16字節(128比特),由N1位靜態口令從密鑰元素代替表中,選取N1組密鑰元素來合成認證密鑰K,若合成的認證密鑰K小于16字節,則認證系統增添N2位靜態口令,其中:N2=Y-N1位,Y=16或32,表C的元素占1或0.5字節,N1=6~16位,N2=0~26位。
若時間戳的“時”為偶數,從0到9這連續的10個數字,再從A到P這連續16個英文字母共26位口令元素中,取N2位數字或英文字母作為增添的靜態口令。若時間戳的“時”為奇數,從A到Z這連續26個英文字母中,取N2位英文字母作為增添的靜態口令。
(2)生成認證密鑰,
設:用戶輸入的N1位靜態口令為:R1、R2、……、RN1 ,由認證系統增添的靜態口令為:T1、T2、……、TN2 。由靜態口令:R1、R2、……、RN1,從密鑰元素代替表選出對應的N1組密鑰元素 “Eb1 、Eb2 、……、Eb N1”,1≤ b 1 ~ b N1 ≤36,將“Eb1 、Eb2 、……、Eb N1”合并后作為K1,Y=16,表C的元素都占1字節,則N1組密鑰元素占6~16字節。
由認證系統自動增添的靜態口令:T1、T2、……、TN2 ,從密鑰元素代替表選出對應的N2組密鑰元素為:“Ec 1 、Ec 2 、……、Ec N2”, 將“Ec 1 、Ec 2 、……、Ec N2”,1≤c 1 ~ c N2 ≤36,合并后作為K2 。Y=16,表C的元素都占1字節,則N2組密鑰元素共占0~10字節。
將K1與K2合并成認證密鑰K,即:K= Eb1 、Eb2 、……、Eb N1 、Ec 1 、Ec 2 、……、Ec N2 。
舉例說明,設:N1位用戶靜態口令為“ 9、A、1、0、Z、Z”,共6位,根據密鑰元素代替表代替后,生成的密鑰元素K1=“E10 、E11 、E2 、E1 、E36 、E36 ”;
當時間戳中“時”為偶數時,則認證系統增添的靜態口令為:“0~9,即:N2=16-6=10位,根據密鑰元素代替表代替后,生成的密鑰元素K2 =“E1、E2、……、E10” 。將K1與K2合并后生成K,即:K= “E10 、E11 、E2 、E1 、E36 、E36、E1、E2、……、E10” 。當時間戳的“時”為奇數時,則認證系統增添的靜態口令為:“A~J”,即:N2=16-6=10位,根據密鑰元素代替表代替后,生成的密鑰元素K2 =“E11 、E12、……、E20” 。將K1與K2合并后生成K,即:K= “E10 、E11 、E2 、E1 、E36 、E36 、 E11 、E12 、……、E20”,其中:K占16字節。
當用戶登錄WEB服務器后,首先,用戶輸入用戶名和用戶的靜態口令,由連接WEB服務器的認證中心端加密系統,產生一組時間戳和隨機數,并產生認證生命周期T,將該組時間戳和隨機數發送客戶端智能卡芯片里,在客戶端智能卡芯片里,根據時間戳和隨機數組成的單鑰組合生成算法,首先,生成密鑰元素代替表,再將用戶輸入的H1位用戶的靜態口令,代替成H1組密鑰元素并合成密鑰元素K1,將認證系統自動增添的N2位靜態口令,代替成N2組密鑰元素并合成密鑰元素K2,將K1與K2合并成認證密鑰K,客戶端加密系統用認證密鑰K將隨機數加密成密文,得到隨機數密文即:動態口令,并與用戶名和客戶端智能卡的標識等3組認證參數一起發送給認證中心端。
認證中心端加密系統,在接收到客戶端發送來的3組認證參數后,首先,計算對應的認證生命周期T,測試T是否過期,若過期,則為非法用戶,返回“非法用戶!”,否則,認證中心端的加密系統,根據用戶名和客戶端智能卡的標識,在“密鑰種子”數據庫中定位對應的記錄,將該記錄對應的H1位靜態口令密文和“密鑰種子”表C元素密文,輸入加密卡芯片里,在加密卡芯片里,用一組固定對稱密鑰KK,將該記錄中的靜態口令密文和“密鑰種子”表C元素密文解密,再根據根據時間戳和隨機數組成的單鑰組合生成算法,對“密鑰種子”表C元素進行選取,生成密鑰元素代替表,將H1位靜態口令代替成H1組密鑰元素并合成K1,將認證系統自動增添的H2位靜態口令,代替成H2組密鑰元素并合成K2,將K1和K2合并成認證密鑰K,認證中心的加密系統,用K加密隨機數生成認證中心端的動態口令,通過對比兩端的動態口令是否相同?來判斷客戶端的用戶身份是否合法。
認證中心端加密系統,在加密卡芯片里,用摘要算法(如:SM3或SHA-1等)對用戶的靜態口令和密鑰種子表C元素進行摘要,得到其摘要信息L1,再用一組固定的對稱密鑰KK,分別將每個用戶的靜態口令和“密鑰種子”表C的元素加密成密文,并將每個用戶的靜態口令和“密鑰種子”表C元素的“摘要”信息L1進行加密,得到每個用戶的靜態口令和“密表種子”表C元素的密文,并得到每個用戶的靜態口令和“密表種子”表C元素摘要信息L1的密文即:每個用戶靜態口令和“密表種子”表C元素數字簽名,再將每個用戶的用戶名、客戶端智能卡的標識、用戶的靜態口令密文、“密鑰種子”表C元素的密文、用戶的靜態口令和“密表種子”表C元素的數字簽名,一并事先存儲在認證中心端的“密鑰種子”數據庫中。
認證中心端加密系統,首先,在“密鑰種子”數據庫中選出一條記錄,輸入加密卡芯片里,在加密卡芯片里,調用固定對稱密鑰KK,將該記錄中用戶的靜態口令和“密鑰種子”表C元素密文解密,并將用戶的靜態口令和“密表種子”表C元素的數字簽名解密,得到用戶的靜態口令和“密鑰種子”表C元素的明文,并得到用戶的靜態口令和“密鑰種子”表C元素摘要的明文L1,再調用“摘要”算法對用戶的靜態口令和“密鑰種子”表C元素,進行摘要得到摘要信息L2,通過對比L1和L2是否相同?來判別認證中心端對應用戶的靜態口令和“密鑰種子”表C的元素是否可信、完整。
客戶端用戶的靜態口令一部分由用戶輸入計算機,一部分由認證系統自動產生,通過密鑰元素代替表生成認證密鑰,認證密鑰生成過程都是在智能卡或加密卡的芯片里生成,明文不出芯片,保證兩端認證密鑰運行安全。
客戶端“密鑰種子”和單鑰組合生成算法,存放在智能卡芯片里,保證客戶端單鑰組合生成算法和“密鑰種子”數據的存儲安全。認證中心端的單鑰組合生成算法存放在加密卡芯片里,全體用戶的靜態口令和“密鑰種子”是以密文的形式存儲,保證認證中心端單鑰組合生成算法和全體用戶密鑰種子的存儲安全,防止黑客通過篡改用戶的各種認證參數,來攻擊認證系統。
由時間戳和隨機數組成的單鑰組合生成算法,從“密鑰種子”表C中選出的36組元素,組成的子表E并由子表E元素,與全體靜態口令元素組成密鑰元素代替表中的密鑰元素變化量為:1636或3236,即:2144 或2180,基本上一次一變。
用戶輸入計算機的靜態口令雖然不變,且認證系統自動增添的靜態口令也基本不變,但是,經過實時產生一次一變的密鑰元素表的代替,生成的認證密鑰一次一變。
用一次一變的認證密鑰加密36位隨機數生成隨機數密文即:動態認證口令,其中:每位十六進制的隨機數占4比特,36位十六進制隨機數共占144比特,變化量為:2144,動態口令的變化量也為:2144 ,基本上一次一變。
采用挑戰/應答式認證模式,能通過在認證中心端設置認證過程的生命周期T,來控制用戶進行身份認證的整個進程,防止黑客利用截獲的動態認證口令,來攻擊認證系統。
采用一種安全單鑰管理技術建立安全協議的策略,是基于智能卡和加密卡的芯片是可信的基礎上,認證系統中的各種安全協議,是在智能卡芯片和加密卡芯片里完成,都是基于“芯片級”的協議,安全性高。
本方案提出在客戶機端智能芯片和認證中心端加密卡芯片里,采用輕量級密碼和安全單鑰管理技術來建立動態口令認證系統,將用戶輸入的靜態口令和認證系統增添的靜態口令,通過一次一變的密鑰元素代替表代替后,生成的認證密鑰一次一變,并產生的動態認證口令也一次一變,保證認證系統既高效,又安全。能滿足具有海量用戶的網絡身份認證,為我國未來網絡的應用和發展保駕護航。
[1] GM/T 0021-2012, 動態口令密碼應用技術規范.
[2]專利申請號:200510107835.8 發明名稱:一種防止銀行信用卡被盜用的方法 發明人:胡陽.
[3]胡祥義,徐冠寧,杜麗萍.基于云計算的文件加密傳輸方法[J].網絡安全技術與應用.2013.5.
[4]沈昌祥.云計算安全與等級保護[J].信息安全與通信保密.2012.
[5]馮登國.開啟云計算安全時代[J].信息網絡安全.2011.
[6]張云勇,陳清金.云計算安全關鍵技術分析[J].電信科學.2010.
[7]馮志剛,馬超.淺談云計算安全[J].科技風.2010.
[8]田景成.云計算與密碼技術[J].信息安全與通信保密.2012