丁 睿,孔 雷,趙 慧
(中國航天科工集團(tuán)第二研究院706所,北京100854)
自可信計算組織 (trusted computing group,TCG)推出相關(guān)標(biāo)準(zhǔn)以來,以可信平臺模塊 (trusted platform module,TPM)為核心的可信技術(shù)有了很大的發(fā)展[1-3]。我國也在可信計算領(lǐng)域建立起了以可信密碼模塊 (trusted cryptography module,TCM)[4]為核心的自主可信計算標(biāo)準(zhǔn)體系。按照可信規(guī)范構(gòu)建的可信計算基平臺都是將TCM 嵌入在計算機(jī)主板上,提供平臺數(shù)據(jù)保護(hù)、完整性存儲與報告以及身份標(biāo)識等功能。以TCM 作為計算機(jī)平臺的 “可信根”,經(jīng)過信任鏈的傳遞,完成計算機(jī)平臺的啟動,確保整個平臺系統(tǒng)資源的完整性。
將TCM 嵌入在主板上使得為普通計算機(jī)的可信化增加了難度,同時嵌入式的TCM 也無法滿足個人用戶的不同需求。本文設(shè)計的可信計算機(jī)平臺將TCM 與USB3.0控制器相接口,利用USB3.0 接口的易插拔性以及傳輸速度較高的特點,配合可信增強(qiáng)的BIOS來建立可信機(jī)制,從而實現(xiàn)計算機(jī)終端的安全可信。
本文對國產(chǎn)可信平臺的體系結(jié)構(gòu)進(jìn)行修改,如圖1所示。修改后的可信平臺主要由USB3.0接口的密碼模塊、可信BIOS和TCM 服務(wù)模塊(TCM service module,TSM)組成。
在軟件部分,TDD 主要負(fù)責(zé)把上層傳入的字節(jié)流發(fā)送給TCM,再將TCM 處理后的數(shù)據(jù)返回到上層。TDD 運行在內(nèi)核模式下,由于用戶模式不能直接訪問硬件,所以通過TDDL來使用內(nèi)核模式下的驅(qū)動。TDDL 提供了用戶模式的接口,所有的TCM 的訪問都需要該標(biāo)準(zhǔn)接口,同時它還提供用戶模式和內(nèi)核模式的轉(zhuǎn)換。TDDL 提供函數(shù) (如Open、Close、GetStatus)來控制與TDD 的通信,也提供函數(shù)來設(shè)置TCM、TDD 的屬性。TSM 在用戶模式下運行,為應(yīng)用程序調(diào)用TCM 安全保護(hù)功能提供一個面向?qū)ο蟮慕涌?,并向?yīng)用提供對TCM 的同步訪問。同時TSM 還提供所有像密鑰管理這樣簡單有效的功能對有限的TCM 資源進(jìn)行管理。安全應(yīng)用直接調(diào)用TSM 提供的接口并使用TCM提供的可信功能為上層提供安全可信服務(wù)[5]。
圖1 基于USB3.0接口TCM 的可信計算機(jī)結(jié)構(gòu)
在硬件部分,由可信密碼模塊配合增強(qiáng)的可信BIOS創(chuàng)造一個可信環(huán)境。增強(qiáng)的可信BIOS可以檢查系統(tǒng)相關(guān)硬件設(shè)備以及硬盤啟動代碼的完整性,基于USB3.0 的密碼模塊運行在主機(jī)BIOS啟動之后,它提供相關(guān)擴(kuò)展功能,這樣開始對Kernel以及之后的安全應(yīng)用進(jìn)行信任關(guān)系的傳遞,沿著可信鏈進(jìn)行度量,從而擴(kuò)展到整個系統(tǒng),確保系統(tǒng)的安全可信。本文設(shè)計的可信鏈的傳遞過程如圖2所示。
BIOS作為信任根,USB3.0 接口TCM 按照規(guī)則PCR[n]=SHA-1(PCR[n]||被度量的數(shù)據(jù))提供擴(kuò)展PCR的Extend操作,從信任跟開始,每個當(dāng)前運行的組件首先度量接下來運行的組件,若度量結(jié)果滿足要求,則跳轉(zhuǎn)到下一個組件,否則終止可信鏈的建立。由于USB設(shè)備啟動后于BIOS啟動,因此BIOS的可信性必須由自身保證,可以將BIOS的設(shè)置改為不可寫或者在硬件上斷開與寫B(tài)IOS功能相關(guān)的引腳。
圖2 可信鏈傳遞過程
基于USB3.0接口的密碼模塊屬于嵌入式應(yīng)用設(shè)計,結(jié)合USB功能的TCM 更加方便攜帶,每個基于USB3.0接口的TCM 作為用戶的個人設(shè)備,只為該用戶提供相應(yīng)的可信服務(wù),這樣用戶與主機(jī)的關(guān)系也由傳統(tǒng)的一個主機(jī)對應(yīng)多個用戶變?yōu)橐粋€用戶對應(yīng)多個主機(jī)。利用這種USB3.0接口的TCM 可以對通用計算機(jī)進(jìn)行可信化升級。本文設(shè)計的密碼模塊硬件結(jié)構(gòu)框架如圖3所示。模塊主要包括主控模塊國產(chǎn)TCM、USB3.0控制器、安全存儲芯片、身份認(rèn)證及密鑰注入接口。國產(chǎn)TCM 通過擴(kuò)展接口與USB3.0控制器相連接,以USB3.0 標(biāo)準(zhǔn)接口與主機(jī)進(jìn)行通信。模塊內(nèi)部可內(nèi)嵌用戶身份卡,實現(xiàn)用戶身份認(rèn)證。主機(jī)端運行的密碼模塊管理軟件可以用于對用戶的注冊、度量的預(yù)期值導(dǎo)入以及平臺管理維護(hù)等功能。
國產(chǎn)TCM 芯片作為主控芯片,實現(xiàn)可信協(xié)議解析、任務(wù)調(diào)度;TCM 內(nèi)部的算法引擎為相關(guān)密碼運算提供支持;NorFlash提供審計日志和重要數(shù)據(jù)的存儲;噪聲源提供實時噪聲數(shù)據(jù)采樣;通過集成的ISO7816 接口可以將放在TCM 中重要數(shù)據(jù)信息寫到主機(jī)系統(tǒng)中,也可以通過該接口將主機(jī)系統(tǒng)中的重要數(shù)據(jù)存儲到TCM 中。
賽普拉斯CYUSB3012 是新一代的USB3.0 外設(shè)控制器,具有高度的靈活特性,兼容USB2.0 接口。其集成的32位ARM926EJ-S微處理器具有強(qiáng)大的數(shù)據(jù)處理能力[6]。通過配置CYUSB3012 的并行通用可編程接口 (GPIF II)使其與國產(chǎn)TCM 的存儲擴(kuò)展接口相連接,使得TCM 到主機(jī)端的數(shù)據(jù)通道打通。CYUSB3012 芯片提供I2C 連接E2PROM 用來存儲芯片的啟動代碼。CYUSB3012的固件程序?qū)崿F(xiàn)密碼模塊設(shè)備的自舉、與主機(jī)的數(shù)據(jù)傳輸、傳輸保護(hù)、UFI協(xié)議的解析等功能。
本文設(shè)計的密碼模塊使用USB3.0 接口與主機(jī)進(jìn)行通信,使通道的傳輸速率保持在較高的水平,傳輸通道接口的設(shè)計可以分為兩部分:TCM 與CYUSB3012通道的接口設(shè)計 (GPIF II設(shè)計)、USB3.0固件程序設(shè)計。
(1)GPIF II設(shè)計
本文所使用的國產(chǎn)TCM 集成了片外存儲擴(kuò)展控制接口,可支持所有異步SRAM 器件的連接。GPIF II是一個可編程狀態(tài)機(jī),在這里將其作為從設(shè)備運行。采用異步的方式將兩個芯片直接連接,接口框架如圖4所示。GPIF狀態(tài)切換根據(jù)主控的控制輸入信號發(fā)生,控制輸出的信號由GPIF狀態(tài)轉(zhuǎn)換所驅(qū)動[7]。這里采用32 位地址線。兩位地址線A [1:0]來表示存取的線程,當(dāng)A1:A0 為00 時,選中Socket0,即將TCM 中的數(shù)據(jù)寫入到CYUSB3012 芯片中,當(dāng)A1:A0為11時選中Socket1,即將CYUSB3012中的數(shù)據(jù)傳送給TCM。FLAG 標(biāo)志為CYUSB3012反饋給主控的狀態(tài)信號,來顯示正在尋址的當(dāng)前線程的空/滿狀態(tài),SLCS為片選信號,SLWR 為寫使能信號。
圖3 密碼模塊硬件結(jié)構(gòu)
圖4 接口框架
狀態(tài)機(jī)的運行方式由描述符定義。通過GPIF II Designer工具,可以使用狀態(tài)機(jī)入口設(shè)計一個自定義的GPIF II接口,該工具可以自動生成一組關(guān)于包含GPIF II配置信息的頭文件用于集成到CYUSB3012的固件程序中。本文設(shè)計的GPIF II時序仿真如圖5所示。
(2)USB3.0固件程序設(shè)計
USB3.0固件程序的設(shè)計目的是為了配置CYUSB3012芯片,使得CYUSB3012 芯片可處理主機(jī)端發(fā)送的控制命令,完成TCM->CYUSB3012->主機(jī)的高速數(shù)據(jù)傳輸。其中完成DMA 的數(shù)據(jù)通道配置是重點部分。調(diào)用CyFxSlFifoApplnStart()函數(shù)來獲得USB 的接口類型和buffer大小,為了實現(xiàn)雙向的傳輸,需要在P端口和U 端口之間配置兩個DMA 通道,DMA通道的緩沖區(qū)計數(shù)為2,buffer的大小取決于連接的是USB2.0還是USB3.0,兩個DMA 通道分別實現(xiàn)P端口->U 端口和U 端口->P端口之間的數(shù)據(jù)傳輸。下面是配置U 端口->P端口的通道程序的部分代碼:
圖5 接口仿真時序
傳統(tǒng)的可信引導(dǎo)信任鏈構(gòu)建以TCM 為信任跟,從底層硬件出發(fā)建立起B(yǎng)IOS和Bootloader的信任鏈,進(jìn)而為操作系統(tǒng)建立可信的運行環(huán)境。由于本文設(shè)計的可信模塊所使用的USB接口需要在BIOS啟動后才可以使用,同時鑒于硬件和BIOS 的防篡改能力較強(qiáng),所以將BIOS 作為信任根,可信引導(dǎo)信任鏈的關(guān)注點放在了Bootloader這個環(huán)節(jié)。本文通過TCM 的度量機(jī)制檢查Grub每個Stage、Grub配置、Kernel等的可信性,并將度量結(jié)果按照相關(guān)規(guī)范存放在對應(yīng)的PCR 中,從而確保操作系統(tǒng)啟動前的安全環(huán)境[8]。具體的引導(dǎo)流程如圖6所示。
圖6 可信引導(dǎo)流程
BIOS正常啟動后便開始度量位于硬盤中的主引導(dǎo)記錄(master boot record,MBR),即Grub Stage1代碼,度量結(jié)果保存在移動密碼模塊中的PCR4中,再載入MBR 運行。按照這以規(guī)則依次度量載入Grub Stage1.5、Grub Stage2,在控制權(quán)交給Grub Stage2 后Bootloader Grub已經(jīng)完全啟動,可以執(zhí)行操作系統(tǒng)的相關(guān)加載工作。之后Grub度量其配置文件并擴(kuò)展至PCR5,再度量需要加載的操作系統(tǒng)內(nèi)核,驗證內(nèi)核文件的完整性??尚乓龑?dǎo)程序保證了Grub自身的安全性,防止機(jī)器在操作系統(tǒng)啟動前被注入惡意代碼,這些都為操作系統(tǒng)的安全啟動奠定了基礎(chǔ)[9]。
設(shè)備驅(qū)動的一體化設(shè)計實現(xiàn)內(nèi)核啟動時密碼模塊的自動檢測和對應(yīng)驅(qū)動的自動加載,最大限度的減少人工參與。為了實現(xiàn)該功能,除了提供密碼模塊設(shè)備驅(qū)動外,還需要提供一個批處理文件,主要用于設(shè)備的自動加載。要在內(nèi)核啟動過程中自動加載某個硬件設(shè)備的驅(qū)動,需做如下準(zhǔn)備:
(1)在/etc/init.d目錄中添加啟動腳本文件;
(2)創(chuàng)建一個符號鏈接,在鏈接文件中包含啟動腳本文件的路徑名;
(3)為硬件設(shè)備創(chuàng)建一個設(shè)備信息文件,用于描述設(shè)備標(biāo)識、與設(shè)備標(biāo)識對應(yīng)的設(shè)備驅(qū)動程序、設(shè)備配置參數(shù)(設(shè)備選項)、設(shè)備對應(yīng)的別名、設(shè)備的主設(shè)備號等信息;
(4)使用depmod–a建立描述模塊之間依賴關(guān)系的文件modules.dep;
(5)在/etc/modules.conf中設(shè)置正確的設(shè)備別名和對應(yīng)的設(shè)備驅(qū)動名。
內(nèi)核在啟動時,總線驅(qū)動程序通過枚舉為每個設(shè)備建立一個設(shè)備對象??偩€對象與kset對象是一對一的關(guān)系,設(shè)備對象與kobject對象也是一對一的關(guān)系。這樣總線和設(shè)備對象便形成了樹形結(jié)構(gòu)的關(guān)系。在總線驅(qū)動程序為監(jiān)測到的設(shè)備建立設(shè)備對象時,會初始化kobject對象,并把它連接到設(shè)備樹中,同時會調(diào)用kobject_uevent()把這個(添加新設(shè)備的)事件,以及相關(guān)信息通過netlink發(fā)送到用戶態(tài)[10]。用戶態(tài)的udevd檢測到事件信息后便打開modules.conf文件,根據(jù)其中的別名找到對應(yīng)的設(shè)備驅(qū)動,modprobe就可加載該驅(qū)動了。同時modprobe 根據(jù)modules.dep檢查其依賴的其它模塊是否已加載,若未加載,則先加載其依賴模塊。這樣便完成了硬件的自動檢測和自動加載。
根據(jù)設(shè)計,在windows XP環(huán)境下進(jìn)行固件的開發(fā),測試環(huán)境采用龍芯3A 平臺、麒麟操作系統(tǒng)和相關(guān)連接設(shè)備組成。主要對可信啟動過程以及啟動后的通道傳輸速率進(jìn)行測試。在報文分組為8192字節(jié)的前提下對通道傳輸速率的測試結(jié)果見表1。
通過測試發(fā)現(xiàn),使用USB3.0 接口密碼接口模塊可以對主機(jī)的啟動過程實現(xiàn)有效的安全保護(hù)功能,阻止惡意代碼對系統(tǒng)的破壞,同時該模塊適用于主板上沒有嵌入TCM的普通計算機(jī)平臺。由于可信啟動增加了度量驗證的過程,因此在啟動時會增加額外的時間開銷,對GRUB 的度量驗證時間約為1.3s,對內(nèi)核文件的度量驗證時間約為11s,對其它部件的驗證時間約為0.9s。系統(tǒng)額外時間的影響在可接受范圍之類,達(dá)到了最初的設(shè)計目的。
表1 通道傳輸速率
為了提供更加便捷高效的可信服務(wù),本文設(shè)計實現(xiàn)密碼模塊以USB3.0接口的方式與主機(jī)連接,為一般的沒有嵌入TCM 的計算機(jī)的運行提供安全可信運行環(huán)境,同時借助TCM 的功能實現(xiàn)了可信引導(dǎo)程序,確保了系統(tǒng)啟動、操作系統(tǒng)加載以及應(yīng)用程序的完整性。目前所設(shè)計的密碼模塊已經(jīng)滿足基本的可信服務(wù)需求,極大降低了系統(tǒng)的安全風(fēng)險。接下來的研究工作將重點放在可信恢復(fù)方法以及提高USB3.0接口密碼模塊的性能上,使得在為計算機(jī)提供高效可信服務(wù),同時還能使計算機(jī)對惡意代碼攻擊有一定的自我修復(fù)能力。
[1]FENG Dengguo.Trusted computing-theory and practice[M].Beijing:Tsinghua University Press,2013:1-5 (in Chinese).[馮登國.可信計算—理論與實踐 [M].北京:清華大學(xué)出版社,2013:1-5.]
[2]Trusted Computing Group.TCG web site[EB/OL]. [2010-11-21].http://www.trustedcomputinggroup.org.
[3]Trusted Computing Group.TCG TPM main part 1:Design principles,specification version 1.2 [EB/OL].[2014-11-18].http://www.trustedcomputinggroup.org.
[4]SHEN Changxiang,ZHANG Huanguo,WANG Huaimin,et al.Research on the development of trusted computing [J].China Science:Information Science,2012,40 (2):139-380(in Chinese).[沈昌祥,張煥國,王懷民,等.可信計算的研究發(fā) 展 [J]. 中 國 科 學(xué): 信 息 科 學(xué),2012,40 (2):139-380.]
[5]ZHU Xiaobo,SHU Peng,ZHOU Xiaoxia.Design on the domestic trusted computer based on TCM [J].Science Technology,2013,37 (12):102-105 (in Chinese). [朱小波,舒鵬,周曉霞.基于TCM 的國產(chǎn)可信計算機(jī)的設(shè)計 [J].信息技術(shù),2013,37 (12):102-105.]
[6]Cypress Semiconductor.GPIF II designer version 1.0 [EB/OL].[2014-12-22].http://www.cypress.com.
[7]Cypress Semiconductor.EZ-USB FX3superspeed USB controller[EB/OL].[2014-12-23].http://www.cypress.com.
[8]FENG Dengguo,QIN Yu.Research on attestation method for trust computing environment[J].Chinese Journal of Computers,2008,31 (9):1641-1648 (in Chinese). [馮登國,秦宇.可信計算環(huán)境證明方法研究 [J].計算機(jī)學(xué)報,2008,31(9):1641-1648.]
[9]XU Mingdi,ZHANG Huanguo,ZHANG Fan,et al.Survey on chain of trust of trusted system [J].Acta Electronica Sinica,2014,42 (10):2024-2048 (in Chinese).[徐明迪,張煥國,張帆,等.可信系統(tǒng)信任鏈研究綜述 [J].電子學(xué)報,2014,42 (10):2024-2028.]
[10]Smstong:The Linux kernel device driver module of automatic loading mechanism [EB/OL].[2015-01-03].CSDN.http://blog.csdn.net/smstong/article/details/9836589.