魯青遠(yuǎn),郝福珍,牛 峰
(華北計(jì)算技術(shù)研究所,北京100083)
可信計(jì)算技術(shù)從計(jì)算機(jī)體系結(jié)構(gòu)、固件和操作系統(tǒng)等方面采取綜合措施,意圖從根本上提高信息系統(tǒng)的安全性??尚庞?jì)算的基本思想是:首先在計(jì)算機(jī)系統(tǒng)中建立一個(gè)信任根,再建立一條信任鏈,從信任根開始,經(jīng)過硬件平臺(tái)和操作系統(tǒng),再到應(yīng)用,一級(jí)測量一級(jí),一級(jí)信任一級(jí),從而把這種信任擴(kuò)展到整個(gè)計(jì)算機(jī)系統(tǒng)[1]。
信任根和信任鏈?zhǔn)强尚庞?jì)算機(jī)系統(tǒng)的基本組成部分。信任根是用來提供密碼運(yùn)算、安全存儲(chǔ)、可信報(bào)告等服務(wù)的芯片,符合可信計(jì)算組織(trusted computing group,TCG)規(guī)約的信任根稱為可信平臺(tái)模塊(trust platform module,TPM);符合國家密碼管理局發(fā)布的 《可信計(jì)算密碼支撐平臺(tái)功能和接口規(guī)范》的信任根稱為可信計(jì)算模塊(trusted computing module,TCM)。信任鏈?zhǔn)切湃蔚膫鬟f方式,把信任從信任源點(diǎn)傳遞到整個(gè)計(jì)算機(jī)系統(tǒng)。在可信計(jì)算組織的說明中,信任源點(diǎn)稱為核心測量根(core root of trust for measurement,CRTM);信任鏈?zhǔn)?CRTM->BIOS->OS Loader->OS的一個(gè)串行鏈[2]。
一般有兩種實(shí)現(xiàn)CRTM的方案,一種是在信任根中實(shí)現(xiàn)CRTM功能,另一種是在BIOS中實(shí)現(xiàn)CRTM功能。第一種方案將信任根作為系統(tǒng)加電后啟動(dòng)的起始點(diǎn),所有的可信認(rèn)證工作都在信任根中實(shí)現(xiàn),該方案需要對(duì)現(xiàn)行計(jì)算機(jī)體系結(jié)構(gòu)進(jìn)行較大改動(dòng)。武漢瑞達(dá)推出的采用星型信任鏈模型的可信計(jì)算機(jī)采用的就是這種方案。第二種方案不必修改現(xiàn)行計(jì)算機(jī)體系結(jié)構(gòu),但需要在硬件平臺(tái)上部署TCM芯片,且BIOS中要有可信認(rèn)證模塊。國內(nèi)兩大TCM芯片供應(yīng)商——國民技術(shù)股份有限公司和北京同方微電子有限公司采用的便是第二種解決方案。
兩種方案都要求在計(jì)算機(jī)硬件上部署信任根芯片,但目前在用的大量桌面計(jì)算機(jī),主板上并沒有配備TCM芯片。本文提出基于擴(kuò)展ROM的信任根設(shè)備RTD(root of trust device),可以在保護(hù)用戶現(xiàn)有投資的基礎(chǔ)上,以簡便、快捷的方式為這類計(jì)算平臺(tái)提供可信安全能力。該方案在計(jì)算機(jī)上部署一塊集成TCM與EEPROM的PCI接口卡,把該EEPROM當(dāng)作PCI擴(kuò)展ROM,在其中實(shí)現(xiàn)對(duì)BIOS和OS Loader的完整性認(rèn)證功能。
擴(kuò)展ROM代碼可以認(rèn)為是BIOS代碼的一個(gè)擴(kuò)展,因此RTD的CRTM仍然是BIOS的一個(gè)組成部分,所以該解決方案屬于第二種方案的一種實(shí)現(xiàn)。
RTD由硬件和軟件兩部分組成。硬件部分是一塊PCI卡,如圖1所示,主要包括TCM、EEPROM、PCI橋、CPLD等芯片。關(guān)鍵信息產(chǎn)品部件的國產(chǎn)化對(duì)于國家信息安全至關(guān)重要,故信任根設(shè)備采用了國民技術(shù)公司的TCM芯片SSX44。EEPROM直接連接在PLX公司的PCI橋芯片9030上。因?yàn)門CM芯片的外部接口為LPC,所以通過CPLD中的膠水邏輯實(shí)現(xiàn)與PCI橋接芯片的互連。
圖1 信任根設(shè)備邏輯框架
PCI總線在計(jì)算機(jī)中應(yīng)用廣泛,這使得信任根設(shè)備能夠方便地部署,而且PCI的擴(kuò)展ROM機(jī)制為軟件部分的實(shí)現(xiàn)提供了可能。
軟件部分燒寫在EEPROM中,作為BIOS的擴(kuò)展ROM代碼,實(shí)現(xiàn)對(duì)BIOS和OS Loader的完整性認(rèn)證。
以下我們將就軟件部分的設(shè)計(jì)和具體實(shí)現(xiàn)展開討論。
RTD的工作流程如圖2所示。系統(tǒng)加電,在BIOS的POST階段掃描PCI總線,檢測到擴(kuò)展ROM后,會(huì)復(fù)制擴(kuò)展ROM中的映像文件到系統(tǒng)內(nèi)存,執(zhí)行映像文件的初始化模塊,掛鉤INT19中斷。在POST階段的最后,當(dāng)BIOS調(diào)用INT19中斷啟動(dòng)OS Loader時(shí),可信驗(yàn)證模塊被執(zhí)行。它通過調(diào)用可信服務(wù)模塊,驗(yàn)證BIOS和OS Loader的完整性,驗(yàn)證完畢并進(jìn)行相應(yīng)處理后,再將系統(tǒng)控制權(quán)重新交BIOS。BIOS啟動(dòng) OS Loader,在 OS Loader中驗(yàn)證 OS Kernel的完整性,從而構(gòu)建出計(jì)算機(jī)啟動(dòng)階段的信任鏈。
圖2 RTD工作流程
RTD的軟件部分固化在EEPROM中,它主要由3個(gè)部分組成,初始化模塊、可信驗(yàn)證模塊及TCM可信服務(wù)。
1.2.1 初始化模塊
初始化模塊是一段按照PCI協(xié)議和BIOS啟動(dòng)規(guī)范實(shí)現(xiàn)的擴(kuò)展ROM代碼。它要保證計(jì)算機(jī)啟動(dòng)過程中能夠被正常加載、執(zhí)行。
這部分要考慮兩個(gè)問題,首先是兼容性問題,不同廠商不同版本BIOS的啟動(dòng)過程不盡相同,初始化模塊應(yīng)盡可能支持更多的BIOS;另外進(jìn)行可信驗(yàn)證時(shí)需要訪問硬盤以獲得所需數(shù)據(jù)對(duì)象(比如OS Loader等),要保證此時(shí)BIOS提供的相關(guān)中斷服務(wù)已準(zhǔn)備好。
1.2.2 可信驗(yàn)證模塊
可信驗(yàn)證模塊的主要功能是實(shí)現(xiàn)對(duì)BIOS和OS Loader的完整性驗(yàn)證,構(gòu)建系統(tǒng)信任鏈。完整性驗(yàn)證的過程是調(diào)用TCM提供的服務(wù)計(jì)算BIOS和OS Loader的哈希值,并與預(yù)先存儲(chǔ)的基準(zhǔn)值對(duì)比。如果一致,則認(rèn)為完整性未遭破壞,繼續(xù)啟動(dòng)系統(tǒng);不一致,則提醒用戶。
該模塊的關(guān)鍵是能正確獲得BIOS和OS Loader的代碼文件。
1.2.3 TCM 可信服務(wù)
TCM可信服務(wù)是可信驗(yàn)證模塊與信任根設(shè)備通信的接口。通過該接口,可信驗(yàn)證模塊將待驗(yàn)證數(shù)據(jù)提交給信任根設(shè)備,并接收由信任根設(shè)備返回的哈希值。由于TCM芯片自身性能的限制,當(dāng)數(shù)據(jù)量較大時(shí),使用TCM芯片計(jì)算校驗(yàn)值速度很慢,大大增加系統(tǒng)啟動(dòng)時(shí)間。該模塊采取軟硬件相結(jié)合的方式加快校驗(yàn)速度,從而縮短系統(tǒng)引導(dǎo)時(shí)間。
初始化模塊由匯編語言實(shí)現(xiàn),運(yùn)行在保護(hù)模式;可信驗(yàn)證模塊和TCM可信服務(wù)由C語言實(shí)現(xiàn)。
2.1.1 擴(kuò)展ROM的映像文件格式
PCI局部總線協(xié)議提供了一種機(jī)制,供掛載在PCI總線上的設(shè)備嵌入特定的初始化代碼,這部分代碼以映像文件形式存儲(chǔ)在擴(kuò)展ROM(expansion ROM)中。
擴(kuò)展ROM中的映像文件通常需要包含PCI擴(kuò)展ROM頭標(biāo)、PCI數(shù)據(jù)結(jié)構(gòu)和文件映像,如圖3所示。擴(kuò)展ROM頭標(biāo)為位于整個(gè)映像文件開始處的兩個(gè)字節(jié),作為判斷是否為ROM文件的標(biāo)識(shí),必須是0xAA55[3]。
圖3 擴(kuò)展ROM映像文件格式
不同廠商不同版本BIOS的實(shí)現(xiàn)不盡相同,比如出于安全方面的考慮,可能會(huì)禁止執(zhí)行某些設(shè)備的擴(kuò)展ROM映像文件。為了增強(qiáng)RTD的兼容性,需要在擴(kuò)展ROM的頭部添加PNP擴(kuò)展頭。包含PNP擴(kuò)展頭的擴(kuò)展ROM稱為PNP擴(kuò)展ROM。帶有PNP擴(kuò)展ROM的設(shè)備可以是PCI設(shè)備(稱為PCI/PNP擴(kuò)展ROM)或者ISA設(shè)備,這種設(shè)備通常被稱為PNP卡[4]。PCI/PNP擴(kuò)展ROM頭部格式如表1所示。
2.1.2 擴(kuò)展ROM代碼的加載與執(zhí)行
BIOS認(rèn)為 PNP卡是一個(gè)IPL(initial program load)設(shè)備,IPL設(shè)備即操作系統(tǒng)的載體設(shè)備,比如floppy drives、CD-ROM drives、hard drives等,一旦檢測到IPL設(shè)備,會(huì)立即執(zhí)行其擴(kuò)展ROM中的映像文件[4]。檢測和初始化IPL設(shè)備是BIOS POST階段的重要任務(wù)。
計(jì)算機(jī)系統(tǒng)加電后,首先執(zhí)行BIOS的加電自檢代碼(power on self test,POST),在此過程中,BIOS遍歷PCI總線上的設(shè)備,如果這個(gè)設(shè)備的配置空間中包含擴(kuò)展ROM基地址寄存器,則BIOS檢查擴(kuò)展ROM的頭兩個(gè)字節(jié)是否是0xAA55,如果是,則認(rèn)為有擴(kuò)展ROM存在。BIOS在擴(kuò)展ROM地址空間中通過PCI數(shù)據(jù)結(jié)構(gòu)中的code Type域查找合適的映像文件(可能存在多種CPU架構(gòu)的映像),然后把擴(kuò)展ROM中找到的映像文件拷貝到系統(tǒng)內(nèi)存,并執(zhí)行。
表1 PCI/PNP擴(kuò)展ROM頭部格式
2.1.3 擴(kuò)展ROM對(duì)磁盤的訪問
RTD在驗(yàn)證OS Loader的完整性時(shí),需要訪問磁盤以獲得OS Loader文件。通常,系統(tǒng)底層利用INT 13中斷服務(wù)訪問磁盤。然而,BIOS在POST過程中,當(dāng)PCI/PNP擴(kuò)展ROM初始化映像文件執(zhí)行時(shí),INT 13中斷服務(wù)有可能尚未準(zhǔn)備就緒,故這時(shí)候不宜通過INT13操作磁盤。
RTD采用掛鉤INT19中斷的方式來解決這一問題。當(dāng)BIOS完成必要的初始化工作之后,會(huì)調(diào)用INT 19中斷來啟動(dòng)OS Loader引導(dǎo)操作系統(tǒng)。通過掛鉤INT 19中斷,能在BIOS調(diào)用該中斷時(shí),第二次獲得系統(tǒng)控制權(quán),而此時(shí)所有中斷服務(wù)安裝完畢,可以使用INT 13中斷服務(wù)方便的訪問磁盤。
綜上所述,RTD的執(zhí)行流程如下:BIOS的POST階段檢測到PCI/PNP擴(kuò)展ROM頭標(biāo),執(zhí)行初始化模塊,RTD第一次獲得系統(tǒng)控制權(quán),掛鉤INT 19中斷,然后把系統(tǒng)控制權(quán)轉(zhuǎn)交還給BIOS;BIOS完成自檢工作,調(diào)用INT19中斷,RTD再次獲得系統(tǒng)控制權(quán),它將可信驗(yàn)證模塊從ROM拷貝到內(nèi)存,并跳轉(zhuǎn)到可信驗(yàn)證模塊起始處,開始對(duì)BIOS和OS Loader進(jìn)行完整性驗(yàn)證,驗(yàn)證完畢后恢復(fù)中斷向量表中INT 19中斷的原始地址,并調(diào)用INT 19中斷繼續(xù)系統(tǒng)引導(dǎo)。
可信驗(yàn)證模塊分別對(duì)BIOS和OS Loader進(jìn)行完整性驗(yàn)證。
2.2.1 BIOS完整性驗(yàn)證
BIOS完整性驗(yàn)證的目標(biāo)數(shù)據(jù),包括BIOS的代碼文件和配置信息。在x86體系架構(gòu)中,BIOS代碼文件存儲(chǔ)在EEPROM或Flash ROM中,稱為BIOS ROM。除非重新刷新BIOS的代碼文件,否則代碼文件一般不會(huì)改變,也不應(yīng)該改變。BIOS配置信息保存在CMOS中,主板為其提供電池,以保證存放在里面的數(shù)據(jù)不丟失。CMOS是主板上的一個(gè)RAM,CMOS RAM中存放一些基本系統(tǒng)數(shù)據(jù),如實(shí)時(shí)時(shí)鐘和系統(tǒng)配置信息,這些配置信息對(duì)于系統(tǒng)安全性至關(guān)重要,因此也應(yīng)納入驗(yàn)證范圍。
BIOS ROM直接與CPU相連,CPU能夠直接從它獲得代碼和數(shù)據(jù)。在地址空間分配上,DRAM被編址在低位,從0x0開始的CPU地址空間。而BIOS ROM通常被編址在CPU地址空間的最高部分,這是因?yàn)榧与姾驝PU執(zhí)行的第一條指令總是在高位,在有32位地址的系統(tǒng)中,物理地址為0xFFFFFFF0;在有36位地址的系統(tǒng)中,為0xFFFFFFFF0[5]。系統(tǒng)加電后,先執(zhí)行BIOS ROM中的初始化代碼,此時(shí)BIOS處于實(shí)模式,CPU通過設(shè)置CS段寄存器,使BIOS能正常在高位ROM空間運(yùn)行。進(jìn)行必要的初始化后,BIOS將功能代碼解壓到1MB以內(nèi)的DRAM中,然后進(jìn)行跳轉(zhuǎn),CS寄存器清0,運(yùn)行時(shí)存儲(chǔ)空間轉(zhuǎn)到DRAM中[6]。
CMOS大小通常為128字節(jié)或256字節(jié),其中每個(gè)字節(jié)保存的數(shù)據(jù)有相應(yīng)的約定,可以根據(jù)約定排除不需要進(jìn)行完整性校驗(yàn)的部分,比如時(shí)鐘和重啟標(biāo)志位。時(shí)鐘每次開機(jī)都不一樣,如果將時(shí)鐘也納入完整性校驗(yàn)范圍,則每次啟動(dòng)都會(huì)校驗(yàn)失敗。重啟標(biāo)志位會(huì)導(dǎo)致每次重啟校驗(yàn)失敗,不能正確反映系統(tǒng)的完整性。通過訪問70h~73h這4個(gè)I/O端口可以訪問CMOS RAM。
2.2.2 OS Loader完整性驗(yàn)證
RTD支持的OS Loader為開源引導(dǎo)器GRUB。選用開放源代碼的引導(dǎo)器,便于添加對(duì)OS Kernel的可信驗(yàn)證功能。GRUB既能引導(dǎo)Windows系統(tǒng),又能引導(dǎo)Linux系統(tǒng),便于OS Loader對(duì)這兩種OS Kernel的可信驗(yàn)證與加載。OS Loader一般存儲(chǔ)在磁盤上,可信驗(yàn)證模塊根據(jù)GRUB在磁盤上的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu),通過調(diào)用BIOS的INT13中斷訪問磁盤,并獲得目標(biāo)文件進(jìn)行驗(yàn)證。
TCM可信服務(wù)包括TCM驅(qū)動(dòng)和可信服務(wù)兩部分。TCM驅(qū)動(dòng)負(fù)責(zé)與TCM芯片通信,向TCM發(fā)送命令和接受數(shù)據(jù);可信服務(wù)負(fù)責(zé)與上層模塊進(jìn)行通信,如TCM啟動(dòng)、自檢、哈希值計(jì)算相關(guān)等接口。
RTD采用國民技術(shù)的TCM芯片,該芯片采用兼容標(biāo)準(zhǔn)8051指令集的8位CPU內(nèi)核,計(jì)算能力有限。在不計(jì)算傳輸消耗的情況下,采用SM3算法計(jì)算哈希值的速率是1Mbps左右,也就是說計(jì)算1M字節(jié)的數(shù)據(jù)理論上至少需要8s,啟動(dòng)時(shí)間耗時(shí)較長。
RTD通過軟硬件相結(jié)合的二級(jí)計(jì)算方式可以有效提高哈希值的計(jì)算效率,計(jì)算過程如圖4所示。進(jìn)行完整性驗(yàn)證時(shí),首先將需要驗(yàn)證的數(shù)據(jù)輸入到軟件實(shí)現(xiàn)的SHA1算法,得到20字節(jié)的校驗(yàn)值,接著將該校驗(yàn)值再送到TCM芯片中利用SM3硬算法進(jìn)行計(jì)算,得到最終的32字節(jié)校驗(yàn)值。
另外,安全性方面,由于校驗(yàn)值的計(jì)算是在固件層,運(yùn)行環(huán)境相對(duì)簡單,不會(huì)出現(xiàn)軟件校驗(yàn)時(shí)的計(jì)算過程被打斷,中間值被攔截篡改等情況,并不會(huì)給系統(tǒng)帶來新的安全隱患。
圖4 二級(jí)校驗(yàn)機(jī)制
RTD的測試主要有兩個(gè)方面,功能測試和兼容性測試。
首先為功能測試,RTD在系統(tǒng)啟動(dòng)過程中能正常的構(gòu)建出系統(tǒng)啟動(dòng)過程的信任鏈,完成BIOS自驗(yàn)證、BIOS對(duì)OS Loader的完整性驗(yàn)證以及OS Loader對(duì)OS Kernel的完整性驗(yàn)證,報(bào)告驗(yàn)證結(jié)果,如果驗(yàn)證失敗,則提醒用戶,用戶選擇是否啟動(dòng)系統(tǒng);驗(yàn)證成功正常啟動(dòng)系統(tǒng),達(dá)到預(yù)期目標(biāo)。在整個(gè)系統(tǒng)啟動(dòng)過程中,增加的時(shí)間消耗在2s以內(nèi)。
兼容性測試,即測試RTD對(duì)于不同廠商不同版本BIOS的兼容性。測試選用了品牌電腦 HP Compaq dc7700(BIOS顯示為786E1V01.10)、PCI總線版本為2.0和BIOS為 Award Bios V6.0、PCI總線版本為3.0的計(jì)算機(jī)中分別進(jìn)行了部署和測試,能夠被正常加載和啟動(dòng),并完成預(yù)期功能。
RTD將可信模塊芯片與擴(kuò)展ROM部署在同一塊PCI卡上,以BIOS插件的形式,在擴(kuò)展ROM中完成對(duì)BIOS和OS Loader的完整性驗(yàn)證。這種實(shí)現(xiàn)方式在硬件和軟件方面進(jìn)行少量的變動(dòng),即可在一臺(tái)無任何可信軟硬件基礎(chǔ)的計(jì)算機(jī)上部署可信模塊芯片,并且構(gòu)建出計(jì)算機(jī)啟動(dòng)階段的信任鏈,為將普通計(jì)算機(jī)改造為可信計(jì)算機(jī)提供了新的技術(shù)途徑。
事實(shí)上,RTD采用的硬件部分既可以是PCI卡,也可以是PCIe卡。而且,RTD的軟件部分也能夠以BIOS模塊的形式刷新到BIOS中,從而省去PCI擴(kuò)展ROM。新一代BIOS規(guī)范——統(tǒng)一可擴(kuò)展固件接口UEFI(unified extensible firmware interface)發(fā)展迅猛,基于 UEFI的可信計(jì)算技術(shù)和RTD值得進(jìn)一步深入研究。
[1]ZHANG Huanguo,HE Yanxiang,ZHAO Bo,et al.Research and development of the trusted computing of China [J].Communications of the CCF,2010,6(9):8-14(in Chinese).[張煥國,何炎祥,趙波,等.我國可信計(jì)算研究與發(fā)展 [J].中國計(jì)算機(jī)學(xué)會(huì)通訊,2010,6(9):8-14.]
[2]WANG Jiangshao,YU Zong,LI Guang.Study of trusted chain technology of computing trusted [J].Computer Engineering &Design,2005,29(9):2195-2198(in Chinese).[王江少,余綜,李光.可信計(jì)算之信任鏈技術(shù)研究 [J].計(jì)算機(jī)工程與設(shè)計(jì),2005,29(9):2195-2198.]
[3]PCI-SIG.PCI Firmware specification 3.0 [EB/OL]. [2005-06-20].http://www.pcisig.com/specification/conven-ional/pci_firmware/.
[4]Compaq Computer Corp,phoenix Technologies Ltd,Intel Corp.BIOS boot specs [EB/OL].[1996-01-11].http://www.scs.stanford.edu/nyu/04fa/lab/specsbbs101.
[5]Intel Corp.Intel?64and IA-32Architectures software developer’s manual volume 3a[EB/OL].http://www.intel.com/products/processor/manuals/,2011.
[6]CHEN Wenqin.Bios inside [M].Beijing:Tsinghua University Press,2001(in Chinese).[陳文欽.BIOS研發(fā) 技 術(shù) 剖 析[M].北京:清華大學(xué)出版社,2001.]
[7]UEFI.UEFI specification version 2.3.1 [EB/OL].http://www.uefi.org/specs/,2011.
[8]Trusted computing group.TCG.PC client specific TPM interface specification [EB/OL]. [2005-07-11].https://www.trustedcomputinggroup.org/home/.
[9]SUN Dayong.The applied research in the hard disk protective technology based on PCI bus [D].Hefei:Hefei University of Technology,2009(in Chinese). [孫大勇.基于PCI的硬盤保護(hù)技術(shù)的應(yīng)用研究 [D].合肥:合肥工業(yè)大學(xué),2009.]
[10]Intel Corp.Intel?64Architectures X2APIC specification [EB/OL].http://www.Intel.com/product-s/proce ssor/manuals/,2008.
[11]Intel Corp.Intel?64and IA-32architectures software developer’s manual volume 3b [EB/OL].http://www.intel.com/products/processor/manuals/,2011.
[12]Trusted Computing Group.TCG.TCG specification architecture overview version 1.4[EB/OL].https://www.trustedcomputinggroup.org/home/,2007.
[13]Paul.Stoffregen.Understanding FAT32filesystem [EB/OL]. [2009-10-20].Http://www.pjrc.com/tech/8051/ide/fat32.html.
[14]SHEN Changxiang,ZHANG Huanguo.Research and development of the trusted computing [J].Science China,2010,40(2):139-166(in Chinese).[沈昌祥,張煥國.可信計(jì)算的研究與發(fā)展 [J].中國科學(xué),2010,40(2):139-166.]
[15]YIN Yongsheng,HU Yonghua,ZHOU Ganmin.Implementation of PCI expansion ROM mechanism [J].Computer Engineering and Application,2005,41(10):101-103(in Chinese).[尹勇生,胡永華,周干民.PCI擴(kuò)展ROM機(jī)制的實(shí)現(xiàn)方法 [J].計(jì)算機(jī)工程與應(yīng)用,2005,41(10):101-103.]