李勝華
摘要:本文討論了移動環境下的密鑰管理問題,比較和分析了幾種典型的移動密鑰管理方案,對密鑰的生成和分發過程進行了詳細的對比。
關鍵詞:移動環境;密鑰管理;分布密鑰;會話密鑰;共享密鑰
當前移動環境下的密鑰管理主要有兩種基本方式:一種是通過智能卡及人工分發的方式,實現移動終端與應用服務器之間的共享密鑰與會話密鑰的分配與管理;另一種是基于身份認證機制實現密鑰的管理。下面介紹兩個分別對應了這兩種基本方式的移動環境密鑰管理方案。
一、一個手機銀行的密鑰管理方案
該方案使用智能卡和人工分發的方式,實現手機客戶端與銀行之間的密鑰管理。密鑰管理系統是通過兩個密鑰組件生成主密鑰并輸出到兩類卡片中,一類是用于卡片生產的個人化密鑰卡(SAM),一類是系統所需的主機系統密鑰卡(KMC)。系統的基本結構如圖1所示。

圖1手機銀行密鑰管理體系結構
整個密鑰管理包括主密鑰生成和分發、分布式密鑰使用、會話密鑰使用三個過程:
1.主密鑰的生成過程
(1)兩個安全負責人輸人各自的密鑰組件,密鑰組件卡由PIN保護。
(2)密鑰管理系統生成密鑰管理卡(KMC),密鑰管理卡由兩張傳輸密鑰卡(TKC)保護。密鑰管理卡可將密鑰傳輸給密鑰組件(HSM)。兩張傳輸密鑰卡應由兩位不同的安全負責人秘密保存。
(3)密鑰管理系統生成安全存儲組件卡(SAM)。
(4)可用密鑰管理系統修改KCC, TKC,SAM的PIN(為安全起見,應盡快修改PIN)。
2.主密鑰傳輸過程
(1)密鑰管理卡(KMC )將被送到HSM。
(2)兩個安全負責人將各自的傳輸密鑰卡(TKC)送到HSM,并輸入TKC的PIN。
(3)ISM自動讀出兩個傳輸密鑰,并由此計算出KMC的傳輸密鑰。
(4)HSM從KMC中讀出主密鑰(MK),并存儲主密鑰。
3.分布密鑰使用
分布密鑰,是手機銀行客戶與系統之間長期使用的數據加密密鑰。分布密鑰方法中,包含一個存儲在系統中的主密鑰和在每一張卡上存放的多個分布密鑰,分布密鑰Kd是由主密鑰Km和一個在卡上存在并且每一張卡上數據是唯一的一個數據Dd,通過加密算法計算得出,每一次卡片將數據M加密后得到密文{M } Kd,傳輸時附帶上Dd,這樣系統可得到密文{M } Kd及Dd。銀行系統可計算出卡片的分布密鑰,然后利用分布密鑰解密數據。
4.會話密鑰使用
會話密鑰的使用與分布密鑰大致相似,只不過用于產生會話密鑰的數據不是固定的Dd,而是一個隨機Random,這樣就保證了每次的會話密鑰各不相同。具體過程是:用卡上的密鑰(主密鑰或是分布密鑰)與一個隨機數Random,通過加密算法得出一個用于此次數據傳輸的會話密鑰,將數據用會話密鑰加密后連同隨機數一起發出,系統收到后,使用隨機數得到會話密鑰,再用會話密鑰解密數據。
二、Wassim Itani系統的密鑰管理方案
在Wassim Itani 和Ayman I Kayssi提出的端到端安全解決方案中,采用的是基于身份認證的密鑰管理方式,主要包括共享密鑰存儲、用戶身份認證和會話密鑰協商三部分內容。
1.共享密鑰存儲
共享密鑰K_share是在移動終端和應用服務器中長期存儲,用于會話密鑰的加密,從而保證會話密鑰安全交換的密鑰,必需得到安全的存儲。在服務器端的共享密鑰存放在數據庫中,可以通過相應的數據庫安全管理系統和其它安全策略保證其安全。移動終端的共享密鑰通過兩種方法保證其安全:一是加密后存放在Keys類,并且該Keys類被打包在JAR文件中;二是通過混淆器混淆JAR文件來阻止對代碼的反匯編,從而阻止獲取加密后的共享密鑰。移動終端對共享密鑰的加密處理如圖2所示,它使用客戶的64位密碼Pincode填充它本身來形成一個128位的加密密鑰,用于加密共享密鑰K_share。

圖2共享密鑰加密過程
2.用戶身份認證
用戶身份認證過程如圖3所示,首先移動終端向應用服務器發送認證信息,這些信息包括用戶ID“userid”、時間戳“timeStamp”、隨機數randomNumber以及摘要值H{userid,timeStamp,randomNumber,pincode},該摘要值是使用SHA-1摘要算法,以userid、timeStamp、randomNumber以及用個人識別碼后生成的pincode作為輸入信息生成。

圖3系統認證過程
應用服務器的AuthServlet收到認證信息后,先請求用戶產生一個HttpSession對象,將userID存放在會話變量中,然后根據用戶ID“userid”,利用數據庫訪問接口,從用戶信息數據庫中取出用戶的pincode及上次登錄系統的時間戳timeStamp,通過將取出的timeStamp與收到的用戶信息中的timeStamp比較,可以防止重放攻擊;最后,將數據庫中取出的pincode和從客戶端接收的userid、timeStamp、randomNumber輸入,同樣使用SHA-1算法生成摘要值,并將該摘要與認證信息中的摘要值進行對比,相同則認證成功,不同則說明認證失敗。
3.會話密鑰協商
當移動終端向服務器端的InitServlet發出會話密鑰的協商請求后,InitServlet首先獲取該用戶的HttpSession對象,從Session會話對象中獲取認證信息,確保用戶是已經通過認證。
InitServlet生成兩個128位的加/解密會話密鑰對——Session Keys,其中每個密鑰負責一個方向上的數據安全傳輸,也就是說:一個密鑰用于在手機客戶端加密數據,在服務器端解密數據;另外一個密鑰用于在服務器端加密數據,在手機客戶端解密數據。會話密鑰對存放在Session會話變量中,然后對會話密鑰進行加密處理,所使用的128位加密密鑰是由64位用戶密碼Pincode填補64位共享密鑰K_share組成。(其中Pincode和K_share是以userID為參數從數據中獲取的)加密處理后的會話密鑰對Session Keys以HTTP應答的形式發送給手機客戶端。
移動終端在接收到服務器端發給的加密會話密鑰后,需要進行解密處理:首先是根據用戶的密碼Pincode解密出存放在JAR文件的Keys類中的共享密鑰K_share,然后使用64位Pincode填補64位K_share組成的128位密鑰,解密出會話密鑰對Session Keys。
三、結論
在資源受限的移動計算環境中,往往使用對稱加密技術來保證通信的安全。因此,密鑰管理所關心的主要是會話密鑰的產生及安全分發問題。上述兩種密鑰管理方案安全性高,使用比較靈活,但實現復雜,成本較高,只適用于移動銀行、移動證券等安全性要求較高的應用領域。
參考文獻:
[1]中國移動通信公司.移動商務安全報告,2003.
[2] Manish Verma.XML security,2003.
[3] Bilal Siddiqui.Exploring XML Encry- ption,2002.
[4] Michael Juntao Yuan. J2ME 移動應用程序開發.北京:清華大學出版社,2004.