李勝華
摘要:本文討論了移動環(huán)境下的密鑰管理問題,比較和分析了幾種典型的移動密鑰管理方案,對密鑰的生成和分發(fā)過程進行了詳細(xì)的對比。
關(guān)鍵詞:移動環(huán)境;密鑰管理;分布密鑰;會話密鑰;共享密鑰
當(dāng)前移動環(huán)境下的密鑰管理主要有兩種基本方式:一種是通過智能卡及人工分發(fā)的方式,實現(xiàn)移動終端與應(yīng)用服務(wù)器之間的共享密鑰與會話密鑰的分配與管理;另一種是基于身份認(rèn)證機制實現(xiàn)密鑰的管理。下面介紹兩個分別對應(yīng)了這兩種基本方式的移動環(huán)境密鑰管理方案。
一、一個手機銀行的密鑰管理方案
該方案使用智能卡和人工分發(fā)的方式,實現(xiàn)手機客戶端與銀行之間的密鑰管理。密鑰管理系統(tǒng)是通過兩個密鑰組件生成主密鑰并輸出到兩類卡片中,一類是用于卡片生產(chǎn)的個人化密鑰卡(SAM),一類是系統(tǒng)所需的主機系統(tǒng)密鑰卡(KMC)。系統(tǒng)的基本結(jié)構(gòu)如圖1所示。
圖1手機銀行密鑰管理體系結(jié)構(gòu)
整個密鑰管理包括主密鑰生成和分發(fā)、分布式密鑰使用、會話密鑰使用三個過程:
1.主密鑰的生成過程
(1)兩個安全負(fù)責(zé)人輸人各自的密鑰組件,密鑰組件卡由PIN保護。
(2)密鑰管理系統(tǒng)生成密鑰管理卡(KMC),密鑰管理卡由兩張傳輸密鑰卡(TKC)保護。密鑰管理卡可將密鑰傳輸給密鑰組件(HSM)。兩張傳輸密鑰卡應(yīng)由兩位不同的安全負(fù)責(zé)人秘密保存。
(3)密鑰管理系統(tǒng)生成安全存儲組件卡(SAM)。
(4)可用密鑰管理系統(tǒng)修改KCC, TKC,SAM的PIN(為安全起見,應(yīng)盡快修改PIN)。
2.主密鑰傳輸過程
(1)密鑰管理卡(KMC )將被送到HSM。
(2)兩個安全負(fù)責(zé)人將各自的傳輸密鑰卡(TKC)送到HSM,并輸入TKC的PIN。
(3)ISM自動讀出兩個傳輸密鑰,并由此計算出KMC的傳輸密鑰。
(4)HSM從KMC中讀出主密鑰(MK),并存儲主密鑰。
3.分布密鑰使用
分布密鑰,是手機銀行客戶與系統(tǒng)之間長期使用的數(shù)據(jù)加密密鑰。分布密鑰方法中,包含一個存儲在系統(tǒng)中的主密鑰和在每一張卡上存放的多個分布密鑰,分布密鑰Kd是由主密鑰Km和一個在卡上存在并且每一張卡上數(shù)據(jù)是唯一的一個數(shù)據(jù)Dd,通過加密算法計算得出,每一次卡片將數(shù)據(jù)M加密后得到密文{M } Kd,傳輸時附帶上Dd,這樣系統(tǒng)可得到密文{M } Kd及Dd。銀行系統(tǒng)可計算出卡片的分布密鑰,然后利用分布密鑰解密數(shù)據(jù)。
4.會話密鑰使用
會話密鑰的使用與分布密鑰大致相似,只不過用于產(chǎn)生會話密鑰的數(shù)據(jù)不是固定的Dd,而是一個隨機Random,這樣就保證了每次的會話密鑰各不相同。具體過程是:用卡上的密鑰(主密鑰或是分布密鑰)與一個隨機數(shù)Random,通過加密算法得出一個用于此次數(shù)據(jù)傳輸?shù)臅捗荑€,將數(shù)據(jù)用會話密鑰加密后連同隨機數(shù)一起發(fā)出,系統(tǒng)收到后,使用隨機數(shù)得到會話密鑰,再用會話密鑰解密數(shù)據(jù)。
二、Wassim Itani系統(tǒng)的密鑰管理方案
在Wassim Itani 和Ayman I Kayssi提出的端到端安全解決方案中,采用的是基于身份認(rèn)證的密鑰管理方式,主要包括共享密鑰存儲、用戶身份認(rèn)證和會話密鑰協(xié)商三部分內(nèi)容。
1.共享密鑰存儲
共享密鑰K_share是在移動終端和應(yīng)用服務(wù)器中長期存儲,用于會話密鑰的加密,從而保證會話密鑰安全交換的密鑰,必需得到安全的存儲。在服務(wù)器端的共享密鑰存放在數(shù)據(jù)庫中,可以通過相應(yīng)的數(shù)據(jù)庫安全管理系統(tǒng)和其它安全策略保證其安全。移動終端的共享密鑰通過兩種方法保證其安全:一是加密后存放在Keys類,并且該Keys類被打包在JAR文件中;二是通過混淆器混淆JAR文件來阻止對代碼的反匯編,從而阻止獲取加密后的共享密鑰。移動終端對共享密鑰的加密處理如圖2所示,它使用客戶的64位密碼Pincode填充它本身來形成一個128位的加密密鑰,用于加密共享密鑰K_share。
圖2共享密鑰加密過程
2.用戶身份認(rèn)證
用戶身份認(rèn)證過程如圖3所示,首先移動終端向應(yīng)用服務(wù)器發(fā)送認(rèn)證信息,這些信息包括用戶ID“userid”、時間戳“timeStamp”、隨機數(shù)randomNumber以及摘要值H{userid,timeStamp,randomNumber,pincode},該摘要值是使用SHA-1摘要算法,以userid、timeStamp、randomNumber以及用個人識別碼后生成的pincode作為輸入信息生成。
圖3系統(tǒng)認(rèn)證過程
應(yīng)用服務(wù)器的AuthServlet收到認(rèn)證信息后,先請求用戶產(chǎn)生一個HttpSession對象,將userID存放在會話變量中,然后根據(jù)用戶ID“userid”,利用數(shù)據(jù)庫訪問接口,從用戶信息數(shù)據(jù)庫中取出用戶的pincode及上次登錄系統(tǒng)的時間戳timeStamp,通過將取出的timeStamp與收到的用戶信息中的timeStamp比較,可以防止重放攻擊;最后,將數(shù)據(jù)庫中取出的pincode和從客戶端接收的userid、timeStamp、randomNumber輸入,同樣使用SHA-1算法生成摘要值,并將該摘要與認(rèn)證信息中的摘要值進行對比,相同則認(rèn)證成功,不同則說明認(rèn)證失敗。
3.會話密鑰協(xié)商
當(dāng)移動終端向服務(wù)器端的InitServlet發(fā)出會話密鑰的協(xié)商請求后,InitServlet首先獲取該用戶的HttpSession對象,從Session會話對象中獲取認(rèn)證信息,確保用戶是已經(jīng)通過認(rèn)證。
InitServlet生成兩個128位的加/解密會話密鑰對——Session Keys,其中每個密鑰負(fù)責(zé)一個方向上的數(shù)據(jù)安全傳輸,也就是說:一個密鑰用于在手機客戶端加密數(shù)據(jù),在服務(wù)器端解密數(shù)據(jù);另外一個密鑰用于在服務(wù)器端加密數(shù)據(jù),在手機客戶端解密數(shù)據(jù)。會話密鑰對存放在Session會話變量中,然后對會話密鑰進行加密處理,所使用的128位加密密鑰是由64位用戶密碼Pincode填補64位共享密鑰K_share組成。(其中Pincode和K_share是以userID為參數(shù)從數(shù)據(jù)中獲取的)加密處理后的會話密鑰對Session Keys以HTTP應(yīng)答的形式發(fā)送給手機客戶端。
移動終端在接收到服務(wù)器端發(fā)給的加密會話密鑰后,需要進行解密處理:首先是根據(jù)用戶的密碼Pincode解密出存放在JAR文件的Keys類中的共享密鑰K_share,然后使用64位Pincode填補64位K_share組成的128位密鑰,解密出會話密鑰對Session Keys。
三、結(jié)論
在資源受限的移動計算環(huán)境中,往往使用對稱加密技術(shù)來保證通信的安全。因此,密鑰管理所關(guān)心的主要是會話密鑰的產(chǎn)生及安全分發(fā)問題。上述兩種密鑰管理方案安全性高,使用比較靈活,但實現(xiàn)復(fù)雜,成本較高,只適用于移動銀行、移動證券等安全性要求較高的應(yīng)用領(lǐng)域。
參考文獻:
[1]中國移動通信公司.移動商務(wù)安全報告,2003.
[2] Manish Verma.XML security,2003.
[3] Bilal Siddiqui.Exploring XML Encry- ption,2002.
[4] Michael Juntao Yuan. J2ME 移動應(yīng)用程序開發(fā).北京:清華大學(xué)出版社,2004.