林基艷
(榆林學(xué)院 信息工程學(xué)院,陜西 榆林 719000)
目前對(duì)可信計(jì)算平臺(tái)的研究,主要集中在可信計(jì)算平臺(tái)的重要部件TPM上面。但是在計(jì)算機(jī)主板上安裝TPM的安全計(jì)算機(jī)存在下列問題:用戶在使用TPM的過程中不可避免的會(huì)出現(xiàn)某些故障或失誤,如TPM被拔出、TPM芯片燒毀等,現(xiàn)有的TPM1.2規(guī)范并沒有考慮這些問題。一旦出現(xiàn)這些情況,系統(tǒng)就不能正常啟動(dòng)。TPM使用者就無法恢復(fù)出保存在TPM中的秘密信息以及用這些秘密信息加密的硬盤數(shù)據(jù),導(dǎo)致現(xiàn)有TPM的使用嚴(yán)重妨礙了易用性的原則。
針對(duì)這種情況,文獻(xiàn)[1]提出了一種基于硬件的解決方案,即通過在現(xiàn)有的TPM芯片的結(jié)構(gòu)基礎(chǔ)上,增設(shè)專用信息I/O接口模塊替代原有的PP引腳。其優(yōu)點(diǎn)是實(shí)現(xiàn)可信平臺(tái)模塊內(nèi)部信息的內(nèi)置,備份與恢復(fù),不足是需要改變現(xiàn)有的TPM芯片的結(jié)構(gòu),不符合兼容性的原則。文獻(xiàn)[2]提出了一種借鑒太行安全BIOS可信體系結(jié)構(gòu)與實(shí)現(xiàn)方案,其優(yōu)點(diǎn)是能夠保障BIOS安全,但是并未考慮TPM芯片發(fā)生故障的情況。
在借鑒上述研究成果的基礎(chǔ)上,提出了一種新的TPM增強(qiáng)應(yīng)用方案——在無需改變現(xiàn)有TPM結(jié)構(gòu)的情況下,當(dāng)TPM故障時(shí),可以使TPM進(jìn)入功能禁用狀態(tài),不進(jìn)行度量操作,計(jì)算機(jī)進(jìn)入非可信工作模式;在啟動(dòng)過程中,利用USB KEY,實(shí)現(xiàn)在BIOS層的身份認(rèn)證;利用保存在USB KEY里的相關(guān)密鑰,恢復(fù)用戶的一些重要信息。
文獻(xiàn)[2]以構(gòu)建可信計(jì)算終端為出發(fā)點(diǎn),通過分析可信BIOS的安全需求,提出太行安全BIOS可信體系結(jié)構(gòu),如圖1所示。
圖1 太行安全BIOS體系結(jié)構(gòu)Fig.1 Structure of Taihang secure BIOS
TPM正常時(shí),太行安全BIOS體系結(jié)構(gòu)可以保障BIOS安全,但是一旦TPM發(fā)生故障,如TPM燒毀或者攻擊者破壞TPM芯片,芯片中的密鑰都會(huì)失效,從而失去使用這些密鑰加密的所有數(shù)據(jù),給用戶造成巨大的損失?;诖?,提出了基于USB KEY和BIOS的TPM故障解決方案,本方案的系統(tǒng)設(shè)計(jì)開發(fā)主要分為以下3個(gè)部分:禁用TPM模塊、訪問控制模塊、可信備份模塊。
TPM通過LPC(Low Pin Count)接口同主板的南橋芯片組連接。根據(jù)TCG規(guī)范,平臺(tái)加電或重啟時(shí),可以由LRESET#來觸發(fā)TPM-Init命令進(jìn)行TPM初始化操作。初始化階段,要讀取 TPM芯片的 VID(Vendor ID)和 DID(Device ID),確定主板上是否存在TPM,以決定運(yùn)行過程中是否使用TPM進(jìn)行可信測(cè)量。若檢測(cè)到TPM存在,則向TPM發(fā)出TPM_Startup(ST_CLEAR)和 TPM_Continue Self-Test命令使TPM進(jìn)入完全操作狀態(tài),使TPM可用于后續(xù)的可信測(cè)量過程,狀態(tài)關(guān)系如圖2所示[3-5]。
圖2 TPM狀態(tài)圖Fig.2 TPM state diagram
TPM初始化階段,會(huì)根據(jù)TPM的狀態(tài)返回相應(yīng)的值,并保存在DL寄存器中。如果返回值為03h,即TPM-No-Response,說明TPM發(fā)生故障[6]。文中采取的方案是:在系統(tǒng)讀取DL寄存器中返回值時(shí)做一個(gè)判斷,如果返回值=03H,則調(diào)用禁用TPM模塊,使TPM進(jìn)入禁用狀態(tài),不進(jìn)行度量操作,計(jì)算機(jī)進(jìn)入非可信工作模式,確保系統(tǒng)能正常啟動(dòng)。如果返回值不等于03H,則進(jìn)入可信工作模式。
禁用TPM模塊程序框架如下:
TPM故障時(shí),為了保證系統(tǒng)安全,必須對(duì)系統(tǒng)的訪問進(jìn)行控制。文中采取USB KEY結(jié)合訪問控制模塊來實(shí)現(xiàn)對(duì)用戶的訪問控制。用戶可以使用PIN碼來保護(hù)自己的USB KEY不被他人使用,該碼是可以修改的。如果輸入3次PIN碼錯(cuò)誤,USB KEY便會(huì)自動(dòng)鎖上,并自動(dòng)關(guān)閉[7]。
BIOS中有一個(gè)模塊ISA(Industrial Standard Architecture)模塊來源于ISA協(xié)議,由于ISA協(xié)議是屬于早期的協(xié)議,內(nèi)容相對(duì)簡(jiǎn)單,BIOS對(duì)ISA模塊的驗(yàn)證也較為簡(jiǎn)單,我們可以將程序做成ISA模塊掛到BIOS中,這樣BIOS啟動(dòng)時(shí),訪問控制模塊就會(huì)啟動(dòng),而且是先于操作系統(tǒng)之前運(yùn)行。訪問控制模塊需要UFI(USB Floppy Interface)驅(qū)動(dòng)的支持才可以對(duì)USB KEY進(jìn)行訪問,而ISA模塊在UFI驅(qū)動(dòng)之前加載,為了解決這個(gè)問題采用掛鉤19H中斷的方法。INT 19 h中斷是BIOS程序執(zhí)行的最后一條指令,之后將執(zhí)行操作系統(tǒng)的代碼。在ISA模塊的程序運(yùn)行時(shí),將自己的中斷服務(wù)程序掛鉤到INT 19 h中斷上,當(dāng)BIOS代碼執(zhí)行完之后,調(diào)用INT 19 h中斷,就會(huì)執(zhí)行訪問控制模塊的程序,當(dāng)訪問控制程序執(zhí)行完之后,恢復(fù)INT 19h中斷向量的內(nèi)容就可以啟動(dòng)操作系統(tǒng)。
TCG的密鑰體系結(jié)構(gòu)保證可以從各種不同的災(zāi)難場(chǎng)景中恢復(fù)。可遷移密鑰鏈在設(shè)計(jì)時(shí)允許遷移一個(gè)密鑰,即平臺(tái)可遷移密鑰,并將它之下的所有密鑰帶往一個(gè)新的設(shè)備中[6]。即使計(jì)算平臺(tái)改變,個(gè)體之間的報(bào)文消息交換仍能進(jìn)行。本論文使用可信USB KEY來存儲(chǔ)備份的密鑰信息。系統(tǒng)正常運(yùn)行時(shí),把可遷移密鑰塊加載到TPM中,TPM解密可遷移密鑰塊得到可遷移密鑰,并把平臺(tái)可遷移密鑰傳送給USB KEY。當(dāng)TPM發(fā)生故障時(shí),把備份可遷移密鑰的USB KEY連接到一個(gè)包含TPM芯片的新系統(tǒng)中,新系統(tǒng)在通過身份認(rèn)證得到可遷移密鑰后,就可以使用原系統(tǒng)上的可遷移密鑰來解密用戶需要的數(shù)據(jù)了。
結(jié)合文獻(xiàn)[2]以及第1節(jié)的功能模塊描述,得到如圖4所示的兼容TPM故障的BIOS體系結(jié)構(gòu)。
圖3 TCG密鑰體系結(jié)構(gòu)Fig.3 Structure of TCG secret key
圖4 兼容TPM故障的BIOS體系結(jié)構(gòu)Fig.4 BIOS structure of compatible with the fault of TPM
系統(tǒng)加電后,先加載平臺(tái)初始化模塊,完成CPU、芯片組、主板、內(nèi)存、堆棧的初始化工作,建立后續(xù)BIOS程序最小化運(yùn)行環(huán)境;然后加載可信硬件驅(qū)動(dòng)模塊初始化可信硬件設(shè)備。在初始化TPM時(shí),如果TPM正常,CRTM執(zhí)行完后會(huì)對(duì)N-CRTM的調(diào)度引擎進(jìn)行可信測(cè)量。測(cè)量成功則執(zhí)行調(diào)度引擎,測(cè)量失敗說明加載代碼不可信(遭到修改或破壞、或來源不可信),則CRTM會(huì)啟動(dòng)可信恢復(fù)引擎要求用戶對(duì)BIOS系統(tǒng)進(jìn)行可信恢復(fù)。調(diào)度引擎加載后續(xù)的N-CRTM的其他模塊時(shí),需調(diào)用CRTM提供的可信測(cè)量引擎提供的加解密協(xié)議對(duì)其進(jìn)行可信測(cè)量。測(cè)量成功則執(zhí)行下一個(gè)模塊,否則調(diào)用CRTM的可信恢復(fù)引擎作可信恢復(fù)。可信BIOS執(zhí)行的最后一個(gè)階段是由可信BIOS引導(dǎo)模塊對(duì)IPL進(jìn)行可信測(cè)量,成功后進(jìn)入操作系統(tǒng)引導(dǎo)階段。
若TPM發(fā)生故障,即初始化時(shí)返回狀態(tài)值03h,則加載禁用TPM模塊,使TPM處于功能禁用狀態(tài),隨后跳轉(zhuǎn)執(zhí)行N-CRTM。當(dāng)系統(tǒng)調(diào)用INT 19h時(shí),系統(tǒng)會(huì)自動(dòng)加載訪問控制模塊進(jìn)行訪問控制,成功后進(jìn)入操作系統(tǒng)引導(dǎo)階段,否則系統(tǒng)強(qiáng)制關(guān)機(jī)。
由此繪制出整個(gè)方案的流程圖,如圖5所示。
圖5 兼容TPM故障的BIOS系統(tǒng)開機(jī)流程圖Fig.5 Flow chart of BIOS compatible with the fault of TPM’s system
目前TPM芯片廠商都提供密鑰備份恢復(fù)機(jī)制,在初始化TPM時(shí),可以選擇備份TPM密鑰及證書信息到USB KEY中,不需要對(duì)目前的TPM結(jié)構(gòu)做出改變;TPM故障時(shí),在太行安全BIOS結(jié)構(gòu)基礎(chǔ)上不需要做較大的改變,只需要在BIOS執(zhí)行可信硬件驅(qū)動(dòng)模塊時(shí),加載一個(gè)可執(zhí)行模塊禁用TPM,并加入長(zhǎng)跳轉(zhuǎn)指令,跳轉(zhuǎn)到平臺(tái)驅(qū)動(dòng)模塊;再在ISA模塊上掛鉤訪問控制模塊即可。目前,不少主板廠商已經(jīng)開發(fā)出在Windows下升級(jí)BIOS的工具,簡(jiǎn)單易用。刷新BIOS前,閱讀主板說明書,對(duì)主板BIOS的提供商和版本有所了解,再到主板廠商的網(wǎng)站上進(jìn)行刷新軟件的下載,然后把可執(zhí)行模塊刷到BIOS中即可。
在BIOS可信驗(yàn)證過程中需要運(yùn)行散列函數(shù)SHA.1。根據(jù)文獻(xiàn)[8]的計(jì)算,在1 GHz Pentium機(jī)器上用SHA-1計(jì)算一個(gè)1MB文件的摘要值大約需要所以總的時(shí)間開銷為13 ms。在計(jì)算機(jī)正常啟動(dòng)過程中需要驗(yàn)證的代碼包括BIOS的平臺(tái)初始化模塊,可信硬件驅(qū)動(dòng)模塊,可信測(cè)量模塊等,這些代碼的總量不會(huì)超過10 MB,按照1 MB文件的摘要值大約需要13 ms來計(jì)算,驗(yàn)證這些代碼的時(shí)間大概為0.13 s;而不做可信測(cè)量的BIOS其啟動(dòng)時(shí)間一般在十幾秒到幾十秒之間 (跟實(shí)際加載和測(cè)試的設(shè)備數(shù)量有關(guān)),關(guān)閉可信測(cè)量的啟動(dòng)過程大約為29 s。可見可信測(cè)量對(duì)BIOS的啟動(dòng)速度的影響幾乎可以忽略不計(jì)[2]。
TPM故障時(shí),計(jì)算機(jī)節(jié)省了做可信驗(yàn)證的時(shí)間,增加了在USB KEY中運(yùn)行解密的時(shí)間,在USB KEY中運(yùn)行一次解密的時(shí)間將近200 ms,另外還需要運(yùn)行一個(gè)可執(zhí)行模塊、訪問控制模塊,由于模塊大小不會(huì)超過1 MB,在1 GHz Pentium機(jī)器上運(yùn)行所消耗的時(shí)間不超過1 ms。TPM故障時(shí),本方案加載訪問控制模塊實(shí)現(xiàn)BIOS層的訪問控制,因此在安全強(qiáng)度要求不是較高的情況下,本方案能達(dá)到很高的時(shí)間效率。
另外,目前有很多工具可以用來擴(kuò)展BIOS空間,例如:生成空白的臨時(shí)文件,然后將空白的臨時(shí)文件插入到原始BIOS文件的剩余空間中,這樣我們就可以得到一個(gè)剩余空間較大的BIOS文件。綜上所述,本方案是可行的。
文中提出的TPM故障下基于USB KEY和改進(jìn)BIOS的安全方案,在TPM故障下,能通過在現(xiàn)有BIOS中加入禁用TPM模塊,使系統(tǒng)禁用TPM進(jìn)行可信測(cè)量,并結(jié)合USB KEY進(jìn)行訪問控制,保證系統(tǒng)正常安全的運(yùn)行。同時(shí)利用存儲(chǔ)在USB KEY中密鑰進(jìn)行數(shù)據(jù)解密,恢復(fù)用戶的一些秘密信息,提高了平臺(tái)的易用性。后期的工作是在文獻(xiàn)[6]、[7]的基礎(chǔ)上,繼續(xù)完善禁用TPM模塊,訪問控制模塊和可信備份模塊。
[1]李鳳華,馬建峰.可信平臺(tái)模塊的體系結(jié)構(gòu)及其提供服務(wù)的方法:中國(guó),200710199230.5[P].2007-12-14.
[2]周振柳,李銘,許榕生,等.太行安全BIOS可信體系結(jié)構(gòu)與實(shí)現(xiàn)研究[J].計(jì)算機(jī)工程與應(yīng)用,2008,44(18):76-79.ZHOU Zhen-liu, LI Ming, XU Rong-sheng, et al.Research on trusted architecture and implementation of Taihang secure BIOS[J].Computer Engineering and Applications,2008,44(18):76-79.
[3]TCG.TPM Main Part1 Design Principles Specification Version1.2[EB/OL].(2006-10)https://www.Trustedcomputing group.org.
[4]TCG.TPM Main Part 2 TPM Structures Specification Version1.2[EB/OL].(2006-10)https://www.Trustedcomputing group.org.
[5]TCG.TPM Main Part 3 Commands Specification Version1.2[EB/OL].(2006-10)https://www.Trustedcomputing group.org.
[6]TCG.TCG PC Specific Implementation Specification Version1.1[EB/OL].(2003-08)https://www.Trustedcomputing group.org.
[7]譚良,周明天.一種新的用戶登錄可信認(rèn)證方案的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用, 2007(6):1070-1072.TAN Liang,ZHOU Ming-tian.Design and implementation of a trusted log in authentication project based on the trusted platform module[J].Computer Applications,2007,6:1070-1072.
[8]方艷湘,黃濤.Linux可信啟動(dòng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2006(6):61-63.FANG Yan-xiang,HUANG Tao.Design and implementation of trusted startup process for linux[J].Computer Engineering,2006(6):61-63.