專利名稱:一種Linux嵌入式系統(tǒng)的安全啟動方法
技術(shù)領(lǐng)域:
本發(fā)明涉及嵌入式系統(tǒng)應(yīng)用領(lǐng)域和信息安全領(lǐng)域,具體而言,涉及一種Linux嵌入式系統(tǒng)的安全啟動方法。
背景技術(shù):
Linux嵌入式系統(tǒng)是以Linux為基礎(chǔ)的嵌入式作業(yè)系統(tǒng),它被廣泛應(yīng)用在移動電話、個人數(shù)字助理(PDA)、媒體播放器、消費(fèi)性電子產(chǎn)品以及航空航天等領(lǐng)域中。
一個嵌入式Linux嵌入式系統(tǒng)從軟件的角度去看包含四個部分 引導(dǎo)加載程序,包括固化在固件(firmware)中的boot代碼(可選)和BootLoader兩大部分; 內(nèi)核(Kernel)特定于嵌入式板子的指定內(nèi)核以及內(nèi)核的啟動參數(shù); 文件系統(tǒng)包括根文件系統(tǒng)和建立于Flash內(nèi)存設(shè)備之上的文件系統(tǒng),通常用Ramdisk來作為根文件系統(tǒng); 用戶應(yīng)用程序特定于用戶的應(yīng)用程序。
其中,文件系統(tǒng)是Linux操作系統(tǒng)的重要組成部分,Linux文件具有強(qiáng)大的功能。文件系統(tǒng)中的文件是數(shù)據(jù)的集合,文件系統(tǒng)不僅包含著文件中的數(shù)據(jù)而且還有文件系統(tǒng)的結(jié)構(gòu),所有Linux用戶和程序看到的文件、目錄、軟連接及文件保護(hù)信息等都存儲在其中。但是,目前對Linux文件系統(tǒng)保護(hù)方式還不足以確保文件系統(tǒng)中數(shù)據(jù)的信息安全。
發(fā)明內(nèi)容
為了確保Linux文件系統(tǒng)中數(shù)據(jù)的信息安全,本發(fā)明提供了一種Linux嵌入式系統(tǒng)的安全啟動方法。所述技術(shù)方案如下 一種Linux嵌入式系統(tǒng)的安全啟動方法,所述方法包括 Linux嵌入式設(shè)備中運(yùn)行引導(dǎo)加載程序,加載Linux內(nèi)核; 所述Linux內(nèi)核檢查所述Linux嵌入式設(shè)備上是否連接有預(yù)定的加解密設(shè)備; 若有,則將Linux文件系統(tǒng)數(shù)據(jù)的密文傳入所述加解密設(shè)備進(jìn)行解密,將解密后得到的所述Linux文件系統(tǒng)數(shù)據(jù)的明文傳入內(nèi)存中,掛載系統(tǒng)根目錄,繼續(xù)執(zhí)行啟動Linux嵌入式系統(tǒng)的其它操作; 若沒有,則停止所述啟動Linux嵌入式系統(tǒng)的操作。
所述加解密設(shè)備具體為usbkey。
所述Linux內(nèi)核檢查所述Linux嵌入式設(shè)備上是否連接有預(yù)定的加解密設(shè)備的方法具體包括 所述Linux內(nèi)核中預(yù)先指定所述usbkey的產(chǎn)品標(biāo)識和廠商標(biāo)識,若在所述Linux嵌入式設(shè)備上連接有與所述產(chǎn)品標(biāo)識和廠商標(biāo)識相符合的usbkey設(shè)備,則所述Linux嵌入式設(shè)備上連接有預(yù)定的加解密設(shè)備。
所述Linux內(nèi)核檢查所述Linux嵌入式設(shè)備上是否連接有預(yù)定的加解密設(shè)備的方法還包括 mount_root函數(shù)調(diào)用usb_register函數(shù)注冊usbkey驅(qū)動; 所述usb_register函數(shù)注冊usbkey驅(qū)動過程中掃描是否有指定的產(chǎn)品標(biāo)識和廠商標(biāo)識的usbkey設(shè)備存在; 如果有,則調(diào)用所述usbkey驅(qū)動的回調(diào)函數(shù)將所述usbkey設(shè)備的設(shè)備句柄添加到數(shù)組中,Linux內(nèi)核檢查所述數(shù)組,若找到指定的usbkey設(shè)備,則執(zhí)行所述將Linux文件系統(tǒng)數(shù)據(jù)的密文傳入所述加解密設(shè)備進(jìn)行解密操作,否則執(zhí)行所述停止所述啟動Linux嵌入式系統(tǒng)的操作; 如果沒有,則執(zhí)行所述停止所述啟動Linux嵌入式系統(tǒng)的操作。
所述將Linux文件系統(tǒng)數(shù)據(jù)的密文傳入所述加解密設(shè)備進(jìn)行解密的方法具體包括 將所述Linux文件系統(tǒng)數(shù)據(jù)的密文讀取到內(nèi)存中,將內(nèi)存中的所述Linux文件系統(tǒng)數(shù)據(jù)的密文傳入所述加解密設(shè)備中進(jìn)行解密操作。
所述將內(nèi)存中的所述Linux文件系統(tǒng)數(shù)據(jù)的密文傳入所述加解密設(shè)備中進(jìn)行解密操作的方法具體包括 根據(jù)加解密算法,將內(nèi)存中的所述Linux文件系統(tǒng)數(shù)據(jù)的密文分批地傳入所述加解設(shè)備中進(jìn)行解密操作。
當(dāng)所述Linux內(nèi)核檢查所述Linux嵌入式設(shè)備上連接有預(yù)定的加解密設(shè)備時,在所述將Linux文件系統(tǒng)數(shù)據(jù)的密文傳入所述加解密設(shè)備進(jìn)行解密之前,所述方法還包括 驗(yàn)證所述加解密設(shè)備與所述Linux嵌入式設(shè)備是否匹配。
驗(yàn)證所述加解密設(shè)備與所述Linux嵌入式設(shè)備是否匹配的方法具體包括 所述Linux內(nèi)核獲取所述加解密設(shè)備中保存的一段數(shù)據(jù),并驗(yàn)證所述數(shù)據(jù)是否正確; 若正確,則所述加解密設(shè)備與所述Linux嵌入式設(shè)備匹配,繼續(xù)執(zhí)行所述將Linux文件系統(tǒng)數(shù)據(jù)的密文傳入所述加解密設(shè)備進(jìn)行解密的步驟; 否則,所述加解密設(shè)備與所述Linux嵌入式設(shè)備不匹配,執(zhí)行所述停止所述啟動Linux嵌入式系統(tǒng)的操作的步驟。
驗(yàn)證所述加解密設(shè)備與所述Linux嵌入式設(shè)備是否匹配的方法還包括 所述加解密設(shè)備獲取所述Linux嵌入式設(shè)備的設(shè)備代碼,所述加解密設(shè)備驗(yàn)證所述設(shè)備代碼是否正確; 若正確,則所述加解密設(shè)備與所述Linux嵌入式設(shè)備匹配,所述加解密設(shè)備返回設(shè)備配對成功信息,繼續(xù)執(zhí)行所述將待解密的Linux文件系統(tǒng)數(shù)據(jù)傳入所述加解密設(shè)備進(jìn)行解密的步驟; 否則,所述加解密設(shè)備與所述Linux嵌入式設(shè)備不匹配,所述加解密設(shè)備返回設(shè)備配對失敗信息,執(zhí)行所述停止所述啟動Linux嵌入式系統(tǒng)的操作的步驟。
驗(yàn)證所述加解密設(shè)備與所述Linux嵌入式設(shè)備是否匹配的方法還包括 所述Linux內(nèi)核發(fā)送一段數(shù)據(jù)給所述加解密設(shè)備,所述加解密設(shè)備對所述數(shù)據(jù)進(jìn)行運(yùn)算,并將運(yùn)算結(jié)果返回給所述Linux內(nèi)核驗(yàn)證所述運(yùn)算結(jié)果是否正確; 若正確,則所述加解密設(shè)備與所述Linux嵌入式設(shè)備匹配,繼續(xù)執(zhí)行所述將Linux文件系統(tǒng)數(shù)據(jù)的密文傳入所述加解密設(shè)備進(jìn)行解密的步驟; 否則,所述加解密設(shè)備與所述Linux嵌入式設(shè)備不匹配,所述加解密設(shè)備返回設(shè)備配對失敗信息,執(zhí)行所述停止所述啟動Linux嵌入式系統(tǒng)的操作的步驟。
所述數(shù)據(jù)為所述Linux內(nèi)核生成的隨機(jī)數(shù)據(jù)。
所述加解密設(shè)備對所述數(shù)據(jù)進(jìn)行運(yùn)算,并將運(yùn)算結(jié)果返回給所述Linux內(nèi)核驗(yàn)證所述運(yùn)算結(jié)果是否正確的方法具體包括 所述加解密設(shè)備使用預(yù)先約定的算法和密鑰對所述數(shù)據(jù)進(jìn)行運(yùn)算; 相應(yīng)地,所述Linux內(nèi)核使用預(yù)先約定的算法和密鑰驗(yàn)證所述運(yùn)算結(jié)果是否正確。
當(dāng)執(zhí)行所述Linux內(nèi)核檢查Linux嵌入式設(shè)備上是否連接有預(yù)定的加解密設(shè)備的步驟時,或在執(zhí)行所述將Linux文件系統(tǒng)數(shù)據(jù)的密文傳入所述加解密設(shè)備進(jìn)行解密的步驟之前,所述方法還包括 所述加解密設(shè)備對用戶進(jìn)行身份認(rèn)證。
所述加解密設(shè)備對用戶進(jìn)行身份認(rèn)證的方法具體包括 所述加解密設(shè)備驗(yàn)證通過自身帶有的鍵盤或生物特征感應(yīng)裝置接收到的PIN碼或生物特征信息,若驗(yàn)證所述PIN碼或生物特征信息正確,則身份認(rèn)證通過,可以繼續(xù)執(zhí)行其它操作; 或, 所述加解密設(shè)備通過所述Linux嵌入式設(shè)備獲取PIN碼或生物特征信息,所述加解密設(shè)備對獲取到的所述PIN碼或生物特征信息進(jìn)行驗(yàn)證,若驗(yàn)證所述PIN碼或生物特征信息正確,則身份認(rèn)證通過,可以繼續(xù)執(zhí)行其它操作。
所述PIN碼為字母、數(shù)據(jù)或可以通過鍵盤輸入的其它字符的組合; 所述生物特征信息包括指紋、掌紋、虹膜等。
所述加解密設(shè)備解密所述Linux文件系統(tǒng)數(shù)據(jù)的算法包括 DES、3DES、AES或RSA算法。
本發(fā)明提供的技術(shù)方案帶來的有益效果是 通過修改現(xiàn)有的Linux嵌入式系統(tǒng)啟動流程,在Linux嵌入式系統(tǒng)啟動時使用usbkey對加密保存的Linux文件系統(tǒng)數(shù)據(jù)進(jìn)行解密,然后順利地啟動Linux嵌入式系統(tǒng),通過這種方法,確保了Linux文件系統(tǒng)數(shù)據(jù)的保密性,同時還可以有效防范未經(jīng)許可的用戶登錄Linux嵌入式系統(tǒng),極大地提高了Linux嵌入式系統(tǒng)的安全性。
圖1為本發(fā)明實(shí)施1提供的一種Linux嵌入式系統(tǒng)的安全啟動方法流程圖。
具體實(shí)施例方式 為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對本發(fā)明實(shí)施方式作進(jìn)一步地詳細(xì)描述。
實(shí)施例1 參見圖1,本實(shí)施例采用at91rm9200開發(fā)板,Linux內(nèi)核Linux-2.4.19-rmk7,使用usbkey作為加解密設(shè)備進(jìn)行說明,提供了一種Linux嵌入式系統(tǒng)的安全啟動方法,該方法包括 步驟101.Linux嵌入式設(shè)備上電,運(yùn)行引導(dǎo)加載程序U-BOOT; 引導(dǎo)加載程序是Linux嵌入式設(shè)備上電后運(yùn)行的第一段代碼,它包括固化在固件(firmware)中的boot代碼(可選)和BootLoader兩大部分; 引導(dǎo)加載程序用于初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個合適的狀態(tài),以便為調(diào)用Linux嵌入式系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。
在本發(fā)明實(shí)施例中,使用的嵌入式設(shè)備的引導(dǎo)加載程序不包含boot代碼,設(shè)備上電后首先運(yùn)行BootLoader,整個系統(tǒng)的加載啟動任務(wù)完全由BootLoader來完成。
Linux嵌入式系統(tǒng)中常用的BootLoader程序有U-BOOT和vivi,在本發(fā)明實(shí)施例中使用的是U-BOOT。
Uboot包含兩種操作模式“啟動加載”模式和“下載”模式。
啟動加載模式(BootLoading)這種模式也稱為“自主”模式(Autonomous)。BootLoader從嵌入式設(shè)備上的某個固態(tài)的存儲設(shè)備上將操作系統(tǒng)加載到RAM中運(yùn)行,整個過程并沒有用戶的介入,這種模式是BootLoader的正常模式,在本發(fā)明實(shí)施例中,BootLoader是工作在這種模式下的。
下載模式(Downloading)在這種模式下,嵌入式設(shè)備上的BootLoading將通過串口連接或網(wǎng)絡(luò)連接等通信手段從主機(jī)(HOST)下載文件,然后控制啟動流程。
步驟102.引導(dǎo)加載程序U-BOOT加載Linux內(nèi)核程序; 在步驟102之前,BootLoader首先將內(nèi)核映象從存儲設(shè)備上讀到內(nèi)存RAM中,并為內(nèi)核設(shè)置啟動參數(shù),然后跳轉(zhuǎn)到內(nèi)核的入口點(diǎn)運(yùn)行加載Linux內(nèi)核程序,即開始啟動操作系統(tǒng); 在本實(shí)施例中存儲內(nèi)核映象的存儲設(shè)備為flash存儲器;在實(shí)際應(yīng)用中還可以采用其它存儲器,如硬盤等。
步驟103.Linux內(nèi)核程序檢查是否存在預(yù)先指定的usbkey設(shè)備,若存在,則執(zhí)行步驟104,否則執(zhí)行步驟110; 具體地,首先Linux內(nèi)核程序判斷在該Linux嵌入式設(shè)備上是否連接了usbkey設(shè)備,若連接了usbkey設(shè)備,則Linux內(nèi)核程序還根據(jù)預(yù)定Pid(產(chǎn)品標(biāo)識)和Vid(廠商標(biāo)識)來核對該usbkey設(shè)備是否是預(yù)先指定的usbkey設(shè)備。
mount_root函數(shù)調(diào)用usb_register注冊usb驅(qū)動,注冊驅(qū)動的過程中,內(nèi)核掃描系統(tǒng)中是否有usb_register函數(shù)中已指定Pid和Vid的usbkey設(shè)備存在,如果找到這樣一個設(shè)備存在,則usb_register調(diào)用回調(diào)函數(shù)將找到的usbkey的設(shè)備句柄添加到一個數(shù)組中; 內(nèi)核檢查usbkey句柄數(shù)組,若找到指定的usbkey,則存在預(yù)先指定的usbkey設(shè)備,執(zhí)行步驟104,否則執(zhí)行步驟110。
步驟104.驗(yàn)證usbkey與該Linux嵌入式設(shè)備是否匹配,若匹配,則執(zhí)行步驟105,否則執(zhí)行步驟110; Linux內(nèi)核程序調(diào)用usb_control_msg函數(shù)向usbkey發(fā)送獲取用戶號指令,Linux內(nèi)核根據(jù)預(yù)定的用戶列表對usbkey返回的用戶號進(jìn)行驗(yàn)證,若用戶列表中存在該用戶號,則該usbkey與該Linux嵌入式設(shè)備匹配,繼續(xù)執(zhí)行啟動Linux嵌入式系統(tǒng)的其它操作。
具體調(diào)用函數(shù)的形式如下 usb_control_msg(usbkeydev,0x11,0x21,0x09,0x300,0,buf,24) 其中括號中的參數(shù)buf里包含我們?nèi)∮脩籼柕闹噶?x06; 然后繼續(xù)調(diào)用 usb_control_msg(usbkeydev,0xA1,0x01,0x300,0,buf,24) 接收usbkey返回的用戶號,用戶號在buf中,我們預(yù)定的用戶號為0x983A7DF1,則返回的buf值為0x983A7DF1。
在本發(fā)明中實(shí)施例中,驗(yàn)證usbkey與該Linux嵌入式設(shè)備是否匹配的步驟還可以替換為 Linux內(nèi)核向usbkey發(fā)送該Linux嵌入式設(shè)備的設(shè)備標(biāo)識信息,usbkey驗(yàn)證該設(shè)備標(biāo)識信息是否存在于usbkey中預(yù)置的設(shè)備列表中,若存在,則該usbkey與該Linux嵌入式設(shè)備匹配,usbkey返回設(shè)備配對成功信息,繼續(xù)執(zhí)行啟動Linux嵌入式系統(tǒng)的其它操作; 或, Linux內(nèi)核生成一段隨機(jī)數(shù)據(jù)發(fā)送給usbkey,usbkey對接收到的數(shù)據(jù)使用預(yù)先約定的算法和密鑰進(jìn)行運(yùn)算,并將運(yùn)算結(jié)果返回給Linux內(nèi)核,若Linux內(nèi)核驗(yàn)證運(yùn)算結(jié)果正確,則該usbkey與該Linux嵌入式設(shè)備匹配,繼續(xù)執(zhí)行啟動Linux嵌入式系統(tǒng)的其它操作; 此處使用的算法可以是DES、3DES、AES、RSA、SHA1、MD5或HAMC算法。
在本步驟之前,usbkey還可以對用戶進(jìn)行身份認(rèn)證,具體方法包括 用戶通過usbkey上帶有的鍵盤或生物特征感應(yīng)裝置輸入PIN碼或用戶的生物特征信息,若usbkey驗(yàn)證該P(yáng)IN碼或生物特征信息正確,則該用戶身份合法; 或, usbkey通過Linux嵌入式設(shè)備獲取PIN碼或取用戶生物特征信息,usbkey對接收到的的PIN碼或生物特征信息進(jìn)行驗(yàn)證,若usbkey驗(yàn)證該P(yáng)IN碼或生物特征信息正確,則該用戶身份合法; 其中,PIN碼為字母、數(shù)據(jù)或可以通過鍵盤輸入的其它字符的組合;用戶的生物特征信息包括用戶的指紋、掌紋、虹膜等。
步驟105.Linux內(nèi)核程序打開存儲設(shè)備,將Linux文件系統(tǒng)數(shù)據(jù)讀取到內(nèi)存中; 保存Linux文件系統(tǒng)的存儲設(shè)備可以是硬盤或flash設(shè)備,在本發(fā)明實(shí)施例中,Linux文件系統(tǒng)存儲于flash設(shè)備中; Linux內(nèi)核程序調(diào)用“open”函數(shù)打開flash設(shè)備,調(diào)用“read”函數(shù)從flash設(shè)備中讀取被加密過的Linux文件系統(tǒng)數(shù)據(jù)緩存到內(nèi)存中。
Read函數(shù)在函數(shù)fill_inbuf中被調(diào)用,具體為 insize=read(crd_infd,inbuf,INBUFSIZE); 其中參數(shù)crd_infd為flash設(shè)備句柄,由open函數(shù)返回,參數(shù)inbuf是一個緩沖區(qū)用于保存讀取到的Linux文件系統(tǒng)數(shù)據(jù)的密文,參數(shù)INBUFSIZE定義了inbuf的大小,在本實(shí)施例中是2MB,read函數(shù)返回實(shí)際讀到的Linux文件系統(tǒng)數(shù)據(jù)密文的長度,保存在insize中。在本實(shí)施例中讀到的Linux文件系統(tǒng)數(shù)據(jù)的密文為(一部分)
步驟106.將內(nèi)存中的Linux文件系統(tǒng)數(shù)據(jù)的密文傳入usbkey進(jìn)行解密,usbkey將解密的結(jié)果傳回內(nèi)存; 具體地,Linux內(nèi)核程序調(diào)用usb_control_msg函數(shù)將內(nèi)存中的Linux文件系統(tǒng)數(shù)據(jù)的密文傳入usbkey進(jìn)行解密操作,根據(jù)加/解密算法的不同,分塊傳入相應(yīng)長度的數(shù)據(jù); 加密Linux文件系統(tǒng)數(shù)據(jù)使用的算法包括DES、3DES、AES或RSA算法;在本發(fā)明實(shí)施例中,加密Linux文件系統(tǒng)數(shù)據(jù)采用的是AES算法,密鑰長度為128位;因此,對Linux文件系統(tǒng)數(shù)據(jù)的密文進(jìn)行解密時,每次從內(nèi)存中讀取128位數(shù)據(jù)傳遞到usbkey中進(jìn)行解密,usbkey將解密后的數(shù)據(jù)返回到內(nèi)存中,然后繼續(xù)執(zhí)行從內(nèi)存中讀取數(shù)據(jù)、usbkey解密、解密結(jié)果傳回內(nèi)存的操作,直至Linux文件系統(tǒng)數(shù)據(jù)的密文全部解密完畢。
實(shí)現(xiàn)該步驟中所述方法的代碼部分如下所示 static int_ _init fill_inbuf(void) { if(exit_code)return-1; insize=read(crd_infd,inbuf,INBUFSIZE);//從flash中讀取Linux 文件系統(tǒng)數(shù)據(jù)到內(nèi)存中 if(insize==0){ error(″RAMDISKran out of compressed data\n″); return-1; }blocksize=128;for(offset=0;offset<insize;offset+=128){if((insize-offset)<128)blocksize=insize-offset; usb_control_msg(usbkeydev,pipe,request,value,index,inbuf+offset,bloc ksize); //將inbuf傳入usbkey,解密 usb_control_msg(usbkeydev,pipe,request_get,value,index,inbuf+offset, blocksize);//將解密結(jié)果傳回inbuf } inptr=1; return inbuf
; } 其中,usbkey解密數(shù)據(jù)使用的密鑰保存在usbkey中,不能夠被讀出以保證密鑰的安全; 還有一種情況是,usbkey只保存加解密的密鑰,Linux嵌入式設(shè)備從usbkey中讀出密鑰,然后由Linux內(nèi)核執(zhí)行解密操作,這種方法速度較快,但安全性較低。
在實(shí)際應(yīng)用中還可能是僅對Linux文件系統(tǒng)中的部分?jǐn)?shù)據(jù)進(jìn)行加密,相應(yīng)地,解密時只需要將被加密的部分傳入usbkey中解密即可。
另一方面,對Linux文件系統(tǒng)數(shù)據(jù)進(jìn)行加密處理的方法與解密操作類似,將內(nèi)存中的Linux文件系統(tǒng)數(shù)據(jù)的密文分塊傳入相應(yīng)長度的數(shù)據(jù)到usbkey中,usbkey對數(shù)據(jù)加密后傳回內(nèi)存。
在本發(fā)明實(shí)施例中,Linux文件系統(tǒng)數(shù)據(jù)是使用128位的AES算法加密的,相應(yīng)地,usbkey解密時以128位為單位將Linux文件系統(tǒng)數(shù)據(jù)的密文通過函數(shù)usb_control_msg(usbkeydev,0x11,0x21,0x09,0x300,0,buf,130)傳入到usbkey中進(jìn)行解密; 其中的參數(shù)buf里包含我們解密的指令代碼0x88及待解密的數(shù)據(jù); 然后繼續(xù)調(diào)用函數(shù) usb_control_msg(usbkeydev,0xA1,0x01,0x300,0,buf,128) 接收usbkey返回的解密后的Linux文件系統(tǒng)數(shù)據(jù),如此循環(huán)直到解密完所有的文件系統(tǒng)數(shù)據(jù)。
解密后得到的Linux文件系統(tǒng)數(shù)據(jù)的明文為
步驟107.Linux內(nèi)核調(diào)用解壓縮程序?qū)inux文件系統(tǒng)數(shù)據(jù)進(jìn)行解壓縮,并將解壓后的數(shù)據(jù)放入內(nèi)存中預(yù)定的地址; 步驟108.執(zhí)行掛載文件系統(tǒng)動作,將內(nèi)存中的文件系統(tǒng)掛載到“/”,即系統(tǒng)根目錄; 步驟109.進(jìn)行其它必要的初始化操作,啟動相關(guān)服務(wù),完成Linux嵌入式系統(tǒng)啟動; 內(nèi)核會讀取運(yùn)行Linux文件系統(tǒng)中初始化程序init,并將控制權(quán)交給init程序,init程序會讀取文件系統(tǒng)啟動腳本,并執(zhí)行,如設(shè)置網(wǎng)絡(luò)地址,啟動NFS服務(wù),SSH服務(wù)等。
完成后打開一個控制臺,提示用戶登錄,或啟動用戶自己設(shè)定的應(yīng)用程序。步驟110.內(nèi)核報錯,停止啟動進(jìn)程。
另外,在實(shí)際的應(yīng)用中,在步驟104中所示的該usbkey設(shè)備對用戶進(jìn)行身份認(rèn)證的方法還可以應(yīng)用于其它步驟中,如步驟103中Linux內(nèi)核程序檢查是否存在預(yù)先指定的usbkey設(shè)備的步驟里、或步驟106中usbkey設(shè)備解密Linux文件系統(tǒng)數(shù)據(jù)的步驟里。
在本發(fā)明實(shí)施例中,Linux嵌入式設(shè)備中的文件系統(tǒng)數(shù)據(jù)以密文形式進(jìn)行存儲,啟動Linux嵌入式設(shè)備后,Linux內(nèi)核通過加載usbkey設(shè)備對文件系統(tǒng)數(shù)據(jù)的密文進(jìn)行解密,然后掛載文件系統(tǒng)動并繼續(xù)執(zhí)行啟動Linux嵌入式系統(tǒng)的其它操作。通過該方法極大的提高了Linux嵌入式設(shè)備和Linux文件系統(tǒng)中數(shù)據(jù)的安全性。
以上所述僅為本發(fā)明的較佳實(shí)施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種Linux嵌入式系統(tǒng)的安全啟動方法,所述方法包括
Linux嵌入式設(shè)備中運(yùn)行引導(dǎo)加載程序,加載Linux內(nèi)核;
所述Linux內(nèi)核檢查所述Linux嵌入式設(shè)備上是否連接有預(yù)定的加解密設(shè)備;
若有,則將Linux文件系統(tǒng)數(shù)據(jù)的密文傳入所述加解密設(shè)備進(jìn)行解密,將解密后得到的所述Linux文件系統(tǒng)數(shù)據(jù)的明文傳入內(nèi)存中,掛載系統(tǒng)根目錄,繼續(xù)執(zhí)行啟動Linux嵌入式系統(tǒng)的其它操作;
若沒有,則停止所述啟動Linux嵌入式系統(tǒng)的操作。
2.如權(quán)利要求1中所述的Linux嵌入式系統(tǒng)的安全啟動方法,其特征在于,所述加解密設(shè)備具體為usbkey。
3.如權(quán)利要求2中所述的Linux嵌入式系統(tǒng)的安全啟動方法,其特征在于,所述Linux內(nèi)核檢查所述Linux嵌入式設(shè)備上是否連接有預(yù)定的加解密設(shè)備的方法具體包括
所述Linux內(nèi)核中預(yù)先指定所述usbkey的產(chǎn)品標(biāo)識和廠商標(biāo)識,若在所述Linux嵌入式設(shè)備上連接有與所述產(chǎn)品標(biāo)識和廠商標(biāo)識相符合的usbkey設(shè)備,則所述Linux嵌入式設(shè)備上連接有預(yù)定的加解密設(shè)備。
4.如權(quán)利要求3中所述的Linux嵌入式系統(tǒng)的安全啟動方法,其特征在于,所述Linux內(nèi)核檢查所述Linux嵌入式設(shè)備上是否連接有預(yù)定的加解密設(shè)備的方法還包括
mount_root函數(shù)調(diào)用usb_register函數(shù)注冊usbkey驅(qū)動;
所述usb_register函數(shù)注冊usbkey驅(qū)動過程中掃描是否有指定的產(chǎn)品標(biāo)識和廠商標(biāo)識的usbkey設(shè)備存在;
如果有,則調(diào)用所述usbkey驅(qū)動的回調(diào)函數(shù)將所述usbkey設(shè)備的設(shè)備句柄添加到數(shù)組中,Linux內(nèi)核檢查所述數(shù)組,若找到指定的usbkey設(shè)備,則執(zhí)行所述將Linux文件系統(tǒng)數(shù)據(jù)的密文傳入所述加解密設(shè)備進(jìn)行解密操作,否則執(zhí)行所述停止所述啟動Linux嵌入式系統(tǒng)的操作;
如果沒有,則執(zhí)行所述停止所述啟動Linux嵌入式系統(tǒng)的操作。
5.如權(quán)利要求1中所述的Linux嵌入式系統(tǒng)的安全啟動方法,其特征在于,所述將Linux文件系統(tǒng)數(shù)據(jù)的密文傳入所述加解密設(shè)備進(jìn)行解密的方法具體包括
將所述Linux文件系統(tǒng)數(shù)據(jù)的密文讀取到內(nèi)存中,將內(nèi)存中的所述Linux文件系統(tǒng)數(shù)據(jù)的密文傳入所述加解密設(shè)備中進(jìn)行解密操作。
6.如權(quán)利要求5中所述的Linux嵌入式系統(tǒng)的安全啟動方法,其特征在于,所述將內(nèi)存中的所述Linux文件系統(tǒng)數(shù)據(jù)的密文傳入所述加解密設(shè)備中進(jìn)行解密操作的方法具體包括
根據(jù)加解密算法,將內(nèi)存中的所述Linux文件系統(tǒng)數(shù)據(jù)的密文分批地傳入所述加解設(shè)備中進(jìn)行解密操作。
7.如權(quán)利要求1中所述的Linux嵌入式系統(tǒng)的安全啟動方法,其特征在于,當(dāng)所述Linux內(nèi)核檢查所述Linux嵌入式設(shè)備上連接有預(yù)定的加解密設(shè)備時,在所述將Linux文件系統(tǒng)數(shù)據(jù)的密文傳入所述加解密設(shè)備進(jìn)行解密之前,所述方法還包括
驗(yàn)證所述加解密設(shè)備與所述Linux嵌入式設(shè)備是否匹配。
8.如權(quán)利要求7中所述的Linux嵌入式系統(tǒng)的安全啟動方法,其特征在于,驗(yàn)證所述加解密設(shè)備與所述Linux嵌入式設(shè)備是否匹配的方法具體包括
所述Linux內(nèi)核獲取所述加解密設(shè)備中保存的一段數(shù)據(jù),并驗(yàn)證所述數(shù)據(jù)是否正確;
若正確,則所述加解密設(shè)備與所述Linux嵌入式設(shè)備匹配,繼續(xù)執(zhí)行所述將Linux文件系統(tǒng)數(shù)據(jù)的密文傳入所述加解密設(shè)備進(jìn)行解密的步驟;
否則,所述加解密設(shè)備與所述Linux嵌入式設(shè)備不匹配,執(zhí)行所述停止所述啟動Linux嵌入式系統(tǒng)的操作的步驟。
9.如權(quán)利要求7中所述的Linux嵌入式系統(tǒng)的安全啟動方法,其特征在于,驗(yàn)證所述加解密設(shè)備與所述Linux嵌入式設(shè)備是否匹配的方法還包括
所述加解密設(shè)備獲取所述Linux嵌入式設(shè)備的設(shè)備代碼,所述加解密設(shè)備驗(yàn)證所述設(shè)備代碼是否正確;
若正確,則所述加解密設(shè)備與所述Linux嵌入式設(shè)備匹配,所述加解密設(shè)備返回設(shè)備配對成功信息,繼續(xù)執(zhí)行所述將待解密的Linux文件系統(tǒng)數(shù)據(jù)傳入所述加解密設(shè)備進(jìn)行解密的步驟;
否則,所述加解密設(shè)備與所述Linux嵌入式設(shè)備不匹配,所述加解密設(shè)備返回設(shè)備配對失敗信息,執(zhí)行所述停止所述啟動Linux嵌入式系統(tǒng)的操作的步驟。
10.如權(quán)利要求7中所述的Linux嵌入式系統(tǒng)的安全啟動方法,其特征在于,驗(yàn)證所述加解密設(shè)備與所述Linux嵌入式設(shè)備是否匹配的方法還包括
所述Linux內(nèi)核發(fā)送一段數(shù)據(jù)給所述加解密設(shè)備,所述加解密設(shè)備對所述數(shù)據(jù)進(jìn)行運(yùn)算,并將運(yùn)算結(jié)果返回給所述Linux內(nèi)核驗(yàn)證所述運(yùn)算結(jié)果是否正確;
若正確,則所述加解密設(shè)備與所述Linux嵌入式設(shè)備匹配,繼續(xù)執(zhí)行所述將Linux文件系統(tǒng)數(shù)據(jù)的密文傳入所述加解密設(shè)備進(jìn)行解密的步驟;
否則,所述加解密設(shè)備與所述Linux嵌入式設(shè)備不匹配,所述加解密設(shè)備返回設(shè)備配對失敗信息,執(zhí)行所述停止所述啟動Linux嵌入式系統(tǒng)的操作的步驟。
11.如權(quán)利要求10中所述的Linux嵌入式系統(tǒng)的安全啟動方法,其特征在于,所述數(shù)據(jù)為所述Linux內(nèi)核生成的隨機(jī)數(shù)據(jù)。
12.如權(quán)利要求10中所述的Linux嵌入式系統(tǒng)的安全啟動方法,其特征在于,所述加解密設(shè)備對所述數(shù)據(jù)進(jìn)行運(yùn)算,并將運(yùn)算結(jié)果返回給所述Linux內(nèi)核驗(yàn)證所述運(yùn)算結(jié)果是否正確的方法具體包括
所述加解密設(shè)備使用預(yù)先約定的算法和密鑰對所述數(shù)據(jù)進(jìn)行運(yùn)算;
相應(yīng)地,所述Linux內(nèi)核使用預(yù)先約定的算法和密鑰驗(yàn)證所述運(yùn)算結(jié)果是否正確。
13.如權(quán)利要求1中所述的Linux嵌入式系統(tǒng)的安全啟動方法,其特征在于,當(dāng)執(zhí)行所述Linux內(nèi)核檢查Linux嵌入式設(shè)備上是否連接有預(yù)定的加解密設(shè)備的步驟時,或在執(zhí)行所述將Linux文件系統(tǒng)數(shù)據(jù)的密文傳入所述加解密設(shè)備進(jìn)行解密的步驟之前,所述方法還包括
所述加解密設(shè)備對用戶進(jìn)行身份認(rèn)證。
14.如權(quán)利要求13中所述的Linux嵌入式系統(tǒng)的安全啟動方法,其特征在于,所述加解密設(shè)備對用戶進(jìn)行身份認(rèn)證的方法具體包括
所述加解密設(shè)備驗(yàn)證通過自身帶有的鍵盤或生物特征感應(yīng)裝置接收到的PIN碼或生物特征信息,若驗(yàn)證所述PIN碼或生物特征信息正確,則身份認(rèn)證通過,可以繼續(xù)執(zhí)行其它操作;
或,
所述加解密設(shè)備通過所述Linux嵌入式設(shè)備獲取PIN碼或生物特征信息,所述加解密設(shè)備對獲取到的所述PIN碼或生物特征信息進(jìn)行驗(yàn)證,若驗(yàn)證所述PIN碼或生物特征信息正確,則身份認(rèn)證通過,可以繼續(xù)執(zhí)行其它操作。
15.如權(quán)利要求14中所述的Linux嵌入式系統(tǒng)的安全啟動方法,其特征在于,
所述PIN碼為字母、數(shù)據(jù)或可以通過鍵盤輸入的其它字符的組合;
所述生物特征信息包括指紋、掌紋、虹膜等。
16.如權(quán)利要求1中所述的Linux嵌入式系統(tǒng)的安全啟動方法,其特征在于,所述加解密設(shè)備解密所述Linux文件系統(tǒng)數(shù)據(jù)的算法包括
DES、3DES、AES或RSA算法。
全文摘要
本發(fā)明公開了一種Linux嵌入式系統(tǒng)的安全啟動方法,屬于信息安全領(lǐng)域。該方法包括Linux嵌入式設(shè)備中運(yùn)行引導(dǎo)加載程序,加載Linux內(nèi)核;所述Linux內(nèi)核檢查所述Linux嵌入式設(shè)備上是否連接有預(yù)定的加解密設(shè)備;若有,則將Linux文件系統(tǒng)數(shù)據(jù)的密文傳入所述加解密設(shè)備進(jìn)行解密,將解密后得到的所述Linux文件系統(tǒng)數(shù)據(jù)的明文傳入內(nèi)存中,掛載系統(tǒng)根目錄,繼續(xù)執(zhí)行啟動Linux嵌入式系統(tǒng)的其它操作;若沒有,則停止所述啟動Linux嵌入式系統(tǒng)的操作。用以確保Linux文件系統(tǒng)中數(shù)據(jù)的信息安全。
文檔編號G06F9/445GK101770386SQ20101011945
公開日2010年7月7日 申請日期2010年3月8日 優(yōu)先權(quán)日2010年3月8日
發(fā)明者陸舟, 于華章 申請人:北京飛天誠信科技有限公司