摘要:本文分析了使用Token進行身份認證的方法。提出一種在.NET環境下使用虛擬Token的身份認證方案,并結合實際的系統分析了該方案在實踐運行中的結果。
關鍵詞:身份認證;虛擬Token;.Net;網絡;通信;安全
中圖分類號:TP393文獻標識碼:A文章編號:1009-3044(2008)08-1pppp-0c
1 前言
隨著網絡技術的廣泛應用,越來越多的應用系統通過網絡傳輸和處理信息,隨之而來的是信息的安全性令人憂慮。一個突出的事實是:許多最具有危害性的犯罪都是繞過密碼保護以獲取對信息或資金的訪問權限。簡單的“用戶名+口令”的身份認證方式已經遠遠不能滿足很多系統的安全性要求。
.NET環境下,對用戶的權限分配和用戶角色的管理都有較完善的方案。用戶認證的方法也有對稱密鑰、非對稱密鑰等多種方案可以選擇。但客戶端提交自己的用戶名和密碼還是明文,所有的安全工作都在服務器端完成。這種情況下,網絡監聽和抓包工具可以很方便地還原相應的用戶名和密碼。當然使用SSL可以保證信息的加密和傳輸的安全,但設置繁雜、維護成本高,在中小型的系統中應用較少。為此,基于雙因素用戶認證的Token應運而生。其基本思路是,用戶成功登錄要有兩個因素:一個是只有他知道的口令,另一個是他擁有的,即Token。Token根據其特有的根和時間,每分鐘產生一個無法預知的編碼,該編碼和用戶口令構成了用戶的通行碼。要登錄的機器和該用戶的Token共享一個秘密。即Token的根;同時使用和Token相同的編碼生成函數。機器除檢查用戶的口令外,還在一個小的時間片內逐個生成Token編碼,并和用戶輸入的編碼做比較,若有一個匹配,則用戶的身份得到確認。顯然雙因索的用戶認證要比單一的口令更安全。
目前常規的做法是使用昂貴的硬件Token,一般經過三個回合的信息交換。我們提出一種更高效更經濟的方案,在.NET環境下使用動態口令技術通過兩個回合的信息交換用虛擬Token完成整個認證過程。
2 挑戰/應答式的身份認證方式
挑戰/應答機制身份認證屬于動態身份認證。在挑戰/應答機制中,每個系統用戶都持有相應的挑戰應答Token。Token內置種子密鑰和加密算法。用戶訪問系統時,認證系統提示輸入用戶名和靜態口令,認證通過后,系統下傳一個中心系統隨機生成的挑戰數,用戶將挑戰數輸入到挑戰應答Token中,挑戰應答Token利用內置的種子密鑰和加密算法計算出相應的應答數。用戶將該應答數上傳給認證中心。認證中心根據該用戶在認證中心保存的種子密鑰和同樣的加密算法計算出同樣的應答數,并和用戶上傳的應答數進行比較。由于每個用戶的種子密鑰不同,不同用戶對同樣的挑戰數可以計算出不同的應答數,只有用戶持有指定的挑戰應答Token才能計算出正確的應答數,同時該應答數只能網絡中身份認證技術的研究在本次挑戰應答過程中有效,不擔心被他人截取,因此能保證很高的安全性。這種方式是可靠有效的認證方法。這種身份認證方法是基于物理硬件設備Token實現的。但價格昂貴,限制了技術的推廣與應用。
3 虛擬Token的安全性分析
3.1 虛擬Token身份認證方式
本系統的身份認證采用了安全性較高的挑戰/應答式的身份認證模式。
在認證過程中,系統將時間作為挑戰數。客戶使用通用的虛擬Token,用時間片和用戶身份的種子算出應答數。再將應答數提交到系統進行驗證。驗證操作主要有2個步驟:
第一、驗證應答數是否在允許的時間片段內。第二、由服務器端預存的用戶身份種子和時間片再次生成驗證碼,將驗證碼與應答數進行比較,通過后可登錄系統。
這種方式下,時間作為挑戰數是一次性的,對于相同的用戶身份種子加上不同的時間片在虛擬Token中運算得到的應答數是不同的,這樣就可以有效防止回放攻擊。
這種方式提供了一種通用的虛擬Token,比靜態口令安全性更高。
3.2 安全通信:虛擬Token在防偵聽中的作用
在整個通信過程中,在網絡中傳輸的是加密的應答數,加密算法選擇了單向散列函數SHA-1。單向函數計算起來非常容易,但是對其求逆卻異常困難。也就是說已知x,很容易計算f (x),但己知f (x),卻難以計算出x。(1) (2) (3)這里所說的“難以計算”在密碼學中的含義就是:即使世界上所有的計算機都用來計算,f (x)計算出x也要花費數百萬年的時間。散列函數把可變輸入長度的串(叫做預映射)轉換成固定長度的輸出串(叫做散列值)的一種函數。散列函數是典型的多到一的函數,因為不同的預映射可能會得到相同的散列值。不能用散列函數來確定兩個串一定相同,但是卻可以用作校驗預映射的手段。
單向函數與散列函數相結合形成單向散列函數,在密碼學中應用非常廣泛,它是許多安全應用協議的基本模塊。(4)單向散列函數就是在一個方向上工作的散列函數,從預映射很容易計算散列值,但要從其散列值推出一個預映射卻很難。另外單向散列函數要保證是無沖突的,即難于產生兩個預映射的值,使它們的散列值相同,換句話說,單向散列函數是一對一的函數。
散列函數是公開的,對處理過程不用保密,它的安全性就在于它的單向性,其輸出不依賴于輸入。(5) (6) (7)平均而言,預映射的單個位的改變將引起散列值中一半的位改變。(8)已知一個散列值,要找到預映射的值,使它的散列值等于己知的散列值在計算上是不可行的。
本系統中,我們選用了SHA-1這種使用廣泛的散列算法。這種算法經過密碼學領域中許多專家相當長時間的測試,安全性高。這樣,通過SHA-1加密的應答數即使被非法用戶截取,也不會對系統安全造成威脅,這樣就解決了口令明文傳遞的問題。
4 .NET下虛擬Token認證方案
本文針對硬件Token性價比過低的情況,設計了使用虛擬Token代替物理硬件Token進行挑戰/應答式的身份認證。虛擬Token是一種軟件形式的Token,因此成本較低,適合廣泛使用。
4.1 虛擬Token的生成方案
用戶A通過普通的用戶注冊過程得到了用戶名和Token的根RA,同時用戶A下載一個虛擬Token到本地的計算機上。
4.2 虛擬Token的驗證
登錄時,虛擬Token根據本地的時間戳TA及Token的根RA由一個單向加密算法J得到對稱密鑰KA=J(RA,TA),此單向加密算法在服務器端也存在。密鑰的驗證在服務器端實現。服務器端接收到客戶端傳來的消息后由當前的時間根據設定的時間片生成最多至2個(當前時間片和前一時間片)的TA,并根據用戶A的用戶名查出用戶的根RA,之后用快速的單向加密算法得到密鑰至多2 個的K’A。 最后比較客戶端傳來的密鑰KA和服務器端生成的密鑰K’A。相同時用戶就被驗證通過。
5 實踐應用
.NET Framwork編程(9)最困難的一方面是確定Framework是否已經提供了系統所需的功能,還是要全部自己實現。
本系統不創建自己的安全系統,但使用自己的Pricipal和identity,同Microsoft已有的安全體系相吻合。為了讓程序員方便地采納已有的安全系統,Micosoft提供了Iprincipal和Iidentity接口。
為此,創建兩個實現Iprincipal和Iidentity的類,分別命名為:SunewsPrincipal和SunewsIdentity,就可以讓我們的類符合Microsoft原有的系統了。在SunewsPrincipal類中為實現兩套不同的認證方法,這里只是簡要地概括類成員。
SunewsPrincipal類成員(通過HttpContext.User可用)

