摘要:針對目前嵌入式系統安全機制多采用單一口令的不足,提出了一種在VxWorks環境下基于USBKey和BSP的安全解決方案。該方案通過分析VxWorksBSP的功能及啟動機制,在BSP中實現了基于USBKey的身份認證,同時使用USBKey實現對系統正常運行期間的安全保護。
關鍵詞:USBKey; 板級支持包; VxWorks; 身份認證
中圖分類號:TP309.1文獻標志碼:A
文章編號:1001-3695(2007)08-0176-02
目前,針對PC系統的安全訪問控制機制比較完善,已經從基于單一的口令設置發展到基于雙因子身份認證和系統運行時的訪問控制,從在CMOS中實現發展到在BIOS中實現。但對于嵌入式系統下的安全訪問控制機制研究得較少,這主要是由于嵌入式系統代碼小、實時性和可靠性要求較高,若安全方案設計不好,易影響整個系統的性能乃至造成整個系統的崩潰。目前針對嵌入式系統的安全訪問機制,主要是在系統應用層中設置口令,已不能適應安全性要求較高的系統。
1背景知識
1.1嵌入式實時操作系統VxWorks及其BSP
VxWorks操作系統是美國風河公司開發的一款高性能、可裁剪的嵌入式實時操作系統。其支持所有主流的處理器系統,并提供了豐富的可供用戶裁減的BSP。它以良好的可靠性和卓越的實時性被廣泛地應用在通信、軍事、航空航天等高精尖技術及實時性要求極高的領域中。
板級支持包(BSP)通常是指針對具體的硬件平臺,用戶所編寫的啟動代碼和部分設備驅動程序的集合,主要實現初始化、驅動部分設備等功能。BSP的概念只是針對嵌入式操作系統而言的,而像Windows、UNIX等信賴BIOS引導的操作系統是無BSP可言的。對于同一個系統言,不同操作系統的BSP在本質上是一樣的。在VxWorks系統中,將BSP描述為介于底層硬件環境和VxWorks之間的一個軟件接口,其主要功能是系統加電后初始化目標機硬件、初始化操作系統及集成硬件驅動程序。
1.2安全電子鑰匙USBKey
USBKey是一種USB接口的硬件設備,它內置單片機或智能卡芯片,可以實現數據加密和數據存儲的功能,內置有密碼算法。USBKey具有體積小、功能強大、兼容性好、價格便宜的特點,近幾年來在身份認證領域中得到了廣泛的應用。
在本系統中USBKey主要由控制芯片、flash存儲器構成。內置的密碼算法采用單向散列函數MD5。控制芯片采用ATMEL公司的AT90SC6464CUSB芯片,具有隨機數發生器、密碼協處理器功能;內嵌的flash存儲器可以存儲隨機數和算法。在flash中存儲的數據為隨機數R及哈希值H。在對USBKey進行初始配置時,隨機數發生器生成隨機數R并存于flash中,然后系統使用MD5算法對用戶的PIN碼和隨機數R進行哈希運算,運算結果作為H的值,PIN碼由用戶自己掌握,不存儲在USBKey中,在進行身份認證時由用戶輸入。
2安全方案的研究設計
2.1VxWorks驅動機制及預內核初始化[ 3]
在VxWorks中,硬件驅動程序被分為兩類,即通用的和BSP專用的。通用的驅動程序管理可以在不同的目標環境之間移動的設備,如網卡;而BSP驅動程序管理專用于在某種目標環境之間移動的設備,如中斷控制器。本系統中所使用的USBKey驅動程序屬于通用的驅動程序。在開發BSP時,不僅要對BSP專用的驅動程序提供完全的支持,還需要將通用的設備驅動程序集成在BSP中。
在基于VxWorks的嵌入式系統中,系統的啟動過程分為三種。本文僅以其中的可加載型映像來描述整個系統的啟動過程(圖1)。系統加電后首先執行引導代碼,加載VxWorks映像,然后處理器跳轉到VxWorks映像的加載地址(即函數sysInit( )的首地址)開始執行。函數sysInit( )復位處理器,執行最少而必要的硬件初始化,但是并不初始化內存。之后轉到usrInit( )執行,完成內核啟動之前的初始化。這兩個子程序都被靜態地鏈接在可加載的VxWorks映像中。usrInit( )是一個通用子程序,它負責關閉所有硬件中斷,將硬件初始化到一種已知的靜止狀態,然后調用子程序激活VxWorks內核。其中:子程序sysHwInit( )將硬件置于初始的靜止狀態;之后,子程序kernelInit( )激活VxWorks內核,生成多任務環境,并產生一個任務來安裝驅動程序以及創建設備、初始化VxWorks庫、調用應用程序啟動代碼。用來生成這個任務的子程序是usrRoot( )。由此可見,BSP專用的設備驅動程序則位于子程序sysHwInit( )中,而通用的設備驅動程序可位于usrRoot( )[4]。
2.2安全方案的可行性分析
由VxWorks系統的啟動過程可以看出,系統從加電到啟動應用程序代碼是一個順序固定的單一鏈式過程,各個函數執行的順序相對固定,因此在此過程中實現的認證比較可信[2]。要實現身份認證,系統首先要在身份認證模塊前加載USBKey驅動程序,在將USBKey驅動程序集成到BSP中時同時將其放置在usrRoot( )中,這樣身份認證模塊才能對USBKey進行操作。
在基于VxWorks的嵌入式系統中,可以實現在發生外部中斷時掛起所有任務的功能,同時可以通過另一個中斷將任務激活。基于此,可以在本系統中將USBKey的插拔作為一個外部中斷,從而實現系統運行時的安全保護。
整個安全方案的流程如圖2所示。
2.3安全方案的設計
2.3.1雙因子身份認證的設計
在傳統的單因子身份認證中,秘密值就是口令,由用戶自己掌握;而在采用的雙因子身份認證當中,秘密值則存于USB ̄Key中,訪問者除了要掌握自己USBKey的PIN碼,還必須持有硬件設備USBKey才能夠通過身份認證,雙因子身份認證技術彌補了傳統密碼認證方法的很多弊端。在系統啟動中實現的身份認證有如下原則:從系統加電起,要保證正常工作必須始終插入正確USBKey;BSP初始化過程中必須插入正確USBKey。
為了在BSP中實現身份認證,本系統的身份認證模塊與USBKey驅動程序一樣,嵌入在子程序usrRoot( )中。由于該模塊需要對USBKey進行操作,認證在加載USBKey驅動程序后進行,要求認證模塊代碼盡量優化,以適應嵌入式系統特點。為了實現“我所有”(即USBKey)與“我所知”(即PIN碼)的緊密結合,同時也為了實現強身份認證,在系統加電前要將USBKey插入系統中。
整個身份認證過程如下:
a)在系統啟動過程進行到UsrRoot( )時,首先加載USB ̄Key驅動程序,使系統能夠對USBKey進行操作。
b)加載身份認證模塊,系統彈出對話框,要求用戶輸入USBKey的PIN碼。
c)用戶輸入PIN碼,由USBKey中內置的MD5算法對PIN碼與USBKey中的隨機數R進行運算。
d)將運算結果與USBKey flash中存儲的哈希值H進行比較,若相同,轉入e);若不同,轉入f)。
e)USBKey中的隨機數發生器產生新的隨機數替代原有的隨機數,并與PIN碼進行哈希運算得到新的哈希值,替代原有的哈希值,完成身份認證后系統啟動應用程序代碼。
f)可以給用戶三次機會,若連續三次全部錯誤,則鎖定系統。
2.3.2系統運行時的安全保護
通常的系統安全解決方案,只是在身份認證階段實現,而對于系統運行時的安全保護則較少。由于實際項目中嵌入式系統終端機需要進行移動通信,系統運行時的安全保護相對于PC機系統更為重要。根據上述的安全可行性分析,可以通過插撥USBKey來實現對系統的安全保護。
在系統正常運行期間,用戶因某種原因需暫時離開該終端機時,可以將USBKey撥下,終端機將系統的全部任務掛起;用戶返回后將USBKey插入終端機中,此時無須輸入口令,系統利用MD5算法對暫存在終端機中的PIN碼與USBKey中的隨機數R進行哈希運算,將運算結果與USBKey中的哈希值H比較,相同則恢復任務的運行。
3方案的安全性分析
在以往的嵌入式系統中,由于受到嵌入式系統代碼量小、可靠性和實時性要求高的限制,多采用基于單一靜態口令的認證方案,弱口令成為系統的不安全因素,而對于系統運行期間基本沒有進行安全保護。本文實現了安全性較高的基于USBKey的雙因子認證,并對運行期間的系統實行了安全保護。
與基于口令的安全方案相比,在安全性方面,本安全方案具有較為明顯的優勢:
a)雙因子認證是信賴外部實物USBKey和PIN碼實現的,可行性高,用戶必須同時滿足“所有”(USBKey)和“所知”(PIN碼)才能通過身份認證;
b)由于密碼算法采用單向散列哈希函數MD5,即使非法用戶獲得了USBKey,知道哈希值H,也無法計算出PIN碼;
c)在系統的底層就開始對系統進行安全保護,如果不能通過相關認證,用戶無法進入應用系統;
d)啟動過程實現的身份認證與系統運行時的安全保護構成一個整體,從開機到使用提供一個完整的安全解決方案。
4結束語
本方案針對嵌入式系統的特點和項目實際需求,在BSP中實現基于USBKey的雙因子身份認證,在系統運行期間利用USBKey實現對系統的安全保護,已經在實際中得到應用。對同一個系統而言,不同操作系統的BSP在本質上是一樣的,所以本方案對于其他嵌入式系統也具有借鑒意義。
參考文獻:
[1]孫勇,楊義先.基于BIOS和USB盤實現對PC機的安全訪問[J].計算機應用研究,2006,23(5):113114,136.
[2]方艷湘,黃濤.Linux可信啟動的設計與實現[J].計算機工程,2006,32(9):51-53.
[3]RIVER W. VxWorks BSP developer’s[K].Guide 5.5 ed. USA:Wind River Systems Inc,2002:223-230.
[4]李捷,王汝傳. 基于VxWorks的設備驅動程序實現技術[J].微型機與應用,2002,21(11):7-8.
[5]徐寧,趙彬.基于USBKey的BIOS與系統安全解決方案[EB/OL].[200510-01].http://www.eetchina.com/ARTR_8800378389_480101.HTM.
注:“本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文”