專利名稱:一種安全計(jì)算機(jī)及其實(shí)現(xiàn)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)安全技術(shù)領(lǐng)域,特別是指一種安全計(jì)算機(jī)及其實(shí)現(xiàn)方法。
背景技術(shù):
當(dāng)今已進(jìn)入網(wǎng)絡(luò)時(shí)代,計(jì)算機(jī)(PC)被廣泛應(yīng)用在人們的日常生活中,如何保證計(jì)算機(jī)中信息的安全已經(jīng)成為人們十分關(guān)注的問題。一直以來,微軟、英特爾以及其它許多公司一直在研究開發(fā)受保護(hù)的計(jì)算環(huán)境以應(yīng)對(duì)各種各樣的攻擊,與此同時(shí)還為敏感數(shù)據(jù)處理和電子商務(wù)交易提供安全計(jì)算。TPM(Trusted Platform Module)技術(shù)就是一種最新的可以達(dá)到上述目的的應(yīng)用于PC平臺(tái)的計(jì)算機(jī)安全技術(shù)。
TPM技術(shù)是由可信賴計(jì)算組織(TCG,Trusted Computing Group)推出的“可信賴平臺(tái)模塊”標(biāo)準(zhǔn)。本申請(qǐng)人依據(jù)該標(biāo)準(zhǔn),已經(jīng)在申請(qǐng)?zhí)枮椤?3138380.7”,發(fā)明名稱為“一種安全芯片及基于該芯片的信息安全處理設(shè)備和方法”的發(fā)明專利申請(qǐng)中,公開了一種安全芯片(TPM芯片)的內(nèi)部結(jié)構(gòu)及其功能,以及該安全芯片與基本輸入輸出系統(tǒng)(BIOS)和操作系統(tǒng)之間的交互內(nèi)容。
由于TPM芯片作為一個(gè)安全產(chǎn)品,不是軟件可以隨便訪問的,因此,即使是和底層硬件直接打交道的BIOS也不能直接向TPM芯片發(fā)送或接收命令或數(shù)據(jù),這樣才能保證它的安全功能正常發(fā)揮。但申請(qǐng)?zhí)枮椤?3138380.7”的發(fā)明專利申請(qǐng)中并沒有具體給出安全芯片和BIOS之間是如何實(shí)現(xiàn)信息交互的,本申請(qǐng)則對(duì)此進(jìn)行詳細(xì)說明。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明的主要目的是提供一種安全計(jì)算機(jī)及其實(shí)現(xiàn)方法,具體說明安全芯片和BIOS之間實(shí)現(xiàn)通信的過程。
為達(dá)到上述目的,本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的一種安全計(jì)算機(jī),至少包括安全芯片、BIOS和用于傳遞參數(shù)的寄存器,該計(jì)算機(jī)還包括用于安全芯片和BIOS之間通信的安全驅(qū)動(dòng)模塊Rom Driver,該安全驅(qū)動(dòng)模塊從傳遞參數(shù)的寄存器中讀取來自BIOS的調(diào)用代碼,調(diào)用自身內(nèi)與該代碼相對(duì)應(yīng)的模塊,驅(qū)動(dòng)并監(jiān)視安全芯片運(yùn)行,并將安全芯片的執(zhí)行結(jié)果保存在BIOS指定的位置。
較佳地,在BIOS的BOOT BLOCK階段,所述安全驅(qū)動(dòng)模塊內(nèi)包括控制模塊、初始化模塊、TPM芯片物理存在模塊和執(zhí)行HASH運(yùn)算的模塊,其中,所述控制模塊,接收來自BIOS的調(diào)用,從傳遞參數(shù)寄存器內(nèi)讀取調(diào)用代碼,調(diào)用與該代碼對(duì)應(yīng)的模塊,并將該模塊的執(zhí)行結(jié)果保存在BIOS指定的位置;所述初始化模塊,接收來自控制模塊的調(diào)用,對(duì)安全芯片進(jìn)行初始化,將初始化結(jié)果返回給控制模塊;所述TPM芯片物理存在模塊,接收來自控制模塊的調(diào)用,向安全芯片發(fā)送指示安全芯片物理存在的命令TSC_PhysicalPresence,將安全芯片的執(zhí)行結(jié)果返回給控制模塊;所述執(zhí)行HASH運(yùn)算的模塊,接收來自控制模塊的調(diào)用,控制安全芯片進(jìn)行HASH運(yùn)算,將安全芯片的運(yùn)算結(jié)果保存在安全芯片內(nèi)的寄存器中,給控制模塊返回執(zhí)行結(jié)果。
較佳地,所述安全驅(qū)動(dòng)模塊內(nèi)進(jìn)一步包括關(guān)閉安全芯片通信接口的模塊,該模塊接收來自控制模塊的調(diào)用,關(guān)閉BIOS與安全芯片之間的通信接口,將執(zhí)行結(jié)果返回給控制模塊。
較佳地,在BIOS的POST階段,所述安全驅(qū)動(dòng)模塊內(nèi)包括控制模塊、初始化模塊、向安全芯片傳送命令的模塊、獲取安全芯片當(dāng)前狀態(tài)的模塊和關(guān)閉安全芯片通信接口的模塊,其中,所述控制模塊,接收來自BIOS的調(diào)用,從傳遞參數(shù)寄存器內(nèi)讀取調(diào)用代碼,調(diào)用與該代碼對(duì)應(yīng)的模塊,并將該模塊的執(zhí)行結(jié)果保存在BIOS指定的位置;所述初始化模塊,接收來自控制模塊的調(diào)用,對(duì)安全芯片進(jìn)行初始化,將初始化結(jié)果返回給控制模塊;所述向安全芯片傳送命令的模塊,接收來自控制模塊的調(diào)用,向安全芯片傳送BIOS所發(fā)的命令,并將安全芯片的執(zhí)行結(jié)果返回給控制模塊;所述獲取安全芯片當(dāng)前狀態(tài)的模塊,接收來自控制模塊的調(diào)用,檢測(cè)安全芯片當(dāng)前的狀態(tài),并將檢測(cè)結(jié)果返回給控制模塊;所述關(guān)閉安全芯片通信接口的模塊,接收來自控制模塊的調(diào)用,關(guān)閉BIOS與安全芯片之間的通信接口,將執(zhí)行結(jié)果返回給控制模塊。
一種安全計(jì)算機(jī)的實(shí)現(xiàn)方法,在BIOS的POST階段,該方法包括以下步驟a、BIOS在POST內(nèi)將MP安全驅(qū)動(dòng)模塊加載到內(nèi)存中;b、BIOS將調(diào)用代碼寫入用于傳遞參數(shù)的寄存器內(nèi);c、MP安全驅(qū)動(dòng)模塊接收到來自BIOS的調(diào)用后,讀取寄存器內(nèi)的代碼,調(diào)用與之相對(duì)應(yīng)的函數(shù),驅(qū)動(dòng)并監(jiān)視安全芯片運(yùn)行,將運(yùn)行結(jié)果保存在BIOS指定的位置。
較佳地,所述調(diào)用代碼所對(duì)應(yīng)的函數(shù)為初始化函數(shù)MP_InitTPM(),獲取安全芯片狀態(tài)的函數(shù)MP_GetTPMStatusInfo(),向安全芯片傳送命令的函數(shù)MP_TPMTransmit(),或關(guān)閉安全芯片通信接口的函數(shù)MP_CloseTPM()。
較佳地,該方法進(jìn)一步包括當(dāng)MP安全驅(qū)動(dòng)模塊判斷出BIOS調(diào)用MP_TPMTransmit()時(shí),將到內(nèi)存中的指定位置讀取具體待傳送命令的代碼以及與該命令相對(duì)應(yīng)的參數(shù)。
較佳地,所述與具體待傳送命令相對(duì)應(yīng)的參數(shù)是待進(jìn)行加密運(yùn)算數(shù)據(jù)塊在內(nèi)存中的起始地址X1和長(zhǎng)度Y1,以及存放返回值的緩沖區(qū)在內(nèi)存中的起始地址X2和長(zhǎng)度Y2。
較佳地,該方法進(jìn)一步包括在BIOS的BOOT BLOCK階段,BIOS將調(diào)用代碼寫入用于傳遞參數(shù)的寄存器內(nèi),MA安全驅(qū)動(dòng)模塊接收到來自BIOS的調(diào)用后,讀取寄存器內(nèi)的代碼,調(diào)用與之相對(duì)應(yīng)的函數(shù),驅(qū)動(dòng)安全芯片運(yùn)行,并給BIOS返回運(yùn)行結(jié)果。
較佳地,所述待調(diào)用函數(shù)為初始化函數(shù)MP_InitTPM(),安全芯片物理存在函數(shù)MA_PhysicalPresenceTPM(),或驅(qū)動(dòng)安全芯片執(zhí)行HASH運(yùn)算的函數(shù)MA_HashAllExtendTPM()。
較佳地,該方法進(jìn)一步包括當(dāng)MA安全驅(qū)動(dòng)模塊判斷出BIOS調(diào)用MA_HashAllExtendTPM()時(shí),將繼續(xù)從傳遞參數(shù)的寄存器中讀取與所傳送命令相對(duì)應(yīng)的參數(shù)。
較佳地,所述與所傳送命令相對(duì)應(yīng)的參數(shù)是待進(jìn)行加密運(yùn)算數(shù)據(jù)塊的起始地址X1和長(zhǎng)度Y1。
較佳地,當(dāng)MP安全驅(qū)動(dòng)模塊調(diào)用初始化函數(shù)MP_InitTPM()時(shí),驅(qū)動(dòng)安全芯片運(yùn)行的操作包括以下步驟打開與安全芯片直接相連的LPC接口,判斷該安全芯片的制造商ID和設(shè)備ID是否與自身數(shù)據(jù)庫內(nèi)保存的制造商ID和設(shè)備ID相同,如果是,則設(shè)置該安全芯片的輸入輸出I/O基地址以及待使用的中斷號(hào),檢測(cè)該芯片的狀態(tài),設(shè)置與該芯片當(dāng)前狀態(tài)相對(duì)應(yīng)的標(biāo)志后,關(guān)閉與安全芯片直接相連的LPC接口,否則直接關(guān)閉與安全芯片直接相連的LPC接口。
較佳地,當(dāng)MP安全驅(qū)動(dòng)模塊調(diào)用獲取安全芯片狀態(tài)的函數(shù)MP_GetTPMStatusInfo()時(shí),驅(qū)動(dòng)安全芯片運(yùn)行的操作包括以下步驟打開與安全芯片直接相連的LPC接口,分別檢測(cè)該LPC接口和該安全芯片的狀態(tài),檢測(cè)完畢后關(guān)閉與安全芯片直接相連的LPC接口并返回LPC接口和安全芯片的狀態(tài)字。
較佳地,當(dāng)MP安全驅(qū)動(dòng)模塊調(diào)用安全芯片傳送命令的函數(shù)MP_TPMTransmit()時(shí),驅(qū)動(dòng)安全芯片運(yùn)行的操作包括以下步驟b1、判斷安全芯片當(dāng)前是否已準(zhǔn)備好接收命令,如果是,執(zhí)行步驟b2,否則執(zhí)行步驟b5;b2、向安全芯片發(fā)送一個(gè)命令數(shù)據(jù)的所有字節(jié)后,執(zhí)行步驟b3;b3、判斷安全芯片是否正確接收到所有的數(shù)據(jù),如果是,則執(zhí)行步驟b4,否則判斷重新傳送的次數(shù)是否超出預(yù)先設(shè)定的次數(shù)閾值,如果是,則執(zhí)行步驟b5,否則執(zhí)行步驟b2;b4、判斷安全芯片是否執(zhí)行完畢該命令,如果是,則讀取安全芯片的命令返回值后,執(zhí)行步驟b5,否則執(zhí)行步驟b6;b5、設(shè)置命令傳輸標(biāo)志后,結(jié)束本流程;b6、判斷等待安全芯片執(zhí)行命令的時(shí)間是否超出預(yù)先設(shè)置的時(shí)間閾值,如果是,則執(zhí)行步驟b5,否則重復(fù)執(zhí)行步驟b4。
較佳地,當(dāng)MP安全驅(qū)動(dòng)模塊調(diào)用關(guān)閉安全芯片通信接口的函數(shù)MP_CloseTPM()時(shí),驅(qū)動(dòng)安全芯片運(yùn)行的操作包括以下步驟打開與安全芯片直接相連的LPC接口,清除為該安全芯片設(shè)置的輸入輸出(I/O)基地址以及所使用的中斷號(hào),關(guān)閉與安全芯片直接相連的LPC接口。
較佳地,當(dāng)MA安全驅(qū)動(dòng)模塊調(diào)用安全芯片物理存在函數(shù)MA_PhysicalPresenceTPM()時(shí),驅(qū)動(dòng)安全芯片運(yùn)行的操作包括以下步驟b1、判斷安全芯片當(dāng)前是否已準(zhǔn)備好接收命令,如果是,執(zhí)行步驟b2,否則執(zhí)行步驟b5;b2、向安全芯片發(fā)送TSC_PhysicalPresence命令數(shù)據(jù)的所有字節(jié)后,執(zhí)行步驟b3;b3、判斷安全芯片是否正確接收到所有的數(shù)據(jù),如果是,則執(zhí)行步驟b4,否則判斷重新傳送的次數(shù)是否超出預(yù)先設(shè)定的次數(shù)閾值,如果是,則執(zhí)行步驟b5,否則執(zhí)行步驟b2;b4、判斷安全芯片是否執(zhí)行完畢該命令,如果是,則讀取安全芯片的命令返回值后,執(zhí)行步驟b5,否則執(zhí)行步驟b6;b5、設(shè)置命令傳輸標(biāo)志后,結(jié)束本流程;b6、判斷等待安全芯片執(zhí)行命令的時(shí)間是否超出預(yù)先設(shè)置的時(shí)間閾值,如果是,則執(zhí)行步驟b5,否則重復(fù)執(zhí)行步驟b4。
較佳地,當(dāng)MA安全驅(qū)動(dòng)模塊調(diào)用驅(qū)動(dòng)安全芯片執(zhí)行HASH運(yùn)算的函數(shù)MA_HashAllExtendTPM()時(shí),驅(qū)動(dòng)安全芯片運(yùn)行的操作包括以下步驟b1、向安全芯片發(fā)送開始HASH運(yùn)算的命令TPM_SHA1Start,并從該命令返回?cái)?shù)據(jù)中獲取命令TPM_SHA1Update一次最多可接受的字節(jié)數(shù)Y2;b2、計(jì)算一次發(fā)送Y2字節(jié)的次數(shù)c1,c1等于待執(zhí)行HASH運(yùn)算數(shù)據(jù)塊的大小Y1除以Y2后取整,并計(jì)算剩余的字節(jié)數(shù)d 1,d1等于Y1減去Y2乘以c1的值;b3、計(jì)算剩余的字節(jié)數(shù)d1的發(fā)送次數(shù)c2,c2等于d1除以命令TPM_SHA1CompleteExtend所能接收的最大字節(jié)數(shù)后取整,并計(jì)算剩余的字節(jié)數(shù)d2,d2等于d1減去c2乘以命令TPM_SHA1CompleteExtend所能接收的最大字節(jié)數(shù);b4,發(fā)送命令TPM_SHA1Update,每次傳送并計(jì)算Y2字節(jié),循環(huán)c1次;b5、發(fā)送命令TPM_SHA1Update,每次傳送并計(jì)算命令TPM_SHA1CompleteExtend所能接收的最大字節(jié)數(shù),循環(huán)c2次;b6、發(fā)送命令TPM_SHA1CompleteExtend,傳送并計(jì)算最后的d2字節(jié),將最終計(jì)算結(jié)果保存在安全芯片的內(nèi)部寄存器中,結(jié)束本流程。
較佳地,所述MP安全驅(qū)動(dòng)模塊和MA安全驅(qū)動(dòng)模塊由BIOS觸發(fā)讀取寄存器內(nèi)的調(diào)用代碼。
一種安全計(jì)算機(jī)的實(shí)現(xiàn)方法,在BIOS的BOOT BLOCK階段,該方法包括以下步驟BIOS將調(diào)用代碼寫入用于傳遞參數(shù)的寄存器內(nèi),MA安全驅(qū)動(dòng)模塊接收到來自BIOS的調(diào)用后,讀取寄存器內(nèi)的代碼,調(diào)用與之相對(duì)應(yīng)的函數(shù),驅(qū)動(dòng)安全芯片運(yùn)行,并給BIOS返回運(yùn)行結(jié)果。
較佳地,所述待調(diào)用函數(shù)為初始化函數(shù)MP_InitTPM(),安全芯片物理存在函數(shù)MA_PhysicalPresenceTPM(),驅(qū)動(dòng)安全芯片執(zhí)行HASH運(yùn)算的函數(shù)MA_HashAllExtendTPM(),或關(guān)閉安全芯片通信接口的函數(shù)MP_CloseTPM()。
較佳地,該方法進(jìn)一步包括當(dāng)MA安全驅(qū)動(dòng)模塊判斷出BIOS調(diào)用MA_HashAllExtendTPM()時(shí),將繼續(xù)從傳遞參數(shù)的寄存器中讀取與所傳送命令相對(duì)應(yīng)的參數(shù)。
較佳地,所述與所傳送命令相對(duì)應(yīng)的參數(shù)是待進(jìn)行加密運(yùn)算數(shù)據(jù)塊的起始地址X1和長(zhǎng)度Y1。
本發(fā)明的關(guān)鍵是在BIOS內(nèi)設(shè)置一安全驅(qū)動(dòng)模塊(Rom Driver),使其成為底層的安全芯片和BIOS之間的通訊橋梁,即將接收到的來自BIOS的控制安全芯片的命令和與控制安全芯片命令相關(guān)的數(shù)據(jù)發(fā)送給TPM芯片,驅(qū)動(dòng)并監(jiān)視TPM芯片執(zhí)行命令的情況,當(dāng)命令執(zhí)行完畢后,將執(zhí)行的結(jié)果保存在BIOS指定的位置,以供BIOS讀取。也就是說,安全驅(qū)動(dòng)模塊負(fù)責(zé)和TPM芯片直接溝通,讓TPM芯片處于要求的工作狀態(tài),并將TPM芯片的執(zhí)行結(jié)果保存在BIOS指定的位置。這樣,既保證了TPM芯片的安全功能,又使得BIOS不需要了解TPM芯片的細(xì)節(jié)技術(shù)。
應(yīng)用本發(fā)明的實(shí)現(xiàn)方法,還具有以下優(yōu)點(diǎn)1)由于該安全驅(qū)動(dòng)模塊被集成到BIOS內(nèi),因而可實(shí)現(xiàn)對(duì)PC底層代碼的保護(hù),使PC在開機(jī)階段就處于安全的工作環(huán)境;2)本發(fā)明不但可以用于臺(tái)式機(jī),還可以用于筆記本電腦內(nèi);3)本發(fā)明目前支持TCPA1.1版本;根據(jù)TCPA安全規(guī)范的發(fā)展,它可以很容易地升級(jí)到支持TCPA 1.2版本。
4)本發(fā)明的安全驅(qū)動(dòng)模塊短小精干,占用的存儲(chǔ)空間小,執(zhí)行速度快,使用十分方便,應(yīng)用于BIOS里,不會(huì)明顯延長(zhǎng)系統(tǒng)啟動(dòng)的時(shí)間。
圖1所示為應(yīng)用本發(fā)明的BIOS、安全芯片以及安全驅(qū)動(dòng)模塊之間的結(jié)構(gòu)示意圖;圖2所示為在BIOS的POST階段應(yīng)用本發(fā)明的總體流程圖;圖3所示為應(yīng)用本發(fā)明的在POST階段內(nèi)對(duì)系統(tǒng)主引導(dǎo)記錄進(jìn)行加密的流程圖;圖4所示為應(yīng)用本發(fā)明的初始化函數(shù)MP_InitTPM()的內(nèi)部流程圖;圖5所示為應(yīng)用本發(fā)明的獲取安全芯片狀態(tài)函數(shù)MP_GetTPMStatusInfo()的內(nèi)部流程圖;圖6所示為應(yīng)用本發(fā)明的向安全芯片傳送命令函數(shù)MP_TPMTransmit()的內(nèi)部流程圖;圖7所示為應(yīng)用本發(fā)明的關(guān)閉安全芯片通信接口函數(shù)MP_CloseTPM()的內(nèi)部流程圖;圖8所示為在BIOS的BOOT BLOCK階段應(yīng)用本發(fā)明的總體流程圖;圖9所示為應(yīng)用本發(fā)明的在BOOT BLOCK階段內(nèi)對(duì)BOOT BLOCK數(shù)據(jù)塊進(jìn)行加密的流程圖;圖10所示為應(yīng)用本發(fā)明的安全芯片物理存在函數(shù)MA_PhysicalPresenceTPM()的內(nèi)部流程圖;圖11所示為應(yīng)用本發(fā)明的驅(qū)動(dòng)安全芯片執(zhí)行HASH運(yùn)算函數(shù)MA_HashAllExtendTPM()的內(nèi)部流程圖。
具體實(shí)施例方式
為使本發(fā)明的目的、技術(shù)方案和效果更加清楚,以下結(jié)合附圖及實(shí)施例對(duì)本發(fā)明再做進(jìn)一步詳細(xì)的說明。
本發(fā)明的思路是在BIOS內(nèi)設(shè)置一安全驅(qū)動(dòng)模塊(Rom Driver),使其成為底層的安全芯片和BIOS之間的通信橋梁,即將接收到的來自BIOS的控制安全芯片的命令和與控制安全芯片命令相關(guān)的數(shù)據(jù)發(fā)送給TPM芯片,讓TPM芯片處于要求的工作狀態(tài),驅(qū)動(dòng)并監(jiān)視TPM芯片執(zhí)行命令的情況,當(dāng)命令執(zhí)行完畢后,將執(zhí)行的結(jié)果保存在BIOS指定的位置,以供BIOS讀取。也就是說,BIOS決定待加密的數(shù)據(jù)塊后,調(diào)用TPM安全驅(qū)動(dòng)模塊提供的接口函數(shù),向TPM芯片發(fā)送進(jìn)行HASH運(yùn)算的命令和要加密的數(shù)據(jù)。BIOS只需確定待加密的數(shù)據(jù)塊的位置和大小,剩下的事情由安全驅(qū)動(dòng)模塊指揮TPM芯片去完成。這樣,既保證了TPM芯片的安全功能,又使得BIOS不需要了解TPM芯片的細(xì)節(jié)技術(shù)。
圖1所示為應(yīng)用本發(fā)明的BIOS、安全芯片以及安全驅(qū)動(dòng)模塊之間的結(jié)構(gòu)示意圖。在計(jì)算機(jī)主板110內(nèi)的BIOS 112中設(shè)置用于安全芯片和BIOS之間通信的安全驅(qū)動(dòng)模塊(Rom Driver),即在BIOS的POST階段內(nèi)和BOOTBLOCK階段內(nèi)分別設(shè)置安全驅(qū)動(dòng)模塊,由于在POST階段內(nèi),系統(tǒng)內(nèi)存已經(jīng)初始化完畢,即系統(tǒng)內(nèi)存可用,而在BOOT BLOCK階段內(nèi),系統(tǒng)內(nèi)存還不可用,為敘述方便,以下將應(yīng)用在POST階段內(nèi)的安全驅(qū)動(dòng)模塊稱為內(nèi)存可用(MP,Memory Present)安全驅(qū)動(dòng)模塊,將應(yīng)用在BOOT BLOCK階段內(nèi)的安全驅(qū)動(dòng)模塊稱為內(nèi)存不可用(MA,Memory Absent)安全驅(qū)動(dòng)模塊。
應(yīng)用在POST階段內(nèi)的MP安全驅(qū)動(dòng)模塊114,和應(yīng)用在BOOT BLOCK階段內(nèi)的MA安全驅(qū)動(dòng)模塊113均從傳遞參數(shù)的寄存器EAX中讀取來自BIOS 112的調(diào)用代碼,調(diào)用自身內(nèi)與該代碼相對(duì)應(yīng)的模塊,給安全芯片發(fā)送控制安全芯片的命令和與控制安全芯片命令相關(guān)的數(shù)據(jù),驅(qū)動(dòng)并監(jiān)視安全芯片111運(yùn)行,獲取安全芯片111的運(yùn)行結(jié)果,并將其保存在BIOS指定的位置。BIOS啟動(dòng)完成后,啟動(dòng)操作系統(tǒng)120。
上述應(yīng)用在POST階段內(nèi)的MP安全驅(qū)動(dòng)模塊中包括控制模塊、初始化模塊、向安全芯片傳送命令的模塊,獲取安全芯片當(dāng)前狀態(tài)的模塊和關(guān)閉安全芯片通信接口的模塊。其中,控制模塊接收來自BIOS的調(diào)用,從傳遞參數(shù)寄存器內(nèi)讀取調(diào)用代碼,調(diào)用與該代碼對(duì)應(yīng)的模塊,并將該模塊的執(zhí)行結(jié)果保存在BIOS指定的位置;初始化模塊接收來自控制模塊的調(diào)用,對(duì)安全芯片進(jìn)行初始化,建立BIOS和安全芯片之間的安全通道,將初始化結(jié)果返回給控制模塊;向安全芯片傳送命令的模塊接收來自控制模塊的調(diào)用,向安全芯片傳送BIOS所發(fā)的命令,并將安全芯片的執(zhí)行結(jié)果返回給控制模塊;獲取安全芯片當(dāng)前狀態(tài)的模塊接收來自控制模塊的調(diào)用,檢測(cè)安全芯片當(dāng)前的狀態(tài),并將檢測(cè)結(jié)果返回給控制模塊;關(guān)閉安全芯片通信接口的模塊接收來自控制模塊的調(diào)用,關(guān)閉BIOS與安全芯片之間的通信接口,將執(zhí)行結(jié)果返回給控制模塊。
上述應(yīng)用在BOOT BLOCK階段內(nèi)的MA安全驅(qū)動(dòng)模塊中包括控制模塊、初始化模塊、TPM芯片物理存在模塊和執(zhí)行HASH運(yùn)算的模塊。其中,控制模塊接收來自BIOS的調(diào)用,從傳遞參數(shù)寄存器內(nèi)讀取調(diào)用代碼與控制命令相關(guān)的數(shù)據(jù),調(diào)用與該代碼對(duì)應(yīng)的模塊,并將該模塊的執(zhí)行結(jié)果保存在BIOS指定的位置;初始化模塊接收來自控制模塊的調(diào)用,對(duì)安全芯片進(jìn)行初始化,建立BIOS和安全芯片之間的安全通道,將初始化結(jié)果返回給控制模塊;TPM芯片物理存在模塊接收來自控制模塊的調(diào)用,向安全芯片發(fā)送指示安全芯片物理存在的命令TSC_PhysicalPresence,將安全芯片的執(zhí)行結(jié)果返回給控制模塊;執(zhí)行HASH運(yùn)算的模塊接收來自控制模塊的調(diào)用,控制安全芯片進(jìn)行HASH運(yùn)算,將安全芯片的運(yùn)算結(jié)果保存在安全芯片內(nèi)的寄存器中,將執(zhí)行結(jié)果返回給控制模塊。
對(duì)于上述結(jié)構(gòu),可以只在BIOS的POST階段內(nèi)存在MP安全驅(qū)動(dòng)模塊114,也可以只在BIOS的BOOT BLOCK階段內(nèi)存在MA安全驅(qū)動(dòng)模塊113,還可以同時(shí)在BIOS的POST階段內(nèi)存在MP安全驅(qū)動(dòng)模塊114,在BOOT BLOCK階段內(nèi)存在MA安全驅(qū)動(dòng)模塊113。
如果在BIOS的BOOT BLOCK階段內(nèi)運(yùn)行MA安全啟動(dòng)模塊后,緊接著在BIOS的POST階段內(nèi)又運(yùn)行MP安全驅(qū)動(dòng)模塊,由于兩者銜接很緊湊,在BOOT BLOCK階段內(nèi)運(yùn)行MA安全啟動(dòng)模塊中可以不包含關(guān)閉安全芯片通信接口的模塊;如果僅僅是在BIOS的BOOT BLOCK階段內(nèi)運(yùn)行MA安全驅(qū)動(dòng)模塊,而在BIOS的POSTA階段內(nèi)沒有MP安全驅(qū)動(dòng)模塊,則MA安全驅(qū)動(dòng)模塊中需要包含關(guān)閉安全芯片通信接口的模塊。由于第二種情況對(duì)于計(jì)算機(jī)內(nèi)信息安全性的保護(hù)明顯低于第一種情況,因此不推薦使用上述第二種方案。
下面具體說明安全計(jì)算機(jī)的實(shí)現(xiàn)方法。
在BIOS的POST階段內(nèi),系統(tǒng)內(nèi)存已經(jīng)初始化完畢,并可供安全驅(qū)動(dòng)模塊使用,因此,在本階段內(nèi)MP安全驅(qū)動(dòng)模塊能夠傳輸TPM規(guī)范所定義的所有命令。圖2所示為在BIOS的POST階段應(yīng)用本發(fā)明的總體流程圖。
步驟201,BIOS在POST內(nèi)將MP安全驅(qū)動(dòng)模塊加載到內(nèi)存中,將調(diào)用代碼寫入用于傳遞參數(shù)的寄存器EAX內(nèi);步驟202,MP安全驅(qū)動(dòng)模塊由BIOS觸發(fā)讀取寄存器內(nèi)的代碼,調(diào)用自身與該代碼相對(duì)應(yīng)的函數(shù),驅(qū)動(dòng)并監(jiān)視安全芯片運(yùn)行;步驟203,將運(yùn)行結(jié)果保存在BIOS指定的位置。
上述調(diào)用代碼所對(duì)應(yīng)的函數(shù)為初始化函數(shù)MP_InitTPM(),獲取安全芯片狀態(tài)的函數(shù)MP_GetTPMStatusInfo(),向安全芯片傳送命令的函數(shù)MP_TPMTransmit(),或關(guān)閉安全芯片通信接口的函數(shù)MP_CloseTPM()。
在實(shí)際應(yīng)用中,BIOS在POST內(nèi)將MP安全驅(qū)動(dòng)模塊加載到內(nèi)存,然后調(diào)用MP安全驅(qū)動(dòng)模塊內(nèi)的初始化函數(shù)MP_InitTPM(),對(duì)安全芯片進(jìn)行初始化,從而建立BIOS與安全芯片之間的交流通道,以確保安全芯片處于正常的工作狀態(tài),然后BIOS再根據(jù)需要調(diào)用MP安全驅(qū)動(dòng)模塊內(nèi)的其它函數(shù)。
當(dāng)MP安全驅(qū)動(dòng)模塊判斷出BIOS調(diào)用MP_TPMTransmit()傳送命令后,該MP安全驅(qū)動(dòng)模塊將到內(nèi)存中的指定位置讀取具體待傳送命令的代碼以及與該命令相對(duì)應(yīng)的參數(shù),該相對(duì)應(yīng)的參數(shù)是待進(jìn)行加密運(yùn)算數(shù)據(jù)塊在內(nèi)存中的起始地址X1和長(zhǎng)度Y1,存放返回值的緩沖區(qū)在內(nèi)存值的起始地址X2和長(zhǎng)度Y2。例如,如果BIOS待對(duì)系統(tǒng)主引導(dǎo)記錄數(shù)據(jù)塊進(jìn)行加密運(yùn)算,則MP安全驅(qū)動(dòng)模塊將讀到對(duì)系統(tǒng)主引導(dǎo)記錄數(shù)據(jù)塊進(jìn)行加密運(yùn)算的命令以及與該命令相對(duì)應(yīng)的參數(shù),即系統(tǒng)主引導(dǎo)記錄所數(shù)據(jù)塊在內(nèi)存中的起始地址X1,系統(tǒng)主引導(dǎo)記錄數(shù)據(jù)塊的長(zhǎng)度Y1,以及存放計(jì)算完畢后返回?cái)?shù)據(jù)在內(nèi)存中的起始地址X2,返回?cái)?shù)據(jù)長(zhǎng)度Y2。
圖3所示為應(yīng)用本發(fā)明的在POST階段內(nèi)對(duì)系統(tǒng)主引導(dǎo)記錄進(jìn)行加密的流程圖。
步驟30 1,BIOS在POST內(nèi)將MP安全驅(qū)動(dòng)模塊加載到內(nèi)存,MP安全驅(qū)動(dòng)模塊從傳遞參數(shù)寄存器中讀取到初始化安全芯片的命令代碼后,調(diào)用自身的初始化函數(shù)MP_InitTPM(),對(duì)安全芯片進(jìn)行初始化處理;步驟302,MP安全驅(qū)動(dòng)模塊從傳遞參數(shù)寄存器中讀取到獲取安全芯片狀態(tài)的命令代碼后,調(diào)用獲取安全芯片狀態(tài)函數(shù)MP_GetTPMStatusInfo(),檢測(cè)安全芯片當(dāng)前的狀態(tài),并判斷初始化結(jié)果是否正確,如果是,則執(zhí)行步驟303,否則結(jié)束本流程;步驟303,MP安全驅(qū)動(dòng)模塊從傳遞參數(shù)寄存器中讀取到調(diào)用MP_TPMTransmit()函數(shù)的代碼,調(diào)用該函數(shù)MP_TPMTransmit(),同時(shí)從內(nèi)存的指定位置中讀取到由BIOS指定的對(duì)系統(tǒng)主引導(dǎo)記錄進(jìn)行加密運(yùn)算的命令以及與加密系統(tǒng)主引導(dǎo)記錄數(shù)據(jù)塊相關(guān)的參數(shù),該相關(guān)參數(shù)為系統(tǒng)主引導(dǎo)記錄數(shù)據(jù)塊在內(nèi)存中的起始地址X1,該數(shù)據(jù)塊的大小Y1,以及內(nèi)存中用于存放返回值緩沖區(qū)的起始地址X2和大小Y2,控制安全芯片對(duì)系統(tǒng)主引導(dǎo)記錄進(jìn)行加密運(yùn)算;步驟304,MP安全驅(qū)動(dòng)模塊將安全芯片的執(zhí)行結(jié)果填入起始地址為X2的緩沖區(qū)中,結(jié)束本流程。
此時(shí),如果系統(tǒng)還需做加密運(yùn)算,則重復(fù)執(zhí)行步驟302至步驟304,直到所有的運(yùn)算完畢后,BIOS調(diào)用關(guān)閉安全芯片通信接口的函數(shù)MP_CloseTPM(),以終止與安全芯片的通信;如果系統(tǒng)此時(shí)不再需要做任何運(yùn)算,則BIOS直接調(diào)用關(guān)閉安全芯片通信接口的函數(shù)MP_CloseTPM(),終止與安全芯片的通信。
下面具體說明各個(gè)函數(shù)的內(nèi)部流程。
圖4所示為應(yīng)用本發(fā)明的初始化函數(shù)MP_InitTPM()的內(nèi)部流程圖。
步驟401,打開與安全芯片直接相連的LPC(Low Pin Count)接口;步驟402,判斷該安全芯片的制造商ID和設(shè)備ID是否與自身數(shù)據(jù)庫內(nèi)保存的制造商ID和設(shè)備ID相同,如果是,則執(zhí)行步驟403,否則執(zhí)行步驟405;步驟403,設(shè)置該安全芯片的輸入輸出(I/O)基地址以及待使用的中斷號(hào);步驟404,檢測(cè)該安全芯片的狀態(tài),設(shè)置與該芯片當(dāng)前狀態(tài)相對(duì)應(yīng)的標(biāo)志;步驟405,關(guān)閉與安全芯片直接相連的LPC接口,結(jié)束本流程。
圖5所示為應(yīng)用本發(fā)明的獲取安全芯片狀態(tài)函數(shù)MP_GetTPMStatusInfo()的內(nèi)部流程圖。
步驟501,打開與安全芯片直接相連的LPC接口;步驟502,分別檢測(cè)該LPC接口和該安全芯片的狀態(tài),步驟503,檢測(cè)完畢后關(guān)閉與安全芯片直接相連的LPC接口;步驟504,返回LPC接口和安全芯片的狀態(tài)字,結(jié)束本流程。
圖6所示為應(yīng)用本發(fā)明的向安全芯片傳送命令函數(shù)MP_TPMTransmit()的內(nèi)部流程圖。
步驟601,判斷安全芯片當(dāng)前是否已準(zhǔn)備好接收命令,如果是,則執(zhí)行步驟602,否則執(zhí)行步驟606;步驟602,向安全芯片發(fā)送一個(gè)命令數(shù)據(jù)的所有字節(jié);
步驟603,判斷安全芯片是否正確接收到所有的數(shù)據(jù),如果是,則執(zhí)行步驟604,否則執(zhí)行步驟607;步驟604,判斷安全芯片是否執(zhí)行完畢該命令,如果是,則執(zhí)行步驟605,否則執(zhí)行步驟608;步驟605,讀取安全芯片的命令返回值;步驟606,設(shè)置命令傳輸標(biāo)志后,結(jié)束本流程;該命令傳輸標(biāo)志用于標(biāo)識(shí)所傳輸?shù)拿钍欠癖徽_的執(zhí)行;步驟607,準(zhǔn)備重新傳送該命令數(shù)據(jù)的所有字節(jié),判斷重新傳送的次數(shù)是否超出預(yù)先設(shè)定的次數(shù)閾值,例如判斷重新傳送的次數(shù)是否超出8次,如果是,則執(zhí)行步驟606,否則執(zhí)行步驟602;步驟608,判斷等待安全芯片執(zhí)行命令的時(shí)間是否超出預(yù)先設(shè)置的時(shí)間閾值,例如判斷等待安全芯片執(zhí)行命令的時(shí)間是否超出20毫秒,如果是,則執(zhí)行步驟606,否則重復(fù)執(zhí)行步驟604。
圖7所示為應(yīng)用本發(fā)明的關(guān)閉安全芯片通信接口函數(shù)MP_CloseTPM()的內(nèi)部流程圖。
步驟701,打開與安全芯片直接相連的LPC接口;步驟702,清除為該安全芯片設(shè)置的輸入輸出(I/O)基地址以及所使用的中斷號(hào);步驟703,關(guān)閉與安全芯片直接相連的LPC接口,結(jié)束本流程。
在BIOS的BOOT BLOCK階段內(nèi),系統(tǒng)內(nèi)存還不可用,因此,在本階段內(nèi)BIOS不能向MA安全驅(qū)動(dòng)模塊傳送太多的參數(shù),即除傳送運(yùn)算所必須的參數(shù)外,只能根據(jù)處理器空閑的寄存器多少,決定能夠傳送多少參數(shù),這和具體的實(shí)現(xiàn)方式相關(guān);上述必須傳遞的參數(shù)是數(shù)據(jù)塊的大小和地址,以及要使用的TPM內(nèi)寄存器的索引號(hào)。圖8所示為在BIOS的BOOT BLOCK階段應(yīng)用本發(fā)明的總體流程圖。
步驟801,BIOS將待調(diào)用命令的代碼寫入用于傳遞參數(shù)的寄存器EAX內(nèi);步驟802,MA安全驅(qū)動(dòng)模塊由BIOS觸發(fā)讀取寄存器內(nèi)的代碼,調(diào)用自身與該代碼相對(duì)應(yīng)的函數(shù),驅(qū)動(dòng)安全芯片運(yùn)行;步驟803,將運(yùn)行結(jié)果保存在BIOS指定的位置。
上述待調(diào)用命令所對(duì)應(yīng)的函數(shù)為初始化函數(shù)MP_InitTPM(),安全芯片物理存在函數(shù)MA_PhysicalPresenceTPM(),或驅(qū)動(dòng)安全芯片執(zhí)行HASH運(yùn)算的函數(shù)MA_HashAllExtendTPM()。
在實(shí)際應(yīng)用中,BIOS首先調(diào)用MA安全驅(qū)動(dòng)模塊內(nèi)的初始化函數(shù)MP_InitTPM(),對(duì)安全芯片進(jìn)行初始化,從而建立BIOS與安全芯片之間的交流通道,以確保安全芯片處于正常的工作狀態(tài),之后,調(diào)用MA_PhysicalPresenceTPM()函數(shù),以傳輸TSC_PhysicalPresence命令,然后再調(diào)用MA_HashAllExtendTPM()函數(shù),控制安全芯片對(duì)待加密的數(shù)據(jù)塊進(jìn)行HASH運(yùn)算。
當(dāng)MA安全驅(qū)動(dòng)模塊判斷出BIOS調(diào)用MA_HashAllExtendTPM()傳送命令后,該MA安全驅(qū)動(dòng)模塊將繼續(xù)從傳遞參數(shù)的寄存器讀取與所傳送命令相對(duì)應(yīng)的參數(shù),即待進(jìn)行加密運(yùn)算數(shù)據(jù)塊的起始地址X1和長(zhǎng)度Y1。例如,如果BIOS要對(duì)BOOT BLOCK數(shù)據(jù)塊進(jìn)行加密運(yùn)算,則MA安全驅(qū)動(dòng)模塊所讀到的參數(shù)為BOOT BLOCK數(shù)據(jù)塊的起始地址X1,BOOT BLOCK數(shù)據(jù)塊的長(zhǎng)度Y1。
圖9所示為應(yīng)用本發(fā)明的在BOOT BLOCK階段內(nèi)對(duì)BOOT BLOCK數(shù)據(jù)塊進(jìn)行加密的流程圖。
步驟901,MA安全驅(qū)動(dòng)模塊從傳遞參數(shù)寄存器中讀取到初始化安全芯片的命令代碼后,調(diào)用自身的初始化函數(shù)MP_InitTPM(),對(duì)安全芯片進(jìn)行初始化處理;步驟902,根據(jù)返回的初始化結(jié)果,判斷初始化結(jié)果是否正確,如果是,則執(zhí)行步驟903,否則結(jié)束本流程;步驟903,MA安全驅(qū)動(dòng)模塊從傳遞參數(shù)寄存器中讀取到傳送物理存在命令的命令代碼后,調(diào)用函數(shù)MA_PhysicalPresenceTPM(),傳輸命令TSC_PhysicalPresence,以標(biāo)識(shí)安全芯片物理存在;步驟904,MA安全驅(qū)動(dòng)模塊從傳遞參數(shù)寄存器中讀取到執(zhí)行HASH運(yùn)算代碼后,調(diào)用函數(shù)MA_HashAllExtendTPM(),同時(shí)從傳遞參數(shù)寄存器中獲取BIOS已指定的與BOOT BLOCK數(shù)據(jù)塊相關(guān)的參數(shù),該相關(guān)的參數(shù)為BOOT BLOCK數(shù)據(jù)塊的起始地址X1和數(shù)據(jù)塊大小Y1,以控制安全芯片對(duì)BOOT BLOCK數(shù)據(jù)塊進(jìn)行加密運(yùn)算;步驟905,MA安全驅(qū)動(dòng)模塊將執(zhí)行完畢的標(biāo)志保存在BIOS的指定位置后,結(jié)束本流程。
下面具體說明各個(gè)函數(shù)的內(nèi)部流程。初始化函數(shù)的流程如圖4所示,在此不再重復(fù)說明。
圖10所示為應(yīng)用本發(fā)明的安全芯片安全芯片物理存在函數(shù)MA_PhysicalPresenceTPM()的內(nèi)部流程圖。
步驟1001,判斷安全芯片當(dāng)前是否已準(zhǔn)備好接收命令,如果是,則執(zhí)行步驟1002,否則退出本流程;步驟1002,向安全芯片發(fā)送TSC_PhysicalPresence命令數(shù)據(jù)的所有字節(jié);步驟1003,判斷安全芯片是否正確接收到所有的數(shù)據(jù),如果是,則執(zhí)行步驟1004,否則執(zhí)行步驟1007;步驟1004,判斷安全芯片是否執(zhí)行完畢該命令,如果是,則執(zhí)行步驟1005,否則執(zhí)行步驟1008;步驟1005,讀取安全芯片的命令返回值;步驟1006,設(shè)置命令傳輸標(biāo)志后,結(jié)束本流程;該命令傳輸標(biāo)志用于標(biāo)識(shí)所傳輸?shù)拿钍欠癖徽_的執(zhí)行;步驟1007,準(zhǔn)備重新傳送該命令數(shù)據(jù)的所有字節(jié),判斷重新傳送的次數(shù)是否超出預(yù)先設(shè)定的次數(shù)閾值,例如判斷重新傳送的次數(shù)是否超出8次,如果是,則執(zhí)行步驟1006,否則執(zhí)行步驟1002;步驟1008,判斷等待安全芯片執(zhí)行命令的時(shí)間是否超出預(yù)先設(shè)置的時(shí)間閾值,例如判斷等待安全芯片執(zhí)行命令的時(shí)間是否超出20毫秒,如果是,則執(zhí)行步驟1006,否則重復(fù)執(zhí)行步驟1004。
圖11所示為應(yīng)用本發(fā)明的驅(qū)動(dòng)安全芯片執(zhí)行HASH運(yùn)算函數(shù)MA_HashAllExtendTPM()的內(nèi)部流程圖。
步驟1101,向安全芯片發(fā)送開始HASH運(yùn)算的命令TPM_SHA1Start,并從該命令的返回?cái)?shù)據(jù)中獲取命令TPM_SHAlUpdate一次最多可接受的字節(jié)數(shù)Y2;步驟1102,計(jì)算一次發(fā)送Y2字節(jié)的次數(shù)c1,c1等于待執(zhí)行HASH運(yùn)算數(shù)據(jù)塊的大小Y1除以Y2后取整,并計(jì)算剩余的字節(jié)數(shù)d1,d1等于Y1減去Y2乘以c1的值;步驟1103,由于命令TPM_SHA1CompleteExtend每次最多只能接收一較小的固定值字節(jié)數(shù),如64字節(jié),因此,需要計(jì)算剩余的字節(jié)數(shù)d1的發(fā)送次數(shù)c2,c2等于d1除以64后取整,并計(jì)算剩余的字節(jié)數(shù)d2,d2等于d1減去c2乘以64;步驟1104,發(fā)送命令TPM_SHA1Update,每次傳送并計(jì)算Y2字節(jié),循環(huán)c1次;步驟1105,發(fā)送命令TPM_SHA1Update,每次傳送并計(jì)算命令TPM_SHA1CompleteExtend所能接收的最大字節(jié)數(shù),如64字節(jié),循環(huán)c2次;步驟1106,發(fā)送命令TPM_SHA1CompleteExtend,傳送并計(jì)算最后的d2字節(jié),該步驟是計(jì)算過程的最后一步,然后,將最終計(jì)算結(jié)果保存在安全芯片的內(nèi)部寄存器中,結(jié)束本流程。
應(yīng)用本發(fā)明,可以只在BIOS的POST階段內(nèi)應(yīng)用MP安全驅(qū)動(dòng)模塊,也可以只在BIOS的BOOT BLOCK階段內(nèi)應(yīng)用MA安全驅(qū)動(dòng)模塊,還可以同時(shí)在BIOS的POST階段內(nèi)應(yīng)用MP安全驅(qū)動(dòng)模塊,在BOOT BLOCK階段內(nèi)應(yīng)用MA安全驅(qū)動(dòng)模塊。
以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種安全計(jì)算機(jī),至少包括安全芯片、BIOS和用于傳遞參數(shù)的寄存器,其特征在于,該計(jì)算機(jī)還包括用于安全芯片和BIOS之間通信的安全驅(qū)動(dòng)模塊Rom Driver,該安全驅(qū)動(dòng)模塊從傳遞參數(shù)的寄存器中讀取來自BIOS的調(diào)用代碼,調(diào)用自身內(nèi)與該代碼相對(duì)應(yīng)的模塊,驅(qū)動(dòng)并監(jiān)視安全芯片運(yùn)行,并將安全芯片的執(zhí)行結(jié)果保存在BIOS指定的位置。
2.根據(jù)權(quán)利要求1所述的計(jì)算機(jī),其特征在于,在BIOS的BOOT BLOCK階段,所述安全驅(qū)動(dòng)模塊內(nèi)包括控制模塊、初始化模塊、TPM芯片物理存在模塊和執(zhí)行HASH運(yùn)算的模塊,其中,所述控制模塊,接收來自BIOS的調(diào)用,從傳遞參數(shù)寄存器內(nèi)讀取調(diào)用代碼,調(diào)用與該代碼對(duì)應(yīng)的模塊,并將該模塊的執(zhí)行結(jié)果保存在BIOS指定的位置;所述初始化模塊,接收來自控制模塊的調(diào)用,對(duì)安全芯片進(jìn)行初始化,將初始化結(jié)果返回給控制模塊;所述TPM芯片物理存在模塊,接收來自控制模塊的調(diào)用,向安全芯片發(fā)送指示安全芯片物理存在的命令TSC_PhysicalPresence,將安全芯片的執(zhí)行結(jié)果返回給控制模塊;所述執(zhí)行HASH運(yùn)算的模塊,接收來自控制模塊的調(diào)用,控制安全芯片進(jìn)行HASH運(yùn)算,將安全芯片的運(yùn)算結(jié)果保存在安全芯片內(nèi)的寄存器中,給控制模塊返回執(zhí)行結(jié)果。
3.根據(jù)權(quán)利要求2所述的計(jì)算機(jī),其特征在于,所述安全驅(qū)動(dòng)模塊內(nèi)進(jìn)一步包括關(guān)閉安全芯片通信接口的模塊,該模塊接收來自控制模塊的調(diào)用,關(guān)閉BIOS與安全芯片之間的通信接口,將執(zhí)行結(jié)果返回給控制模塊。
4.根據(jù)權(quán)利要求1或2所述的計(jì)算機(jī),其特征在于,在BIOS的POST階段,所述安全驅(qū)動(dòng)模塊內(nèi)包括控制模塊、初始化模塊、向安全芯片傳送命令的模塊、獲取安全芯片當(dāng)前狀態(tài)的模塊和關(guān)閉安全芯片通信接口的模塊,其中,所述控制模塊,接收來自BIOS的調(diào)用,從傳遞參數(shù)寄存器內(nèi)讀取調(diào)用代碼,調(diào)用與該代碼對(duì)應(yīng)的模塊,并將該模塊的執(zhí)行結(jié)果保存在BIOS指定的位置;所述初始化模塊,接收來自控制模塊的調(diào)用,對(duì)安全芯片進(jìn)行初始化,將初始化結(jié)果返回給控制模塊;所述向安全芯片傳送命令的模塊,接收來自控制模塊的調(diào)用,向安全芯片傳送BIOS所發(fā)的命令,并將安全芯片的執(zhí)行結(jié)果返回給控制模塊;所述獲取安全芯片當(dāng)前狀態(tài)的模塊,接收來自控制模塊的調(diào)用,檢測(cè)安全芯片當(dāng)前的狀態(tài),并將檢測(cè)結(jié)果返回給控制模塊;所述關(guān)閉安全芯片通信接口的模塊,接收來自控制模塊的調(diào)用,關(guān)閉BIOS與安全芯片之間的通信接口,將執(zhí)行結(jié)果返回給控制模塊。
5.一種安全計(jì)算機(jī)的實(shí)現(xiàn)方法,其特征在于,在BIOS的POST階段,該方法包括以下步驟a、BIOS在POST內(nèi)將MP安全驅(qū)動(dòng)模塊加載到內(nèi)存中;b、BIOS將調(diào)用代碼寫入用于傳遞參數(shù)的寄存器內(nèi);c、MP安全驅(qū)動(dòng)模塊接收到來自BIOS的調(diào)用后,讀取寄存器內(nèi)的代碼,調(diào)用與之相對(duì)應(yīng)的函數(shù),驅(qū)動(dòng)并監(jiān)視安全芯片運(yùn)行,將運(yùn)行結(jié)果保存在BIOS指定的位置。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述調(diào)用代碼所對(duì)應(yīng)的函數(shù)為初始化函數(shù)MP_InitTPM(),獲取安全芯片狀態(tài)的函數(shù)MP_GetTPMStatusInfo(),向安全芯片傳送命令的函數(shù)MP_TPMTransmit(),或關(guān)閉安全芯片通信接口的函數(shù)MP_CloseTPM()。
7.根據(jù)權(quán)利要求6所述的方法,其特征在于,該方法進(jìn)一步包括當(dāng)MP安全驅(qū)動(dòng)模塊判斷出BIOS調(diào)用MP_TPMTransmit()時(shí),將到內(nèi)存中的指定位置讀取具體待傳送命令的代碼以及與該命令相對(duì)應(yīng)的參數(shù)。
8.根據(jù)權(quán)利要求7所述的方法,其特征在于,所述與具體待傳送命令相對(duì)應(yīng)的參數(shù)是待進(jìn)行加密運(yùn)算數(shù)據(jù)塊在內(nèi)存中的起始地址X1和長(zhǎng)度Y1,以及存放返回值的緩沖區(qū)在內(nèi)存中的起始地址X2和長(zhǎng)度Y2。
9.根據(jù)權(quán)利要求5所述的方法,其特征在于,該方法進(jìn)一步包括在BIOS的BOOT BLOCK階段,BIOS將調(diào)用代碼寫入用于傳遞參數(shù)的寄存器內(nèi),MA安全驅(qū)動(dòng)模塊接收到來自BIOS的調(diào)用后,讀取寄存器內(nèi)的代碼,調(diào)用與之相對(duì)應(yīng)的函數(shù),驅(qū)動(dòng)安全芯片運(yùn)行,并給BIOS返回運(yùn)行結(jié)果。
10.根據(jù)權(quán)利要求9所述的方法,其特征在于,所述待調(diào)用函數(shù)為初始化函數(shù)MP_InitTPM(),安全芯片物理存在函數(shù)MA_PhysicalPresenceTPM(),或驅(qū)動(dòng)安全芯片執(zhí)行HASH運(yùn)算的函數(shù)MA_HashAllExtendTPM()。
11.根據(jù)權(quán)利要求10所述的方法,其特征在于,該方法進(jìn)一步包括當(dāng)MA安全驅(qū)動(dòng)模塊判斷出BIOS調(diào)用MA_HashAllExtendTPM()時(shí),將繼續(xù)從傳遞參數(shù)的寄存器中讀取與所傳送命令相對(duì)應(yīng)的參數(shù)。
12.根據(jù)權(quán)利要求11所述的方法,其特征在于,所述與所傳送命令相對(duì)應(yīng)的參數(shù)是待進(jìn)行加密運(yùn)算數(shù)據(jù)塊的起始地址X1和長(zhǎng)度Y1。
13.根據(jù)權(quán)利要求6或10所述的方法,其特征在于,當(dāng)MP安全驅(qū)動(dòng)模塊調(diào)用初始化函數(shù)MP_InitTPM()時(shí),驅(qū)動(dòng)安全芯片運(yùn)行的操作包括以下步驟打開與安全芯片直接相連的LPC接口,判斷該安全芯片的制造商ID和設(shè)備ID是否與自身數(shù)據(jù)庫內(nèi)保存的制造商ID和設(shè)備ID相同,如果是,則設(shè)置該安全芯片的輸入輸出I/O基地址以及待使用的中斷號(hào),檢測(cè)該芯片的狀態(tài),設(shè)置與該芯片當(dāng)前狀態(tài)相對(duì)應(yīng)的標(biāo)志后,關(guān)閉與安全芯片直接相連的LPC接口,否則直接關(guān)閉與安全芯片直接相連的LPC接口。
14.根據(jù)權(quán)利要求6所述的方法,其特征在于,當(dāng)MP安全驅(qū)動(dòng)模塊調(diào)用獲取安全芯片狀態(tài)的函數(shù)MP_GetTPMStatusInfo()時(shí),驅(qū)動(dòng)安全芯片運(yùn)行的操作包括以下步驟打開與安全芯片直接相連的LPC接口,分別檢測(cè)該LPC接口和該安全芯片的狀態(tài),檢測(cè)完畢后關(guān)閉與安全芯片直接相連的LPC接口并返回LPC接口和安全芯片的狀態(tài)字。
15.根據(jù)權(quán)利要求6所述的方法,其特征在于,當(dāng)MP安全驅(qū)動(dòng)模塊調(diào)用安全芯片傳送命令的函數(shù)MP_TPMTransmit()時(shí),驅(qū)動(dòng)安全芯片運(yùn)行的操作包括以下步驟b1、判斷安全芯片當(dāng)前是否已準(zhǔn)備好接收命令,如果是,執(zhí)行步驟b2,否則執(zhí)行步驟b5;b2、向安全芯片發(fā)送一個(gè)命令數(shù)據(jù)的所有字節(jié)后,執(zhí)行步驟b3;b3、判斷安全芯片是否正確接收到所有的數(shù)據(jù),如果是,則執(zhí)行步驟b4,否則判斷重新傳送的次數(shù)是否超出預(yù)先設(shè)定的次數(shù)閾值,如果是,則執(zhí)行步驟b5,否則執(zhí)行步驟b2;b4、判斷安全芯片是否執(zhí)行完畢該命令,如果是,則讀取安全芯片的命令返回值后,執(zhí)行步驟b5,否則執(zhí)行步驟b6;b5、設(shè)置命令傳輸標(biāo)志后,結(jié)束本流程;b6、判斷等待安全芯片執(zhí)行命令的時(shí)間是否超出預(yù)先設(shè)置的時(shí)間閾值,如果是,則執(zhí)行步驟b5,否則重復(fù)執(zhí)行步驟b4。
16.根據(jù)權(quán)利要求6所述的方法,其特征在于,當(dāng)MP安全驅(qū)動(dòng)模塊調(diào)用關(guān)閉安全芯片通信接口的函數(shù)MP_CloseTPM()時(shí),驅(qū)動(dòng)安全芯片運(yùn)行的操作包括以下步驟打開與安全芯片直接相連的LPC接口,清除為該安全芯片設(shè)置的輸入輸出(I/O)基地址以及所使用的中斷號(hào),關(guān)閉與安全芯片直接相連的LPC接口。
17.根據(jù)權(quán)利要求10所述的方法,其特征在于,當(dāng)MA安全驅(qū)動(dòng)模塊調(diào)用安全芯片物理存在函數(shù)MA_PhysicalPresenceTPM()時(shí),驅(qū)動(dòng)安全芯片運(yùn)行的操作包括以下步驟b1、判斷安全芯片當(dāng)前是否已準(zhǔn)備好接收命令,如果是,執(zhí)行步驟b2,否則執(zhí)行步驟b5;b2、向安全芯片發(fā)送TSC_PhysicalPresence命令數(shù)據(jù)的所有字節(jié)后,執(zhí)行步驟b3;b3、判斷安全芯片是否正確接收到所有的數(shù)據(jù),如果是,則執(zhí)行步驟b4,否則判斷重新傳送的次數(shù)是否超出預(yù)先設(shè)定的次數(shù)閾值,如果是,則執(zhí)行步驟b5,否則執(zhí)行步驟b2;b4、判斷安全芯片是否執(zhí)行完畢該命令,如果是,則讀取安全芯片的命令返回值后,執(zhí)行步驟b5,否則執(zhí)行步驟b6;b5、設(shè)置命令傳輸標(biāo)志后,結(jié)束本流程;b6、判斷等待安全芯片執(zhí)行命令的時(shí)間是否超出預(yù)先設(shè)置的時(shí)間閾值,如果是,則執(zhí)行步驟b5,否則重復(fù)執(zhí)行步驟b4。
18.根據(jù)權(quán)利要求10所述的方法,其特征在于,當(dāng)MA安全驅(qū)動(dòng)模塊調(diào)用驅(qū)動(dòng)安全芯片執(zhí)行HASH運(yùn)算的函數(shù)MA_HashAllExtendTPM()時(shí),驅(qū)動(dòng)安全芯片運(yùn)行的操作包括以下步驟b1、獲取標(biāo)識(shí)待執(zhí)行HASH運(yùn)算數(shù)據(jù)塊的大小Y1和起始地址X1的參數(shù),向安全芯片發(fā)送開始HASH運(yùn)算的命令TPM_SHA1Start,并從該命令返回?cái)?shù)據(jù)中獲取命令TPM_SHA1Update一次最多可接受的字節(jié)數(shù)Y2;b2、計(jì)算一次發(fā)送Y2字節(jié)的次數(shù)c1,c1等于待執(zhí)行HASH運(yùn)算數(shù)據(jù)塊的大小Y1除以Y2后取整,并計(jì)算剩余的字節(jié)數(shù)d1,d1等于Y1減去Y2乘以c1的值;b3、計(jì)算剩余的字節(jié)數(shù)d1的發(fā)送次數(shù)c2,c2等于d1除以命令TPM_SHA1CompleteExtend所能接收的最大字節(jié)數(shù)后取整,并計(jì)算剩余的字節(jié)數(shù)d2,d2等于d1減去c2乘以命令TPM_SHA1CompleteExtend所能接收的最大字節(jié)數(shù);b4,發(fā)送命令TPM_SHA1Update,每次傳送并計(jì)算Y2字節(jié),循環(huán)c1次;b5、發(fā)送命令TPM_SHA1Update,每次傳送并計(jì)算命令TPM_SHA1CompleteExtend所能接收的最大字節(jié)數(shù),循環(huán)c2次;b6、發(fā)送命令TPM_SHA1CompleteExtend,傳送并計(jì)算最后的d2字節(jié),將最終計(jì)算結(jié)果保存在安全芯片的內(nèi)部寄存器中,結(jié)束本流程。
19.根據(jù)權(quán)利要求9所述的方法,其特征在于,所述MP安全驅(qū)動(dòng)模塊和MA安全驅(qū)動(dòng)模塊由BIOS觸發(fā)讀取寄存器內(nèi)的調(diào)用代碼。
20.一種安全計(jì)算機(jī)的實(shí)現(xiàn)方法,其特征在于,在BIOS的BOOT BLOCK階段,該方法包括以下步驟BIOS將調(diào)用代碼寫入用于傳遞參數(shù)的寄存器內(nèi),MA安全驅(qū)動(dòng)模塊接收到來自BIOS的調(diào)用后,讀取寄存器內(nèi)的代碼,調(diào)用與之相對(duì)應(yīng)的函數(shù),驅(qū)動(dòng)安全芯片運(yùn)行,并給BIOS返回運(yùn)行結(jié)果。
21.根據(jù)權(quán)利要求20所述的方法,其特征在于,所述待調(diào)用函數(shù)為初始化函數(shù)MP_InitTPM(),安全芯片物理存在函數(shù)MA_PhysicalPresenceTPM(),驅(qū)動(dòng)安全芯片執(zhí)行HASH運(yùn)算的函數(shù)MA_HashAllExtendTPM(),或關(guān)閉安全芯片通信接口的函數(shù)MP_CloseTPM()。
22.根據(jù)權(quán)利要求21所述的方法,其特征在于,該方法進(jìn)一步包括當(dāng)MA安全驅(qū)動(dòng)模塊判斷出BIOS調(diào)用MA_HashAllExtendTPM()時(shí),將繼續(xù)從傳遞參數(shù)的寄存器中讀取與所傳送命令相對(duì)應(yīng)的參數(shù)。
23.根據(jù)權(quán)利要求22所述的方法,其特征在于,所述與所傳送命令相對(duì)應(yīng)的參數(shù)是待進(jìn)行加密運(yùn)算數(shù)據(jù)塊的起始地址X1和長(zhǎng)度Y1。
全文摘要
本發(fā)明提供了一種安全計(jì)算機(jī)及其實(shí)現(xiàn)方法,其關(guān)鍵是在BIOS內(nèi)設(shè)置一安全驅(qū)動(dòng)模塊(Rom Driver),使其成為底層的安全芯片和BIOS之間的通訊橋梁,即將接收到的來自BIOS的控制安全芯片的命令和與控制安全芯片命令相關(guān)的數(shù)據(jù)發(fā)送給TPM芯片,驅(qū)動(dòng)并監(jiān)視TPM芯片執(zhí)行命令的情況,當(dāng)命令執(zhí)行完畢后,將執(zhí)行的結(jié)果保存在BIOS指定的位置,以供BIOS讀取。也就是說,安全驅(qū)動(dòng)模塊負(fù)責(zé)和TPM芯片直接溝通,讓TPM芯片處于要求的工作狀態(tài),并將TPM芯片的執(zhí)行結(jié)果保存在BIOS指定的位置。這樣,既保證了TPM芯片的安全功能,又使得BIOS不需要了解TPM芯片的細(xì)節(jié)技術(shù)。
文檔編號(hào)G06F1/00GK1690909SQ20041003728
公開日2005年11月2日 申請(qǐng)日期2004年4月30日 優(yōu)先權(quán)日2004年4月30日
發(fā)明者劉云海, 王曉文 申請(qǐng)人:聯(lián)想(北京)有限公司