圖1 SunewsPrincipal類
SunewsPrincipal類能夠讓站點判斷某個用戶的權限。Identity屬性還能夠告訴我們用戶是誰。在正常的操作中,Framework自己就可以判斷屬于安全環境的用戶的身份。在我們的實現方式中,我們將會使用ASP.NETK中基于表單的驗證機制手工設置負責人的身份。
SunewsIdentity類成員(通過HttpContext.User.Identity可用)

圖2 SunewsIdentity類
6 結論
身份認證是系統確認訪問用戶身份真實性、合法性和唯一性的手段。根據不同系統的安全要求建立性能、價格都合適的身份認證系統對信息系統的推廣使用具有重要的意義。本文設計了一種使用虛擬Token的身份認證方案,并結合了.Net本身的安全認證體系,實現了使用虛擬Token的安全信息發布系統。并在實踐中經過了大量的使用和檢驗。
參考文獻:
[1]陳魯生,沈世錳.現代密碼學[M].北京:科學出版社.2002.
[2]黃月江,龔奇敏.信息安全與保密[M].北京國防工業出版社,1999.
[3]楊義先,林曉東,邢育森.信息安全綜論[M].北京郵電大學,2000.
[4]武新華,安向東,蘇雅.加密解密全方位學習[M].中國鐵道出版社,2006.
[5]邱志聰.加密解密技能百練[M].中國鐵道出版社,2005.
[6]郭棟,孫鋒,唐植明.加密與解密實戰攻略[M].清華大學出版社,2003.
[7]盧開澄.計算機密碼學[M].清華大學出版社,1999.
[8]Bruce Schneier,吳世忠,祝世雄,張文政.應用密碼學[M].機械工業出版社,2000.
[9]微軟公司,詹文軍,王新程.ASP.NET安全應用程序開發[M].清華大學出版社,2003.